From 318b4813f2b45ecf98bd46104d560393768b832c Mon Sep 17 00:00:00 2001 From: mogith-pn <143642606+mogith-pn@users.noreply.github.com> Date: Tue, 30 Apr 2024 22:38:33 +0530 Subject: [PATCH 001/378] Clarifai-LiteLLM integration (#1) * intg v1 clarifai-litellm * Added more community models and testcase * Clarifai-updated markdown docs --- cookbook/liteLLM_clarifai_Demo.ipynb | 151 ++++++++++++++ docs/my-website/docs/providers/clarifai.md | 177 +++++++++++++++++ litellm/__init__.py | 70 +++++++ litellm/llms/clarifai.py | 216 +++++++++++++++++++++ litellm/llms/prompt_templates/factory.py | 3 + litellm/main.py | 50 +++++ litellm/tests/test_clarifai_completion.py | 67 +++++++ 7 files changed, 734 insertions(+) create mode 100644 cookbook/liteLLM_clarifai_Demo.ipynb create mode 100644 docs/my-website/docs/providers/clarifai.md create mode 100644 litellm/llms/clarifai.py create mode 100644 litellm/tests/test_clarifai_completion.py diff --git a/cookbook/liteLLM_clarifai_Demo.ipynb b/cookbook/liteLLM_clarifai_Demo.ipynb new file mode 100644 index 00000000000..4e3b4dbb06a --- /dev/null +++ b/cookbook/liteLLM_clarifai_Demo.ipynb @@ -0,0 +1,151 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LiteLLM Clarifai \n", + "This notebook walks you through on how to use liteLLM integration of Clarifai and call LLM model from clarifai with response in openAI output format." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-Requisites" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#install necessary packages\n", + "!pip install litellm\n", + "!pip install clarifai" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To obtain Clarifai Personal Access Token follow the steps mentioned in the [link](https://docs.clarifai.com/clarifai-basics/authentication/personal-access-tokens/)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "## Set Clarifai Credentials\n", + "import os\n", + "os.environ[\"CLARIFAI_API_KEY\"]= \"YOUR_CLARIFAI_PAT\" # Clarifai PAT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mistral-large" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import litellm\n", + "\n", + "litellm.set_verbose=False" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mistral large response : ModelResponse(id='chatcmpl-6eed494d-7ae2-4870-b9c2-6a64d50a6151', choices=[Choices(finish_reason='stop', index=1, message=Message(content=\"In the grand tapestry of time, where tales unfold,\\nLies the chronicle of ages, a sight to behold.\\nA tale of empires rising, and kings of old,\\nOf civilizations lost, and stories untold.\\n\\nOnce upon a yesterday, in a time so vast,\\nHumans took their first steps, casting shadows in the past.\\nFrom the cradle of mankind, a journey they embarked,\\nThrough stone and bronze and iron, their skills they sharpened and marked.\\n\\nEgyptians built pyramids, reaching for the skies,\\nWhile Greeks sought wisdom, truth, in philosophies that lie.\\nRoman legions marched, their empire to expand,\\nAnd in the East, the Silk Road joined the world, hand in hand.\\n\\nThe Middle Ages came, with knights in shining armor,\\nFeudal lords and serfs, a time of both clamor and calm order.\\nThen Renaissance bloomed, like a flower in the sun,\\nA rebirth of art and science, a new age had begun.\\n\\nAcross the vast oceans, explorers sailed with courage bold,\\nDiscovering new lands, stories of adventure, untold.\\nIndustrial Revolution churned, progress in its wake,\\nMachines and factories, a whole new world to make.\\n\\nTwo World Wars raged, a testament to man's strife,\\nYet from the ashes rose hope, a renewed will for life.\\nInto the modern era, technology took flight,\\nConnecting every corner, bathed in digital light.\\n\\nHistory, a symphony, a melody of time,\\nA testament to human will, resilience so sublime.\\nIn every page, a lesson, in every tale, a guide,\\nFor understanding our past, shapes our future's tide.\", role='assistant'))], created=1713896412, model='https://api.clarifai.com/v2/users/mistralai/apps/completion/models/mistral-large/outputs', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=13, completion_tokens=338, total_tokens=351))\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "messages = [{\"role\": \"user\",\"content\": \"\"\"Write a poem about history?\"\"\"}]\n", + "response=completion(\n", + " model=\"clarifai/mistralai.completion.mistral-large\",\n", + " messages=messages,\n", + " )\n", + "\n", + "print(f\"Mistral large response : {response}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Claude-2.1 " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Claude-2.1 response : ModelResponse(id='chatcmpl-d126c919-4db4-4aa3-ac8f-7edea41e0b93', choices=[Choices(finish_reason='stop', index=1, message=Message(content=\" Here's a poem I wrote about history:\\n\\nThe Tides of Time\\n\\nThe tides of time ebb and flow,\\nCarrying stories of long ago.\\nFigures and events come into light,\\nShaping the future with all their might.\\n\\nKingdoms rise, empires fall, \\nLeaving traces that echo down every hall.\\nRevolutions bring change with a fiery glow,\\nToppling structures from long ago.\\n\\nExplorers traverse each ocean and land,\\nSeeking treasures they don't understand.\\nWhile artists and writers try to make their mark,\\nHoping their works shine bright in the dark.\\n\\nThe cycle repeats again and again,\\nAs humanity struggles to learn from its pain.\\nThough the players may change on history's stage,\\nThe themes stay the same from age to age.\\n\\nWar and peace, life and death,\\nLove and strife with every breath.\\nThe tides of time continue their dance,\\nAs we join in, by luck or by chance.\\n\\nSo we study the past to light the way forward, \\nHeeding warnings from stories told and heard.\\nThe future unfolds from this unending flow -\\nWhere the tides of time ultimately go.\", role='assistant'))], created=1713896579, model='https://api.clarifai.com/v2/users/anthropic/apps/completion/models/claude-2_1/outputs', object='chat.completion', system_fingerprint=None, usage=Usage(prompt_tokens=12, completion_tokens=232, total_tokens=244))\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "messages = [{\"role\": \"user\",\"content\": \"\"\"Write a poem about history?\"\"\"}]\n", + "response=completion(\n", + " model=\"clarifai/anthropic.completion.claude-2_1\",\n", + " messages=messages,\n", + " )\n", + "\n", + "print(f\"Claude-2.1 response : {response}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/my-website/docs/providers/clarifai.md b/docs/my-website/docs/providers/clarifai.md new file mode 100644 index 00000000000..acc8c54befe --- /dev/null +++ b/docs/my-website/docs/providers/clarifai.md @@ -0,0 +1,177 @@ + +# Clarifai +Anthropic, OpenAI, Mistral, Llama and Gemini LLMs are Supported on Clarifai. + +## Pre-Requisites + +`pip install clarifai` + +`pip install litellm` + +## Required Environment Variables +To obtain your Clarifai Personal access token follow this [link](https://docs.clarifai.com/clarifai-basics/authentication/personal-access-tokens/). Optionally the PAT can also be passed in `completion` function. + +```python +os.environ["CALRIFAI_API_KEY"] = "YOUR_CLARIFAI_PAT" # CLARIFAI_PAT +``` + +## Usage + +```python +import os +from litellm import completion + +os.environ["CLARIFAI_API_KEY"] = "" + +response = completion( + model="clarifai/mistralai.completion.mistral-large", + messages=[{ "content": "Tell me a joke about physics?","role": "user"}] +) +``` + +**Output** +```json +{ + "id": "chatcmpl-572701ee-9ab2-411c-ac75-46c1ba18e781", + "choices": [ + { + "finish_reason": "stop", + "index": 1, + "message": { + "content": "Sure, here's a physics joke for you:\n\nWhy can't you trust an atom?\n\nBecause they make up everything!", + "role": "assistant" + } + } + ], + "created": 1714410197, + "model": "https://api.clarifai.com/v2/users/mistralai/apps/completion/models/mistral-large/outputs", + "object": "chat.completion", + "system_fingerprint": null, + "usage": { + "prompt_tokens": 14, + "completion_tokens": 24, + "total_tokens": 38 + } + } +``` + +## Clarifai models +liteLLM supports non-streaming requests to all models on [Clarifai community](https://clarifai.com/explore/models?filterData=%5B%7B%22field%22%3A%22use_cases%22%2C%22value%22%3A%5B%22llm%22%5D%7D%5D&page=1&perPage=24) + +Example Usage - Note: liteLLM supports all models deployed on Clarifai + +## Llama LLMs +| Model Name | Function Call | +---------------------------|---------------------------------| +| clarifai/meta.Llama-2.llama2-7b-chat | `completion('clarifai/meta.Llama-2.llama2-7b-chat', messages)` +| clarifai/meta.Llama-2.llama2-13b-chat | `completion('clarifai/meta.Llama-2.llama2-13b-chat', messages)` +| clarifai/meta.Llama-2.llama2-70b-chat | `completion('clarifai/meta.Llama-2.llama2-70b-chat', messages)` | +| clarifai/meta.Llama-2.codeLlama-70b-Python | `completion('clarifai/meta.Llama-2.codeLlama-70b-Python', messages)`| +| clarifai/meta.Llama-2.codeLlama-70b-Instruct | `completion('clarifai/meta.Llama-2.codeLlama-70b-Instruct', messages)` | + +## Mistal LLMs +| Model Name | Function Call | +|---------------------------------------------|------------------------------------------------------------------------| +| clarifai/mistralai.completion.mixtral-8x22B | `completion('clarifai/mistralai.completion.mixtral-8x22B', messages)` | +| clarifai/mistralai.completion.mistral-large | `completion('clarifai/mistralai.completion.mistral-large', messages)` | +| clarifai/mistralai.completion.mistral-medium | `completion('clarifai/mistralai.completion.mistral-medium', messages)` | +| clarifai/mistralai.completion.mistral-small | `completion('clarifai/mistralai.completion.mistral-small', messages)` | +| clarifai/mistralai.completion.mixtral-8x7B-Instruct-v0_1 | `completion('clarifai/mistralai.completion.mixtral-8x7B-Instruct-v0_1', messages)` +| clarifai/mistralai.completion.mistral-7B-OpenOrca | `completion('clarifai/mistralai.completion.mistral-7B-OpenOrca', messages)` | +| clarifai/mistralai.completion.openHermes-2-mistral-7B | `completion('clarifai/mistralai.completion.openHermes-2-mistral-7B', messages)` | + + +## Jurassic LLMs +| Model Name | Function Call | +|-----------------------------------------------|---------------------------------------------------------------------| +| clarifai/ai21.complete.Jurassic2-Grande | `completion('clarifai/ai21.complete.Jurassic2-Grande', messages)` | +| clarifai/ai21.complete.Jurassic2-Grande-Instruct | `completion('clarifai/ai21.complete.Jurassic2-Grande-Instruct', messages)` | +| clarifai/ai21.complete.Jurassic2-Jumbo-Instruct | `completion('clarifai/ai21.complete.Jurassic2-Jumbo-Instruct', messages)` | +| clarifai/ai21.complete.Jurassic2-Jumbo | `completion('clarifai/ai21.complete.Jurassic2-Jumbo', messages)` | +| clarifai/ai21.complete.Jurassic2-Large | `completion('clarifai/ai21.complete.Jurassic2-Large', messages)` | + +## Wizard LLMs + +| Model Name | Function Call | +|-----------------------------------------------|---------------------------------------------------------------------| +| clarifai/wizardlm.generate.wizardCoder-Python-34B | `completion('clarifai/wizardlm.generate.wizardCoder-Python-34B', messages)` | +| clarifai/wizardlm.generate.wizardLM-70B | `completion('clarifai/wizardlm.generate.wizardLM-70B', messages)` | +| clarifai/wizardlm.generate.wizardLM-13B | `completion('clarifai/wizardlm.generate.wizardLM-13B', messages)` | +| clarifai/wizardlm.generate.wizardCoder-15B | `completion('clarifai/wizardlm.generate.wizardCoder-15B', messages)` | + +## Anthropic models + +| Model Name | Function Call | +|-----------------------------------------------|---------------------------------------------------------------------| +| clarifai/anthropic.completion.claude-v1 | `completion('clarifai/anthropic.completion.claude-v1', messages)` | +| clarifai/anthropic.completion.claude-instant-1_2 | `completion('clarifai/anthropic.completion.claude-instant-1_2', messages)` | +| clarifai/anthropic.completion.claude-instant | `completion('clarifai/anthropic.completion.claude-instant', messages)` | +| clarifai/anthropic.completion.claude-v2 | `completion('clarifai/anthropic.completion.claude-v2', messages)` | +| clarifai/anthropic.completion.claude-2_1 | `completion('clarifai/anthropic.completion.claude-2_1', messages)` | +| clarifai/anthropic.completion.claude-3-opus | `completion('clarifai/anthropic.completion.claude-3-opus', messages)` | +| clarifai/anthropic.completion.claude-3-sonnet | `completion('clarifai/anthropic.completion.claude-3-sonnet', messages)` | + +## OpenAI GPT LLMs + +| Model Name | Function Call | +|-----------------------------------------------|---------------------------------------------------------------------| +| clarifai/openai.chat-completion.GPT-4 | `completion('clarifai/openai.chat-completion.GPT-4', messages)` | +| clarifai/openai.chat-completion.GPT-3_5-turbo | `completion('clarifai/openai.chat-completion.GPT-3_5-turbo', messages)` | +| clarifai/openai.chat-completion.gpt-4-turbo | `completion('clarifai/openai.chat-completion.gpt-4-turbo', messages)` | +| clarifai/openai.completion.gpt-3_5-turbo-instruct | `completion('clarifai/openai.completion.gpt-3_5-turbo-instruct', messages)` | + +## GCP LLMs + +| Model Name | Function Call | +|-----------------------------------------------|---------------------------------------------------------------------| +| clarifai/gcp.generate.gemini-1_5-pro | `completion('clarifai/gcp.generate.gemini-1_5-pro', messages)` | +| clarifai/gcp.generate.imagen-2 | `completion('clarifai/gcp.generate.imagen-2', messages)` | +| clarifai/gcp.generate.code-gecko | `completion('clarifai/gcp.generate.code-gecko', messages)` | +| clarifai/gcp.generate.code-bison | `completion('clarifai/gcp.generate.code-bison', messages)` | +| clarifai/gcp.generate.text-bison | `completion('clarifai/gcp.generate.text-bison', messages)` | +| clarifai/gcp.generate.gemma-2b-it | `completion('clarifai/gcp.generate.gemma-2b-it', messages)` | +| clarifai/gcp.generate.gemma-7b-it | `completion('clarifai/gcp.generate.gemma-7b-it', messages)` | +| clarifai/gcp.generate.gemini-pro | `completion('clarifai/gcp.generate.gemini-pro', messages)` | +| clarifai/gcp.generate.gemma-1_1-7b-it | `completion('clarifai/gcp.generate.gemma-1_1-7b-it', messages)` | + +## Cohere LLMs +| Model Name | Function Call | +|-----------------------------------------------|---------------------------------------------------------------------| +| clarifai/cohere.generate.cohere-generate-command | `completion('clarifai/cohere.generate.cohere-generate-command', messages)` | + clarifai/cohere.generate.command-r-plus' | `completion('clarifai/clarifai/cohere.generate.command-r-plus', messages)`| + +## Databricks LLMs + +| Model Name | Function Call | +|---------------------------------------------------|---------------------------------------------------------------------| +| clarifai/databricks.drbx.dbrx-instruct | `completion('clarifai/databricks.drbx.dbrx-instruct', messages)` | +| clarifai/databricks.Dolly-v2.dolly-v2-12b | `completion('clarifai/databricks.Dolly-v2.dolly-v2-12b', messages)`| + +## Microsoft LLMs + +| Model Name | Function Call | +|---------------------------------------------------|---------------------------------------------------------------------| +| clarifai/microsoft.text-generation.phi-2 | `completion('clarifai/microsoft.text-generation.phi-2', messages)` | +| clarifai/microsoft.text-generation.phi-1_5 | `completion('clarifai/microsoft.text-generation.phi-1_5', messages)`| + +## Salesforce models + +| Model Name | Function Call | +|-----------------------------------------------------------|-------------------------------------------------------------------------------| +| clarifai/salesforce.blip.general-english-image-caption-blip-2 | `completion('clarifai/salesforce.blip.general-english-image-caption-blip-2', messages)` | +| clarifai/salesforce.xgen.xgen-7b-8k-instruct | `completion('clarifai/salesforce.xgen.xgen-7b-8k-instruct', messages)` | + + +## Other Top performing LLMs + +| Model Name | Function Call | +|---------------------------------------------------|---------------------------------------------------------------------| +| clarifai/deci.decilm.deciLM-7B-instruct | `completion('clarifai/deci.decilm.deciLM-7B-instruct', messages)` | +| clarifai/upstage.solar.solar-10_7b-instruct | `completion('clarifai/upstage.solar.solar-10_7b-instruct', messages)` | +| clarifai/openchat.openchat.openchat-3_5-1210 | `completion('clarifai/openchat.openchat.openchat-3_5-1210', messages)` | +| clarifai/togethercomputer.stripedHyena.stripedHyena-Nous-7B | `completion('clarifai/togethercomputer.stripedHyena.stripedHyena-Nous-7B', messages)` | +| clarifai/fblgit.una-cybertron.una-cybertron-7b-v2 | `completion('clarifai/fblgit.una-cybertron.una-cybertron-7b-v2', messages)` | +| clarifai/tiiuae.falcon.falcon-40b-instruct | `completion('clarifai/tiiuae.falcon.falcon-40b-instruct', messages)` | +| clarifai/togethercomputer.RedPajama.RedPajama-INCITE-7B-Chat | `completion('clarifai/togethercomputer.RedPajama.RedPajama-INCITE-7B-Chat', messages)` | +| clarifai/bigcode.code.StarCoder | `completion('clarifai/bigcode.code.StarCoder', messages)` | +| clarifai/mosaicml.mpt.mpt-7b-instruct | `completion('clarifai/mosaicml.mpt.mpt-7b-instruct', messages)` | diff --git a/litellm/__init__.py b/litellm/__init__.py index 5ef78dce4d5..8523ee577ed 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -49,6 +49,7 @@ azure_key: Optional[str] = None anthropic_key: Optional[str] = None replicate_key: Optional[str] = None cohere_key: Optional[str] = None +clarifai_key: Optional[str] = None maritalk_key: Optional[str] = None ai21_key: Optional[str] = None openrouter_key: Optional[str] = None @@ -366,6 +367,73 @@ replicate_models: List = [ "replit/replit-code-v1-3b:b84f4c074b807211cd75e3e8b1589b6399052125b4c27106e43d47189e8415ad", ] +clarifai_models: List = [ + 'clarifai/meta.Llama-3.Llama-3-8B-Instruct', + 'clarifai/gcp.generate.gemma-1_1-7b-it', + 'clarifai/mistralai.completion.mixtral-8x22B', + 'clarifai/cohere.generate.command-r-plus', + 'clarifai/databricks.drbx.dbrx-instruct', + 'clarifai/mistralai.completion.mistral-large', + 'clarifai/mistralai.completion.mistral-medium', + 'clarifai/mistralai.completion.mistral-small', + 'clarifai/mistralai.completion.mixtral-8x7B-Instruct-v0_1', + 'clarifai/gcp.generate.gemma-2b-it', + 'clarifai/gcp.generate.gemma-7b-it', + 'clarifai/deci.decilm.deciLM-7B-instruct', + 'clarifai/mistralai.completion.mistral-7B-Instruct', + 'clarifai/gcp.generate.gemini-pro', + 'clarifai/anthropic.completion.claude-v1', + 'clarifai/anthropic.completion.claude-instant-1_2', + 'clarifai/anthropic.completion.claude-instant', + 'clarifai/anthropic.completion.claude-v2', + 'clarifai/anthropic.completion.claude-2_1', + 'clarifai/meta.Llama-2.codeLlama-70b-Python', + 'clarifai/meta.Llama-2.codeLlama-70b-Instruct', + 'clarifai/openai.completion.gpt-3_5-turbo-instruct', + 'clarifai/meta.Llama-2.llama2-7b-chat', + 'clarifai/meta.Llama-2.llama2-13b-chat', + 'clarifai/meta.Llama-2.llama2-70b-chat', + 'clarifai/openai.chat-completion.gpt-4-turbo', + 'clarifai/microsoft.text-generation.phi-2', + 'clarifai/meta.Llama-2.llama2-7b-chat-vllm', + 'clarifai/upstage.solar.solar-10_7b-instruct', + 'clarifai/openchat.openchat.openchat-3_5-1210', + 'clarifai/togethercomputer.stripedHyena.stripedHyena-Nous-7B', + 'clarifai/gcp.generate.text-bison', + 'clarifai/meta.Llama-2.llamaGuard-7b', + 'clarifai/fblgit.una-cybertron.una-cybertron-7b-v2', + 'clarifai/openai.chat-completion.GPT-4', + 'clarifai/openai.chat-completion.GPT-3_5-turbo', + 'clarifai/ai21.complete.Jurassic2-Grande', + 'clarifai/ai21.complete.Jurassic2-Grande-Instruct', + 'clarifai/ai21.complete.Jurassic2-Jumbo-Instruct', + 'clarifai/ai21.complete.Jurassic2-Jumbo', + 'clarifai/ai21.complete.Jurassic2-Large', + 'clarifai/cohere.generate.cohere-generate-command', + 'clarifai/wizardlm.generate.wizardCoder-Python-34B', + 'clarifai/wizardlm.generate.wizardLM-70B', + 'clarifai/tiiuae.falcon.falcon-40b-instruct', + 'clarifai/togethercomputer.RedPajama.RedPajama-INCITE-7B-Chat', + 'clarifai/gcp.generate.code-gecko', + 'clarifai/gcp.generate.code-bison', + 'clarifai/mistralai.completion.mistral-7B-OpenOrca', + 'clarifai/mistralai.completion.openHermes-2-mistral-7B', + 'clarifai/wizardlm.generate.wizardLM-13B', + 'clarifai/huggingface-research.zephyr.zephyr-7B-alpha', + 'clarifai/wizardlm.generate.wizardCoder-15B', + 'clarifai/microsoft.text-generation.phi-1_5', + 'clarifai/databricks.Dolly-v2.dolly-v2-12b', + 'clarifai/bigcode.code.StarCoder', + 'clarifai/salesforce.xgen.xgen-7b-8k-instruct', + 'clarifai/mosaicml.mpt.mpt-7b-instruct', + 'clarifai/anthropic.completion.claude-3-opus', + 'clarifai/anthropic.completion.claude-3-sonnet', + 'clarifai/gcp.generate.gemini-1_5-pro', + 'clarifai/gcp.generate.imagen-2', + 'clarifai/salesforce.blip.general-english-image-caption-blip-2', +] + + huggingface_models: List = [ "meta-llama/Llama-2-7b-hf", "meta-llama/Llama-2-7b-chat-hf", @@ -470,6 +538,7 @@ provider_list: List = [ "text-completion-openai", "cohere", "cohere_chat", + "clarifai", "anthropic", "replicate", "huggingface", @@ -608,6 +677,7 @@ from .llms.anthropic import AnthropicConfig from .llms.anthropic_text import AnthropicTextConfig from .llms.replicate import ReplicateConfig from .llms.cohere import CohereConfig +from .llms.clarifai import ClarifaiConfig from .llms.ai21 import AI21Config from .llms.together_ai import TogetherAIConfig from .llms.cloudflare import CloudflareConfig diff --git a/litellm/llms/clarifai.py b/litellm/llms/clarifai.py new file mode 100644 index 00000000000..2a7d77c61c6 --- /dev/null +++ b/litellm/llms/clarifai.py @@ -0,0 +1,216 @@ +import os, types, traceback +import json +import requests +import time +from typing import Callable, Optional +from litellm.utils import ModelResponse, Usage, Choices, Message +import litellm +import httpx +from .prompt_templates.factory import prompt_factory, custom_prompt + + +class ClarifaiError(Exception): + def __init__(self, status_code, message, url): + self.status_code = status_code + self.message = message + self.request = httpx.Request( + method="POST", url=url + ) + self.response = httpx.Response(status_code=status_code, request=self.request) + super().__init__( + self.message + ) + +class ClarifaiConfig: + """ + Reference: https://clarifai.com/meta/Llama-2/models/llama2-70b-chat + TODO fill in the details + """ + max_tokens: Optional[int] = None + temperature: Optional[int] = None + top_k: Optional[int] = None + + def __init__( + self, + max_tokens: Optional[int] = None, + temperature: Optional[int] = None, + top_k: Optional[int] = None, + ) -> None: + locals_ = locals() + for key, value in locals_.items(): + if key != "self" and value is not None: + setattr(self.__class__, key, value) + + @classmethod + def get_config(cls): + return { + k: v + for k, v in cls.__dict__.items() + if not k.startswith("__") + and not isinstance( + v, + ( + types.FunctionType, + types.BuiltinFunctionType, + classmethod, + staticmethod, + ), + ) + and v is not None + } + +def validate_environment(api_key): + headers = { + "accept": "application/json", + "content-type": "application/json", + } + if api_key: + headers["Authorization"] = f"Bearer {api_key}" + return headers + +def completions_to_model(payload): + # if payload["n"] != 1: + # raise HTTPException( + # status_code=422, + # detail="Only one generation is supported. Please set candidate_count to 1.", + # ) + + params = {} + if temperature := payload.get("temperature"): + params["temperature"] = temperature + if max_tokens := payload.get("max_tokens"): + params["max_tokens"] = max_tokens + return { + "inputs": [{"data": {"text": {"raw": payload["prompt"]}}}], + "model": {"output_info": {"params": params}}, +} + +def convert_model_to_url(model: str, api_base: str): + user_id, app_id, model_id = model.split(".") + return f"{api_base}/users/{user_id}/apps/{app_id}/models/{model_id}/outputs" + +def get_prompt_model_name(url: str): + clarifai_model_name = url.split("/")[-2] + if "claude" in clarifai_model_name: + return "anthropic", clarifai_model_name.replace("_", ".") + if ("llama" in clarifai_model_name)or ("mistral" in clarifai_model_name): + return "", "meta-llama/llama-2-chat" + else: + return "", clarifai_model_name + +def completion( + model: str, + messages: list, + api_base: str, + model_response: ModelResponse, + print_verbose: Callable, + encoding, + api_key, + logging_obj, + custom_prompt_dict={}, + optional_params=None, + litellm_params=None, + logger_fn=None, +): + headers = validate_environment(api_key) + model = convert_model_to_url(model, api_base) + prompt = " ".join(message["content"] for message in messages) # TODO + + ## Load Config + config = litellm.ClarifaiConfig.get_config() + for k, v in config.items(): + if ( + k not in optional_params + ): + optional_params[k] = v + + custom_llm_provider, orig_model_name = get_prompt_model_name(model) + if custom_llm_provider == "anthropic": + prompt = prompt_factory( + model=orig_model_name, + messages=messages, + api_key=api_key, + custom_llm_provider="clarifai" + ) + else: + prompt = prompt_factory( + model=orig_model_name, + messages=messages, + api_key=api_key, + custom_llm_provider=custom_llm_provider + ) + # print(prompt); exit(0) + + data = { + "prompt": prompt, + **optional_params, + } + data = completions_to_model(data) + + + ## LOGGING + logging_obj.pre_call( + input=prompt, + api_key=api_key, + additional_args={ + "complete_input_dict": data, + "headers": headers, + "api_base": api_base, + }, + ) + + ## COMPLETION CALL + response = requests.post( + model, + headers=headers, + data=json.dumps(data), + ) + # print(response.content); exit() + """ + {"status":{"code":10000,"description":"Ok","req_id":"d914cf7e097487997910650cde954a37"},"outputs":[{"id":"c2baa668174b4547bd4d2e9f8996198d","status":{"code":10000,"description":"Ok"},"created_at":"2024-02-07T10:57:52.917990493Z","model":{"id":"GPT-4","name":"GPT-4","created_at":"2023-06-08T17:40:07.964967Z","modified_at":"2023-12-04T11:39:54.587604Z","app_id":"chat-completion","model_version":{"id":"5d7a50b44aec4a01a9c492c5a5fcf387","created_at":"2023-11-09T19:57:56.961259Z","status":{"code":21100,"description":"Model is trained and ready"},"completed_at":"2023-11-09T20:00:48.933172Z","visibility":{"gettable":50},"app_id":"chat-completion","user_id":"openai","metadata":{}},"user_id":"openai","model_type_id":"text-to-text","visibility":{"gettable":50},"toolkits":[],"use_cases":[],"languages":[],"languages_full":[],"check_consents":[],"workflow_recommended":false,"image":{"url":"https://data.clarifai.com/small/users/openai/apps/chat-completion/inputs/image/34326a9914d361bb93ae8e5381689755","hosted":{"prefix":"https://data.clarifai.com","suffix":"users/openai/apps/chat-completion/inputs/image/34326a9914d361bb93ae8e5381689755","sizes":["small"],"crossorigin":"use-credentials"}}},"input":{"id":"fba1f22a332743f083ddae0a7eb443ae","data":{"text":{"raw":"what\'s the weather in SF","url":"https://samples.clarifai.com/placeholder.gif"}}},"data":{"text":{"raw":"As an AI, I\'m unable to provide real-time information or updates. Please check a reliable weather website or app for the current weather in San Francisco.","text_info":{"encoding":"UnknownTextEnc"}}}}]} + """ + if response.status_code != 200: + raise ClarifaiError(status_code=response.status_code, message=response.text, url=model) + if "stream" in optional_params and optional_params["stream"] == True: + return response.iter_lines() + else: + logging_obj.post_call( + input=prompt, + api_key=api_key, + original_response=response.text, + additional_args={"complete_input_dict": data}, + ) + ## RESPONSE OBJECT + completion_response = response.json() + # print(completion_response) + try: + choices_list = [] + for idx, item in enumerate(completion_response["outputs"]): + if len(item["data"]["text"]["raw"]) > 0: + message_obj = Message(content=item["data"]["text"]["raw"]) + else: + message_obj = Message(content=None) + choice_obj = Choices( + finish_reason="stop", + index=idx + 1, #check + message=message_obj, + ) + choices_list.append(choice_obj) + model_response["choices"] = choices_list + except Exception as e: + raise ClarifaiError( + message=traceback.format_exc(), status_code=response.status_code, url=model + ) + + # Calculate Usage + prompt_tokens = len(encoding.encode(prompt)) + completion_tokens = len( + encoding.encode(model_response["choices"][0]["message"].get("content")) + ) + model_response["model"] = model + model_response["usage"] = Usage( + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + total_tokens=prompt_tokens + completion_tokens, + ) + return model_response \ No newline at end of file diff --git a/litellm/llms/prompt_templates/factory.py b/litellm/llms/prompt_templates/factory.py index 8afda252ac2..14f1018b9ec 100644 --- a/litellm/llms/prompt_templates/factory.py +++ b/litellm/llms/prompt_templates/factory.py @@ -1306,6 +1306,9 @@ def prompt_factory( return anthropic_pt(messages=messages) elif "mistral." in model: return mistral_instruct_pt(messages=messages) + elif custom_llm_provider == "clarifai": + if "claude" in model: + return anthropic_pt(messages=messages) elif custom_llm_provider == "perplexity": for message in messages: message.pop("name", None) diff --git a/litellm/main.py b/litellm/main.py index 593fc7eaeee..334fe7b6e7c 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -53,6 +53,7 @@ from .llms import ( ollama, ollama_chat, cloudflare, + clarifai, cohere, cohere_chat, petals, @@ -1150,6 +1151,55 @@ def completion( ) response = model_response + elif ("clarifai" in model + or custom_llm_provider == "clarifai" + or model in litellm.clarifai_models + ): + clarifai_key = None + clarifai_key = ( + api_key + or litellm.clarifai_key + or litellm.api_key + or get_secret("CLARIFAI_API_KEY") + or get_secret("CLARIFAI_API_TOKEN") + ) + + api_base = ( + api_base + or litellm.api_base + or get_secret("CLARIFAI_API_BASE") + or "https://api.clarifai.com/v2" + ) + + custom_prompt_dict = custom_prompt_dict or litellm.custom_prompt_dict + model_response = clarifai.completion( + model=model, + messages=messages, + api_base=api_base, + model_response=model_response, + print_verbose=print_verbose, + optional_params=optional_params, + litellm_params=litellm_params, + logger_fn=logger_fn, + encoding=encoding, # for calculating input/output tokens + api_key=clarifai_key, + logging_obj=logging, + custom_prompt_dict=custom_prompt_dict, + ) + + if "stream" in optional_params and optional_params["stream"] == True: + # don't try to access stream object, + + model_response = CustomStreamWrapper(model_response, model, logging_obj=logging, custom_llm_provider="replicate") + + if optional_params.get("stream", False) or acompletion == True: + ## LOGGING + logging.post_call( + input=messages, + api_key=clarifai_key, + original_response=model_response, + ) + response = model_response elif custom_llm_provider == "anthropic": api_key = ( diff --git a/litellm/tests/test_clarifai_completion.py b/litellm/tests/test_clarifai_completion.py new file mode 100644 index 00000000000..2c26263989e --- /dev/null +++ b/litellm/tests/test_clarifai_completion.py @@ -0,0 +1,67 @@ +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import embedding, completion, completion_cost, Timeout, ModelResponse +from litellm import RateLimitError + +# litellm.num_retries = 3 +litellm.cache = None +litellm.success_callback = [] +user_message = "Write a short poem about the sky" +messages = [{"content": user_message, "role": "user"}] + +@pytest.fixture(autouse=True) +def reset_callbacks(): + print("\npytest fixture - resetting callbacks") + litellm.success_callback = [] + litellm._async_success_callback = [] + litellm.failure_callback = [] + litellm.callbacks = [] + +def test_completion_clarifai_claude_2_1(): + print("calling clarifai claude completion") + import os + + clarifai_pat = os.environ["CLARIFAI_API_KEY"] + + try: + response = completion( + model="clarifai/anthropic.completion.claude-2_1", + messages=messages, + max_tokens=10, + temperature=0.1, + ) + print(response) + + except RateLimitError: + pass + + except Exception as e: + pytest.fail(f"Error occured: {e}") + + +def test_completion_clarifai_mistral_large(): + try: + litellm.set_verbose = True + response: ModelResponse = completion( + model="clarifai/mistralai.completion.mistral-small", + messages=messages, + max_tokens=10, + temperature=0.78, + ) + # Add any assertions here to check the response + assert len(response.choices) > 0 + assert len(response.choices[0].message.content) > 0 + except RateLimitError: + pass + except Exception as e: + pytest.fail(f"Error occurred: {e}") From ff8d1bc68cad51e323558a9ca5033ec0cb1c91ce Mon Sep 17 00:00:00 2001 From: jinno Date: Thu, 2 May 2024 21:39:51 +0900 Subject: [PATCH 002/378] fix(exceptions.py): import openai Exceptions --- litellm/exceptions.py | 47 +++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/litellm/exceptions.py b/litellm/exceptions.py index d8b0a7c55a6..7c3471acf36 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -9,25 +9,12 @@ ## LiteLLM versions of the OpenAI Exception Types -from openai import ( - AuthenticationError, - BadRequestError, - NotFoundError, - RateLimitError, - APIStatusError, - OpenAIError, - APIError, - APITimeoutError, - APIConnectionError, - APIResponseValidationError, - UnprocessableEntityError, - PermissionDeniedError, -) +import openai import httpx from typing import Optional -class AuthenticationError(AuthenticationError): # type: ignore +class AuthenticationError(openai.AuthenticationError): # type: ignore def __init__(self, message, llm_provider, model, response: httpx.Response): self.status_code = 401 self.message = message @@ -39,7 +26,7 @@ class AuthenticationError(AuthenticationError): # type: ignore # raise when invalid models passed, example gpt-8 -class NotFoundError(NotFoundError): # type: ignore +class NotFoundError(openai.NotFoundError): # type: ignore def __init__(self, message, model, llm_provider, response: httpx.Response): self.status_code = 404 self.message = message @@ -50,7 +37,7 @@ class NotFoundError(NotFoundError): # type: ignore ) # Call the base class constructor with the parameters it needs -class BadRequestError(BadRequestError): # type: ignore +class BadRequestError(openai.BadRequestError): # type: ignore def __init__( self, message, model, llm_provider, response: Optional[httpx.Response] = None ): @@ -69,7 +56,7 @@ class BadRequestError(BadRequestError): # type: ignore ) # Call the base class constructor with the parameters it needs -class UnprocessableEntityError(UnprocessableEntityError): # type: ignore +class UnprocessableEntityError(openai.UnprocessableEntityError): # type: ignore def __init__(self, message, model, llm_provider, response: httpx.Response): self.status_code = 422 self.message = message @@ -80,7 +67,7 @@ class UnprocessableEntityError(UnprocessableEntityError): # type: ignore ) # Call the base class constructor with the parameters it needs -class Timeout(APITimeoutError): # type: ignore +class Timeout(openai.APITimeoutError): # type: ignore def __init__(self, message, model, llm_provider): request = httpx.Request(method="POST", url="https://api.openai.com/v1") super().__init__( @@ -96,7 +83,7 @@ class Timeout(APITimeoutError): # type: ignore return str(self.message) -class PermissionDeniedError(PermissionDeniedError): # type:ignore +class PermissionDeniedError(openai.PermissionDeniedError): # type:ignore def __init__(self, message, llm_provider, model, response: httpx.Response): self.status_code = 403 self.message = message @@ -107,7 +94,7 @@ class PermissionDeniedError(PermissionDeniedError): # type:ignore ) # Call the base class constructor with the parameters it needs -class RateLimitError(RateLimitError): # type: ignore +class RateLimitError(openai.RateLimitError): # type: ignore def __init__(self, message, llm_provider, model, response: httpx.Response): self.status_code = 429 self.message = message @@ -148,7 +135,7 @@ class ContentPolicyViolationError(BadRequestError): # type: ignore ) # Call the base class constructor with the parameters it needs -class ServiceUnavailableError(APIStatusError): # type: ignore +class ServiceUnavailableError(openai.APIStatusError): # type: ignore def __init__(self, message, llm_provider, model, response: httpx.Response): self.status_code = 503 self.message = message @@ -160,7 +147,7 @@ class ServiceUnavailableError(APIStatusError): # type: ignore # raise this when the API returns an invalid response object - https://github.com/openai/openai-python/blob/1be14ee34a0f8e42d3f9aa5451aa4cb161f1781f/openai/api_requestor.py#L401 -class APIError(APIError): # type: ignore +class APIError(openai.APIError): # type: ignore def __init__( self, status_code, message, llm_provider, model, request: httpx.Request ): @@ -172,7 +159,7 @@ class APIError(APIError): # type: ignore # raised if an invalid request (not get, delete, put, post) is made -class APIConnectionError(APIConnectionError): # type: ignore +class APIConnectionError(openai.APIConnectionError): # type: ignore def __init__(self, message, llm_provider, model, request: httpx.Request): self.message = message self.llm_provider = llm_provider @@ -182,7 +169,7 @@ class APIConnectionError(APIConnectionError): # type: ignore # raised if an invalid request (not get, delete, put, post) is made -class APIResponseValidationError(APIResponseValidationError): # type: ignore +class APIResponseValidationError(openai.APIResponseValidationError): # type: ignore def __init__(self, message, llm_provider, model): self.message = message self.llm_provider = llm_provider @@ -192,7 +179,7 @@ class APIResponseValidationError(APIResponseValidationError): # type: ignore super().__init__(response=response, body=None, message=message) -class OpenAIError(OpenAIError): # type: ignore +class OpenAIError(openai.OpenAIError): # type: ignore def __init__(self, original_exception): self.status_code = original_exception.http_status super().__init__( @@ -214,12 +201,14 @@ class BudgetExceededError(Exception): ## DEPRECATED ## -class InvalidRequestError(BadRequestError): # type: ignore - def __init__(self, message, model, llm_provider): +class InvalidRequestError(openai.BadRequestError): # type: ignore + def __init__( + self, message, model, llm_provider, response: Optional[httpx.Response] = None + ): self.status_code = 400 self.message = message self.model = model self.llm_provider = llm_provider super().__init__( - self.message, f"{self.model}" + self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs From 6cec252b076012fd3ea5a8b06d603e05c38dd789 Mon Sep 17 00:00:00 2001 From: Lunik Date: Thu, 2 May 2024 23:12:48 +0200 Subject: [PATCH 003/378] =?UTF-8?q?=E2=9C=A8=20feat:=20Add=20Azure=20Conte?= =?UTF-8?q?nt-Safety=20Proxy=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- litellm/proxy/hooks/azure_content_safety.py | 157 ++++++++++++++++++++ litellm/proxy/proxy_server.py | 17 +++ 2 files changed, 174 insertions(+) create mode 100644 litellm/proxy/hooks/azure_content_safety.py diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py new file mode 100644 index 00000000000..161e35cde6a --- /dev/null +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -0,0 +1,157 @@ +from litellm.integrations.custom_logger import CustomLogger +from litellm.caching import DualCache +from litellm.proxy._types import UserAPIKeyAuth +import litellm, traceback, sys, uuid +from fastapi import HTTPException +from litellm._logging import verbose_proxy_logger + + +class _PROXY_AzureContentSafety( + CustomLogger +): # https://docs.litellm.ai/docs/observability/custom_callback#callback-class + # Class variables or attributes + + def __init__(self, endpoint, api_key, thresholds=None): + try: + from azure.ai.contentsafety.aio import ContentSafetyClient + from azure.core.credentials import AzureKeyCredential + from azure.ai.contentsafety.models import TextCategory + from azure.ai.contentsafety.models import AnalyzeTextOptions + from azure.core.exceptions import HttpResponseError + except Exception as e: + raise Exception( + f"\033[91mAzure Content-Safety not installed, try running 'pip install azure-ai-contentsafety' to fix this error: {e}\n{traceback.format_exc()}\033[0m" + ) + self.endpoint = endpoint + self.api_key = api_key + self.text_category = TextCategory + self.analyze_text_options = AnalyzeTextOptions + self.azure_http_error = HttpResponseError + + self.thresholds = self._configure_thresholds(thresholds) + + self.client = ContentSafetyClient( + self.endpoint, AzureKeyCredential(self.api_key) + ) + + def _configure_thresholds(self, thresholds=None): + default_thresholds = { + self.text_category.HATE: 6, + self.text_category.SELF_HARM: 6, + self.text_category.SEXUAL: 6, + self.text_category.VIOLENCE: 6, + } + + if thresholds is None: + return default_thresholds + + for key, default in default_thresholds.items(): + if key not in thresholds: + thresholds[key] = default + + return thresholds + + def print_verbose(self, print_statement): + try: + verbose_proxy_logger.debug(print_statement) + if litellm.set_verbose: + print(print_statement) # noqa + except: + pass + + def _severity(self, severity): + if severity >= 6: + return "high" + elif severity >= 4: + return "medium" + elif severity >= 2: + return "low" + else: + return "safe" + + def _compute_result(self, response): + result = {} + + category_severity = { + item.category: item.severity for item in response.categories_analysis + } + for category in self.text_category: + severity = category_severity.get(category) + if severity is not None: + result[category] = { + "filtered": severity >= self.thresholds[category], + "severity": self._severity(severity), + } + + return result + + async def test_violation(self, content: str, source: str = None): + self.print_verbose(f"Testing Azure Content-Safety for: {content}") + + # Construct a request + request = self.analyze_text_options(text=content) + + # Analyze text + try: + response = await self.client.analyze_text(request) + except self.azure_http_error as e: + self.print_verbose( + f"Error in Azure Content-Safety: {traceback.format_exc()}" + ) + traceback.print_exc() + raise + + result = self._compute_result(response) + self.print_verbose(f"Azure Content-Safety Result: {result}") + + for key, value in result.items(): + if value["filtered"]: + raise HTTPException( + status_code=400, + detail={ + "error": "Violated content safety policy", + "source": source, + "category": key, + "severity": value["severity"], + }, + ) + + async def async_pre_call_hook( + self, + user_api_key_dict: UserAPIKeyAuth, + cache: DualCache, + data: dict, + call_type: str, # "completion", "embeddings", "image_generation", "moderation" + ): + self.print_verbose(f"Inside Azure Content-Safety Pre-Call Hook") + try: + if call_type == "completion" and "messages" in data: + for m in data["messages"]: + if "content" in m and isinstance(m["content"], str): + await self.test_violation(content=m["content"], source="input") + + except HTTPException as e: + raise e + except Exception as e: + traceback.print_exc() + + async def async_post_call_success_hook( + self, + user_api_key_dict: UserAPIKeyAuth, + response, + ): + self.print_verbose(f"Inside Azure Content-Safety Post-Call Hook") + if isinstance(response, litellm.ModelResponse) and isinstance( + response.choices[0], litellm.utils.Choices + ): + await self.test_violation( + content=response.choices[0].message.content, source="output" + ) + + async def async_post_call_streaming_hook( + self, + user_api_key_dict: UserAPIKeyAuth, + response: str, + ): + self.print_verbose(f"Inside Azure Content-Safety Call-Stream Hook") + await self.test_violation(content=response, source="output") diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 9cc87196654..9c74659ccd9 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -2235,6 +2235,23 @@ class ProxyConfig: batch_redis_obj = _PROXY_BatchRedisRequests() imported_list.append(batch_redis_obj) + elif ( + isinstance(callback, str) + and callback == "azure_content_safety" + ): + from litellm.proxy.hooks.azure_content_safety import ( + _PROXY_AzureContentSafety, + ) + + azure_content_safety_params = litellm_settings["azure_content_safety_params"] + for k, v in azure_content_safety_params.items(): + if v is not None and isinstance(v, str) and v.startswith("os.environ/"): + azure_content_safety_params[k] = litellm.get_secret(v) + + azure_content_safety_obj = _PROXY_AzureContentSafety( + **azure_content_safety_params, + ) + imported_list.append(azure_content_safety_obj) else: imported_list.append( get_instance_fn( From 406c9820d1950cf60256a50989212bd6d470cd3e Mon Sep 17 00:00:00 2001 From: Lunik Date: Thu, 2 May 2024 23:28:21 +0200 Subject: [PATCH 004/378] =?UTF-8?q?=E2=9E=95=20feat:=20Add=20python=20requ?= =?UTF-8?q?irements=20for=20Azure=20Content-Safety=20callback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index fbf7a28c701..7e2fa3c18c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,6 +26,8 @@ fastapi-sso==0.10.0 # admin UI, SSO pyjwt[crypto]==2.8.0 python-multipart==0.0.9 # admin UI Pillow==10.3.0 +azure-ai-contentsafety==1.0.0 # for azure content safety +azure-identity==1.15.0 # for azure content safety ### LITELLM PACKAGE DEPENDENCIES python-dotenv==1.0.0 # for env From 723ef9963e9c9468d98a25ab5aa8ed3f2499ccac Mon Sep 17 00:00:00 2001 From: mogith-pn <143642606+mogith-pn@users.noreply.github.com> Date: Fri, 3 May 2024 14:03:38 +0000 Subject: [PATCH 005/378] Clarifai - Added streaming and async completion support --- cookbook/liteLLM_clarifai_Demo.ipynb | 38 +++- litellm/llms/clarifai.py | 206 +++++++++++++++++----- litellm/main.py | 9 +- litellm/tests/test_clarifai_completion.py | 28 ++- litellm/tests/test_streaming.py | 3 +- litellm/utils.py | 28 +++ 6 files changed, 259 insertions(+), 53 deletions(-) diff --git a/cookbook/liteLLM_clarifai_Demo.ipynb b/cookbook/liteLLM_clarifai_Demo.ipynb index 4e3b4dbb06a..40ef2fcf932 100644 --- a/cookbook/liteLLM_clarifai_Demo.ipynb +++ b/cookbook/liteLLM_clarifai_Demo.ipynb @@ -119,6 +119,42 @@ "print(f\"Claude-2.1 response : {response}\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### OpenAI GPT-4 (Streaming)\n", + "Though clarifai doesn't support streaming, still you can call stream and get the response in standard StreamResponse format of liteLLM" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ModelResponse(id='chatcmpl-40ae19af-3bf0-4eb4-99f2-33aec3ba84af', choices=[StreamingChoices(finish_reason=None, index=0, delta=Delta(content=\"In the quiet corners of time's grand hall,\\nLies the tale of rise and fall.\\nFrom ancient ruins to modern sprawl,\\nHistory, the greatest story of them all.\\n\\nEmpires have risen, empires have decayed,\\nThrough the eons, memories have stayed.\\nIn the book of time, history is laid,\\nA tapestry of events, meticulously displayed.\\n\\nThe pyramids of Egypt, standing tall,\\nThe Roman Empire's mighty sprawl.\\nFrom Alexander's conquest, to the Berlin Wall,\\nHistory, a silent witness to it all.\\n\\nIn the shadow of the past we tread,\\nWhere once kings and prophets led.\\nTheir stories in our hearts are spread,\\nEchoes of their words, in our minds are read.\\n\\nBattles fought and victories won,\\nActs of courage under the sun.\\nTales of love, of deeds done,\\nIn history's grand book, they all run.\\n\\nHeroes born, legends made,\\nIn the annals of time, they'll never fade.\\nTheir triumphs and failures all displayed,\\nIn the eternal march of history's parade.\\n\\nThe ink of the past is forever dry,\\nBut its lessons, we cannot deny.\\nIn its stories, truths lie,\\nIn its wisdom, we rely.\\n\\nHistory, a mirror to our past,\\nA guide for the future vast.\\nThrough its lens, we're ever cast,\\nIn the drama of life, forever vast.\", role='assistant', function_call=None, tool_calls=None), logprobs=None)], created=1714744515, model='https://api.clarifai.com/v2/users/openai/apps/chat-completion/models/GPT-4/outputs', object='chat.completion.chunk', system_fingerprint=None)\n", + "ModelResponse(id='chatcmpl-40ae19af-3bf0-4eb4-99f2-33aec3ba84af', choices=[StreamingChoices(finish_reason='stop', index=0, delta=Delta(content=None, role=None, function_call=None, tool_calls=None), logprobs=None)], created=1714744515, model='https://api.clarifai.com/v2/users/openai/apps/chat-completion/models/GPT-4/outputs', object='chat.completion.chunk', system_fingerprint=None)\n" + ] + } + ], + "source": [ + "from litellm import completion\n", + "\n", + "messages = [{\"role\": \"user\",\"content\": \"\"\"Write a poem about history?\"\"\"}]\n", + "response = completion(\n", + " model=\"clarifai/openai.chat-completion.GPT-4\",\n", + " messages=messages,\n", + " stream=True,\n", + " api_key = \"c75cc032415e45368be331fdd2c06db0\")\n", + "\n", + "for chunk in response:\n", + " print(chunk)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -143,7 +179,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.10" + "version": "3.10.13" } }, "nbformat": 4, diff --git a/litellm/llms/clarifai.py b/litellm/llms/clarifai.py index 2a7d77c61c6..e07a8d9e8aa 100644 --- a/litellm/llms/clarifai.py +++ b/litellm/llms/clarifai.py @@ -3,9 +3,10 @@ import json import requests import time from typing import Callable, Optional -from litellm.utils import ModelResponse, Usage, Choices, Message +from litellm.utils import ModelResponse, Usage, Choices, Message, CustomStreamWrapper import litellm import httpx +from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler from .prompt_templates.factory import prompt_factory, custom_prompt @@ -84,6 +85,63 @@ def completions_to_model(payload): "inputs": [{"data": {"text": {"raw": payload["prompt"]}}}], "model": {"output_info": {"params": params}}, } + +def process_response( + model, + prompt, + response, + model_response, + api_key, + data, + encoding, + logging_obj + ): + logging_obj.post_call( + input=prompt, + api_key=api_key, + original_response=response.text, + additional_args={"complete_input_dict": data}, + ) + ## RESPONSE OBJECT + try: + completion_response = response.json() + except Exception: + raise ClarifaiError( + message=response.text, status_code=response.status_code, url=model + ) + # print(completion_response) + try: + choices_list = [] + for idx, item in enumerate(completion_response["outputs"]): + if len(item["data"]["text"]["raw"]) > 0: + message_obj = Message(content=item["data"]["text"]["raw"]) + else: + message_obj = Message(content=None) + choice_obj = Choices( + finish_reason="stop", + index=idx + 1, #check + message=message_obj, + ) + choices_list.append(choice_obj) + model_response["choices"] = choices_list + + except Exception as e: + raise ClarifaiError( + message=traceback.format_exc(), status_code=response.status_code, url=model + ) + + # Calculate Usage + prompt_tokens = len(encoding.encode(prompt)) + completion_tokens = len( + encoding.encode(model_response["choices"][0]["message"].get("content")) + ) + model_response["model"] = model + model_response["usage"] = Usage( + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + total_tokens=prompt_tokens + completion_tokens, + ) + return model_response def convert_model_to_url(model: str, api_base: str): user_id, app_id, model_id = model.split(".") @@ -98,6 +156,40 @@ def get_prompt_model_name(url: str): else: return "", clarifai_model_name +async def async_completion( + model: str, + prompt: str, + api_base: str, + custom_prompt_dict: dict, + model_response: ModelResponse, + print_verbose: Callable, + encoding, + api_key, + logging_obj, + data=None, + optional_params=None, + litellm_params=None, + logger_fn=None, + headers={}): + + async_handler = AsyncHTTPHandler( + timeout=httpx.Timeout(timeout=600.0, connect=5.0) + ) + response = await async_handler.post( + api_base, headers=headers, data=json.dumps(data) + ) + + return process_response( + model=model, + prompt=prompt, + response=response, + model_response=model_response, + api_key=api_key, + data=data, + encoding=encoding, + logging_obj=logging_obj, + ) + def completion( model: str, messages: list, @@ -108,6 +200,7 @@ def completion( api_key, logging_obj, custom_prompt_dict={}, + acompletion=False, optional_params=None, litellm_params=None, logger_fn=None, @@ -158,59 +251,78 @@ def completion( "api_base": api_base, }, ) - - ## COMPLETION CALL - response = requests.post( + if acompletion==True: + return async_completion( + model=model, + prompt=prompt, + api_base=api_base, + custom_prompt_dict=custom_prompt_dict, + model_response=model_response, + print_verbose=print_verbose, + encoding=encoding, + api_key=api_key, + logging_obj=logging_obj, + data=data, + optional_params=optional_params, + litellm_params=litellm_params, + logger_fn=logger_fn, + headers=headers, + ) + else: + ## COMPLETION CALL + response = requests.post( model, headers=headers, data=json.dumps(data), ) # print(response.content); exit() - """ - {"status":{"code":10000,"description":"Ok","req_id":"d914cf7e097487997910650cde954a37"},"outputs":[{"id":"c2baa668174b4547bd4d2e9f8996198d","status":{"code":10000,"description":"Ok"},"created_at":"2024-02-07T10:57:52.917990493Z","model":{"id":"GPT-4","name":"GPT-4","created_at":"2023-06-08T17:40:07.964967Z","modified_at":"2023-12-04T11:39:54.587604Z","app_id":"chat-completion","model_version":{"id":"5d7a50b44aec4a01a9c492c5a5fcf387","created_at":"2023-11-09T19:57:56.961259Z","status":{"code":21100,"description":"Model is trained and ready"},"completed_at":"2023-11-09T20:00:48.933172Z","visibility":{"gettable":50},"app_id":"chat-completion","user_id":"openai","metadata":{}},"user_id":"openai","model_type_id":"text-to-text","visibility":{"gettable":50},"toolkits":[],"use_cases":[],"languages":[],"languages_full":[],"check_consents":[],"workflow_recommended":false,"image":{"url":"https://data.clarifai.com/small/users/openai/apps/chat-completion/inputs/image/34326a9914d361bb93ae8e5381689755","hosted":{"prefix":"https://data.clarifai.com","suffix":"users/openai/apps/chat-completion/inputs/image/34326a9914d361bb93ae8e5381689755","sizes":["small"],"crossorigin":"use-credentials"}}},"input":{"id":"fba1f22a332743f083ddae0a7eb443ae","data":{"text":{"raw":"what\'s the weather in SF","url":"https://samples.clarifai.com/placeholder.gif"}}},"data":{"text":{"raw":"As an AI, I\'m unable to provide real-time information or updates. Please check a reliable weather website or app for the current weather in San Francisco.","text_info":{"encoding":"UnknownTextEnc"}}}}]} - """ + if response.status_code != 200: raise ClarifaiError(status_code=response.status_code, message=response.text, url=model) + if "stream" in optional_params and optional_params["stream"] == True: - return response.iter_lines() - else: - logging_obj.post_call( - input=prompt, - api_key=api_key, - original_response=response.text, - additional_args={"complete_input_dict": data}, - ) - ## RESPONSE OBJECT - completion_response = response.json() - # print(completion_response) - try: - choices_list = [] - for idx, item in enumerate(completion_response["outputs"]): - if len(item["data"]["text"]["raw"]) > 0: - message_obj = Message(content=item["data"]["text"]["raw"]) - else: - message_obj = Message(content=None) - choice_obj = Choices( - finish_reason="stop", - index=idx + 1, #check - message=message_obj, - ) - choices_list.append(choice_obj) - model_response["choices"] = choices_list - except Exception as e: - raise ClarifaiError( - message=traceback.format_exc(), status_code=response.status_code, url=model + completion_stream = response.iter_lines() + stream_response = CustomStreamWrapper( + completion_stream=completion_stream, + model=model, + custom_llm_provider="clarifai", + logging_obj=logging_obj, ) + return stream_response + + else: + return process_response( + model=model, + prompt=prompt, + response=response, + model_response=model_response, + api_key=api_key, + data=data, + encoding=encoding, + logging_obj=logging_obj) + - # Calculate Usage - prompt_tokens = len(encoding.encode(prompt)) - completion_tokens = len( - encoding.encode(model_response["choices"][0]["message"].get("content")) - ) - model_response["model"] = model - model_response["usage"] = Usage( - prompt_tokens=prompt_tokens, - completion_tokens=completion_tokens, - total_tokens=prompt_tokens + completion_tokens, - ) - return model_response \ No newline at end of file +class ModelResponseIterator: + def __init__(self, model_response): + self.model_response = model_response + self.is_done = False + + # Sync iterator + def __iter__(self): + return self + + def __next__(self): + if self.is_done: + raise StopIteration + self.is_done = True + return self.model_response + + # Async iterator + def __aiter__(self): + return self + + async def __anext__(self): + if self.is_done: + raise StopAsyncIteration + self.is_done = True + return self.model_response \ No newline at end of file diff --git a/litellm/main.py b/litellm/main.py index 0bc802a9c3b..396ac1779c3 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1185,6 +1185,7 @@ def completion( print_verbose=print_verbose, optional_params=optional_params, litellm_params=litellm_params, + acompletion=acompletion, logger_fn=logger_fn, encoding=encoding, # for calculating input/output tokens api_key=clarifai_key, @@ -1194,8 +1195,12 @@ def completion( if "stream" in optional_params and optional_params["stream"] == True: # don't try to access stream object, - - model_response = CustomStreamWrapper(model_response, model, logging_obj=logging, custom_llm_provider="replicate") + ## LOGGING + logging.post_call( + input=messages, + api_key=api_key, + original_response=model_response, + ) if optional_params.get("stream", False) or acompletion == True: ## LOGGING diff --git a/litellm/tests/test_clarifai_completion.py b/litellm/tests/test_clarifai_completion.py index 2c26263989e..347e513bc1a 100644 --- a/litellm/tests/test_clarifai_completion.py +++ b/litellm/tests/test_clarifai_completion.py @@ -1,6 +1,7 @@ import sys, os import traceback from dotenv import load_dotenv +import asyncio, logging load_dotenv() import os, io @@ -10,7 +11,7 @@ sys.path.insert( ) # Adds the parent directory to the system path import pytest import litellm -from litellm import embedding, completion, completion_cost, Timeout, ModelResponse +from litellm import embedding, completion, acompletion, acreate, completion_cost, Timeout, ModelResponse from litellm import RateLimitError # litellm.num_retries = 3 @@ -65,3 +66,28 @@ def test_completion_clarifai_mistral_large(): pass except Exception as e: pytest.fail(f"Error occurred: {e}") + +@pytest.mark.asyncio +def test_async_completion_clarifai(): + import asyncio + + litellm.set_verbose = True + + async def test_get_response(): + user_message = "Hello, how are you?" + messages = [{"content": user_message, "role": "user"}] + try: + response = await acompletion( + model="clarifai/openai.chat-completion.GPT-4", + messages=messages, + timeout=10, + api_key=os.getenv("CLARIFAI_API_KEY"), + ) + print(f"response: {response}") + except litellm.Timeout as e: + pass + except Exception as e: + pytest.fail(f"An exception occurred: {e}") + + + asyncio.run(test_get_response()) diff --git a/litellm/tests/test_streaming.py b/litellm/tests/test_streaming.py index d0d8a720a72..bb9e0e16bda 100644 --- a/litellm/tests/test_streaming.py +++ b/litellm/tests/test_streaming.py @@ -391,8 +391,7 @@ def test_completion_claude_stream(): print(f"completion_response: {complete_response}") except Exception as e: pytest.fail(f"Error occurred: {e}") - - + # test_completion_claude_stream() def test_completion_claude_2_stream(): litellm.set_verbose = True diff --git a/litellm/utils.py b/litellm/utils.py index e5f7f9d11a2..56518f9f98d 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2807,6 +2807,7 @@ def client(original_function): ) else: return result + return result # Prints Exactly what was passed to litellm function - don't execute any logic here - it should just print @@ -2910,6 +2911,7 @@ def client(original_function): model_response_object=ModelResponse(), stream=kwargs.get("stream", False), ) + if kwargs.get("stream", False) == True: cached_result = CustomStreamWrapper( completion_stream=cached_result, @@ -9905,6 +9907,27 @@ class CustomStreamWrapper: return {"text": "", "is_finished": False} except Exception as e: raise e + + def handle_clarifai_completion_chunk(self, chunk): + try: + if isinstance(chunk, dict): + parsed_response = chunk + if isinstance(chunk, (str, bytes)): + if isinstance(chunk, bytes): + parsed_response = chunk.decode("utf-8") + else: + parsed_response = chunk + data_json = json.loads(parsed_response) + text = data_json.get("outputs", "")[0].get("data", "").get("text", "").get("raw","") + prompt_tokens = len(encoding.encode(data_json.get("outputs", "")[0].get("input","").get("data", "").get("text", "").get("raw",""))) + completion_tokens = len(encoding.encode(text)) + return { + "text": text, + "is_finished": True, + } + except: + traceback.print_exc() + return "" def model_response_creator(self): model_response = ModelResponse(stream=True, model=self.model) @@ -9949,6 +9972,11 @@ class CustomStreamWrapper: completion_obj["content"] = response_obj["text"] if response_obj["is_finished"]: self.received_finish_reason = response_obj["finish_reason"] + elif ( + self.custom_llm_provider and self.custom_llm_provider == "clarifai" + ): + response_obj = self.handle_clarifai_completion_chunk(chunk) + completion_obj["content"] = response_obj["text"] elif self.model == "replicate" or self.custom_llm_provider == "replicate": response_obj = self.handle_replicate_chunk(chunk) completion_obj["content"] = response_obj["text"] From 3677d56e9e1ed5e0b28c1efcde919ab5f79cae1a Mon Sep 17 00:00:00 2001 From: Vince Loewe Date: Fri, 3 May 2024 17:42:50 +0100 Subject: [PATCH 006/378] Lunary: Fix tool calling --- litellm/integrations/lunary.py | 36 ++++++++++++++++++++++++------ litellm/tests/test_lunary.py | 40 ++++++++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/litellm/integrations/lunary.py b/litellm/integrations/lunary.py index 6ddf2ca5992..6b23f098755 100644 --- a/litellm/integrations/lunary.py +++ b/litellm/integrations/lunary.py @@ -4,7 +4,6 @@ from datetime import datetime, timezone import traceback import dotenv import importlib -import sys import packaging @@ -18,13 +17,33 @@ def parse_usage(usage): "prompt": usage["prompt_tokens"] if "prompt_tokens" in usage else 0, } +def parse_tool_calls(tool_calls): + if tool_calls is None: + return None + + def clean_tool_call(tool_call): + + serialized = { + "type": tool_call.type, + "id": tool_call.id, + "function": { + "name": tool_call.function.name, + "arguments": tool_call.function.arguments, + } + } + + return serialized + + return [clean_tool_call(tool_call) for tool_call in tool_calls] + def parse_messages(input): + if input is None: return None def clean_message(message): - # if is strin, return as is + # if is string, return as is if isinstance(message, str): return message @@ -38,9 +57,7 @@ def parse_messages(input): # Only add tool_calls and function_call to res if they are set if message.get("tool_calls"): - serialized["tool_calls"] = message.get("tool_calls") - if message.get("function_call"): - serialized["function_call"] = message.get("function_call") + serialized["tool_calls"] = parse_tool_calls(message.get("tool_calls")) return serialized @@ -93,8 +110,13 @@ class LunaryLogger: print_verbose(f"Lunary Logging - Logging request for model {model}") litellm_params = kwargs.get("litellm_params", {}) + optional_params = kwargs.get("optional_params", {}) metadata = litellm_params.get("metadata", {}) or {} + if optional_params: + # merge into extra + extra = {**extra, **optional_params} + tags = litellm_params.pop("tags", None) or [] if extra: @@ -104,7 +126,7 @@ class LunaryLogger: # keep only serializable types for param, value in extra.items(): - if not isinstance(value, (str, int, bool, float)): + if not isinstance(value, (str, int, bool, float)) and param != "tools": try: extra[param] = str(value) except: @@ -140,7 +162,7 @@ class LunaryLogger: metadata=metadata, runtime="litellm", tags=tags, - extra=extra, + params=extra, ) self.lunary_client.track_event( diff --git a/litellm/tests/test_lunary.py b/litellm/tests/test_lunary.py index cbf9364aff8..c9a8afd57f1 100644 --- a/litellm/tests/test_lunary.py +++ b/litellm/tests/test_lunary.py @@ -11,7 +11,6 @@ litellm.failure_callback = ["lunary"] litellm.success_callback = ["lunary"] litellm.set_verbose = True - def test_lunary_logging(): try: response = completion( @@ -59,9 +58,46 @@ def test_lunary_logging_with_metadata(): except Exception as e: print(e) +#test_lunary_logging_with_metadata() -# test_lunary_logging_with_metadata() +def test_lunary_with_tools(): + import litellm + + messages = [{"role": "user", "content": "What's the weather like in San Francisco, Tokyo, and Paris?"}] + tools = [ + { + "type": "function", + "function": { + "name": "get_current_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, + }, + "required": ["location"], + }, + }, + } + ] + + response = litellm.completion( + model="gpt-3.5-turbo-1106", + messages=messages, + tools=tools, + tool_choice="auto", # auto is default, but we'll be explicit + ) + + response_message = response.choices[0].message + print("\nLLM Response:\n", response.choices[0].message) + + +#test_lunary_with_tools() def test_lunary_logging_with_streaming_and_metadata(): try: From e7405f105c886bad2ad6ed7a1eed0b47af29dcd0 Mon Sep 17 00:00:00 2001 From: Lunik Date: Fri, 3 May 2024 20:50:37 +0200 Subject: [PATCH 007/378] =?UTF-8?q?=E2=9C=85=20ci:=20Add=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- litellm/proxy/hooks/azure_content_safety.py | 8 +- litellm/tests/test_azure_content_safety.py | 267 ++++++++++++++++++++ 2 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 litellm/tests/test_azure_content_safety.py diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py index 161e35cde6a..d0d23363b4f 100644 --- a/litellm/proxy/hooks/azure_content_safety.py +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -36,10 +36,10 @@ class _PROXY_AzureContentSafety( def _configure_thresholds(self, thresholds=None): default_thresholds = { - self.text_category.HATE: 6, - self.text_category.SELF_HARM: 6, - self.text_category.SEXUAL: 6, - self.text_category.VIOLENCE: 6, + self.text_category.HATE: 4, + self.text_category.SELF_HARM: 4, + self.text_category.SEXUAL: 4, + self.text_category.VIOLENCE: 4, } if thresholds is None: diff --git a/litellm/tests/test_azure_content_safety.py b/litellm/tests/test_azure_content_safety.py new file mode 100644 index 00000000000..f7d9d826868 --- /dev/null +++ b/litellm/tests/test_azure_content_safety.py @@ -0,0 +1,267 @@ +# What is this? +## Unit test for azure content safety +import sys, os, asyncio, time, random +from datetime import datetime +import traceback +from dotenv import load_dotenv +from fastapi import HTTPException + +load_dotenv() +import os + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm.proxy.hooks.azure_content_safety import _PROXY_AzureContentSafety +from litellm import Router, mock_completion +from litellm.proxy.utils import ProxyLogging +from litellm.proxy._types import UserAPIKeyAuth +from litellm.caching import DualCache + + +@pytest.mark.asyncio +async def test_strict_input_filtering_01(): + """ + - have a response with a filtered input + - call the pre call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 2}, + ) + + data = { + "messages": [ + {"role": "system", "content": "You are an helpfull assistant"}, + {"role": "user", "content": "Fuck yourself you stupid bitch"}, + ] + } + + with pytest.raises(HTTPException) as exc_info: + await azure_content_safety.async_pre_call_hook( + user_api_key_dict=UserAPIKeyAuth(), + cache=DualCache(), + data=data, + call_type="completion", + ) + + assert exc_info.value.detail["source"] == "input" + assert exc_info.value.detail["category"] == "Hate" + assert exc_info.value.detail["severity"] == "low" + + +@pytest.mark.asyncio +async def test_strict_input_filtering_02(): + """ + - have a response with a filtered input + - call the pre call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 2}, + ) + + data = { + "messages": [ + {"role": "system", "content": "You are an helpfull assistant"}, + {"role": "user", "content": "Hello how are you ?"}, + ] + } + + await azure_content_safety.async_pre_call_hook( + user_api_key_dict=UserAPIKeyAuth(), + cache=DualCache(), + data=data, + call_type="completion", + ) + + +@pytest.mark.asyncio +async def test_loose_input_filtering_01(): + """ + - have a response with a filtered input + - call the pre call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 8}, + ) + + data = { + "messages": [ + {"role": "system", "content": "You are an helpfull assistant"}, + {"role": "user", "content": "Fuck yourself you stupid bitch"}, + ] + } + + await azure_content_safety.async_pre_call_hook( + user_api_key_dict=UserAPIKeyAuth(), + cache=DualCache(), + data=data, + call_type="completion", + ) + + +@pytest.mark.asyncio +async def test_loose_input_filtering_02(): + """ + - have a response with a filtered input + - call the pre call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 8}, + ) + + data = { + "messages": [ + {"role": "system", "content": "You are an helpfull assistant"}, + {"role": "user", "content": "Hello how are you ?"}, + ] + } + + await azure_content_safety.async_pre_call_hook( + user_api_key_dict=UserAPIKeyAuth(), + cache=DualCache(), + data=data, + call_type="completion", + ) + + +@pytest.mark.asyncio +async def test_strict_output_filtering_01(): + """ + - have a response with a filtered output + - call the post call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 2}, + ) + + response = mock_completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": "You are a song writer expert. You help users to write songs about any topic in any genre.", + }, + { + "role": "user", + "content": "Help me write a rap text song. Add some insults to make it more credible.", + }, + ], + mock_response="I'm the king of the mic, you're just a fucking dick. Don't fuck with me your stupid bitch.", + ) + + with pytest.raises(HTTPException) as exc_info: + await azure_content_safety.async_post_call_success_hook( + user_api_key_dict=UserAPIKeyAuth(), response=response + ) + + assert exc_info.value.detail["source"] == "output" + assert exc_info.value.detail["category"] == "Hate" + assert exc_info.value.detail["severity"] == "low" + + +@pytest.mark.asyncio +async def test_strict_output_filtering_02(): + """ + - have a response with a filtered output + - call the post call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 2}, + ) + + response = mock_completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": "You are a song writer expert. You help users to write songs about any topic in any genre.", + }, + { + "role": "user", + "content": "Help me write a rap text song. Add some insults to make it more credible.", + }, + ], + mock_response="I'm unable to help with you with hate speech", + ) + + await azure_content_safety.async_post_call_success_hook( + user_api_key_dict=UserAPIKeyAuth(), response=response + ) + + +@pytest.mark.asyncio +async def test_loose_output_filtering_01(): + """ + - have a response with a filtered output + - call the post call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 8}, + ) + + response = mock_completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": "You are a song writer expert. You help users to write songs about any topic in any genre.", + }, + { + "role": "user", + "content": "Help me write a rap text song. Add some insults to make it more credible.", + }, + ], + mock_response="I'm the king of the mic, you're just a fucking dick. Don't fuck with me your stupid bitch.", + ) + + await azure_content_safety.async_post_call_success_hook( + user_api_key_dict=UserAPIKeyAuth(), response=response + ) + + +@pytest.mark.asyncio +async def test_loose_output_filtering_02(): + """ + - have a response with a filtered output + - call the post call hook + """ + azure_content_safety = _PROXY_AzureContentSafety( + endpoint=os.getenv("AZURE_CONTENT_SAFETY_ENDPOINT"), + api_key=os.getenv("AZURE_CONTENT_SAFETY_API_KEY"), + thresholds={"Hate": 8}, + ) + + response = mock_completion( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": "You are a song writer expert. You help users to write songs about any topic in any genre.", + }, + { + "role": "user", + "content": "Help me write a rap text song. Add some insults to make it more credible.", + }, + ], + mock_response="I'm unable to help with you with hate speech", + ) + + await azure_content_safety.async_post_call_success_hook( + user_api_key_dict=UserAPIKeyAuth(), response=response + ) From 9ba9b3891fdba07d040808eaf25d7cf732027565 Mon Sep 17 00:00:00 2001 From: Lunik Date: Fri, 3 May 2024 20:51:40 +0200 Subject: [PATCH 008/378] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20perf:=20Remove=20t?= =?UTF-8?q?est=20violation=20on=20each=20stream=20chunk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- litellm/proxy/hooks/azure_content_safety.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py index d0d23363b4f..2cea05c69a3 100644 --- a/litellm/proxy/hooks/azure_content_safety.py +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -148,10 +148,10 @@ class _PROXY_AzureContentSafety( content=response.choices[0].message.content, source="output" ) - async def async_post_call_streaming_hook( - self, - user_api_key_dict: UserAPIKeyAuth, - response: str, - ): - self.print_verbose(f"Inside Azure Content-Safety Call-Stream Hook") - await self.test_violation(content=response, source="output") + #async def async_post_call_streaming_hook( + # self, + # user_api_key_dict: UserAPIKeyAuth, + # response: str, + #): + # self.print_verbose(f"Inside Azure Content-Safety Call-Stream Hook") + # await self.test_violation(content=response, source="output") From cb178723ca1df4c85596b1c4d1c062f2fc4b1cc0 Mon Sep 17 00:00:00 2001 From: Lunik Date: Sat, 4 May 2024 10:39:43 +0200 Subject: [PATCH 009/378] =?UTF-8?q?=F0=9F=93=9D=20doc:=20Azure=20content?= =?UTF-8?q?=20safety=20Proxy=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- docs/my-website/docs/proxy/logging.md | 86 ++++++++++++++++++++- litellm/proxy/hooks/azure_content_safety.py | 16 +--- litellm/tests/test_azure_content_safety.py | 4 +- 3 files changed, 90 insertions(+), 16 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 1c3b4f81c2a..f583765bb97 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -17,6 +17,7 @@ Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTeleme - [Logging to Sentry](#logging-proxy-inputoutput---sentry) - [Logging to Traceloop (OpenTelemetry)](#logging-proxy-inputoutput-traceloop-opentelemetry) - [Logging to Athina](#logging-proxy-inputoutput-athina) +- [Moderation with Azure Content-Safety](#moderation-with-azure-content-safety) ## Custom Callback Class [Async] Use this when you want to run custom callbacks in `python` @@ -1003,4 +1004,87 @@ curl --location 'http://0.0.0.0:4000/chat/completions' \ } ] }' -``` \ No newline at end of file +``` + +## Moderation with Azure Content Safety + +[Azure Content-Safety](https://azure.microsoft.com/en-us/products/ai-services/ai-content-safety) is a Microsoft Azure service that provides content moderation APIs to detect potential offensive, harmful, or risky content in text. + +We will use the `--config` to set `litellm.success_callback = ["azure_content_safety"]` this will moderate all LLM calls using Azure Content Safety. + +**Step 0** Deploy Azure Content Safety + +Deploy an Azure Content-Safety instance from the Azure Portal and get the `endpoint` and `key`. + +**Step 1** Set Athina API key + +```shell +AZURE_CONTENT_SAFETY_KEU = "" +``` + +**Step 2**: Create a `config.yaml` file and set `litellm_settings`: `success_callback` +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo +litellm_settings: + callbacks: ["azure_content_safety"] + azure_content_safety_params: + endpoint: "" + key: "os.environ/AZURE_CONTENT_SAFETY_KEY" +``` + +**Step 3**: Start the proxy, make a test request + +Start proxy +```shell +litellm --config config.yaml --debug +``` + +Test Request +``` +curl --location 'http://0.0.0.0:4000/chat/completions' \ + --header 'Content-Type: application/json' \ + --data ' { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "Hi, how are you?" + } + ] + }' +``` + +An HTTP 400 error will be returned if the content is detected with a value greater than the threshold set in the `config.yaml`. +The details of the response will describe : +- The `source` : input text or llm generated text +- The `category` : the category of the content that triggered the moderation +- The `severity` : the severity from 0 to 10 + +**Step 4**: Customizing Azure Content Safety Thresholds + +You can customize the thresholds for each category by setting the `thresholds` in the `config.yaml` + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo +litellm_settings: + callbacks: ["azure_content_safety"] + azure_content_safety_params: + endpoint: "" + key: "os.environ/AZURE_CONTENT_SAFETY_KEY" + thresholds: + Hate: 6 + SelfHarm: 8 + Sexual: 6 + Violence: 4 +``` + +:::info +`thresholds` are not required by default, but you can tune the values to your needs. +Default values is `4` for all categories +::: \ No newline at end of file diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py index 2cea05c69a3..2735a883940 100644 --- a/litellm/proxy/hooks/azure_content_safety.py +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -59,16 +59,6 @@ class _PROXY_AzureContentSafety( except: pass - def _severity(self, severity): - if severity >= 6: - return "high" - elif severity >= 4: - return "medium" - elif severity >= 2: - return "low" - else: - return "safe" - def _compute_result(self, response): result = {} @@ -80,7 +70,7 @@ class _PROXY_AzureContentSafety( if severity is not None: result[category] = { "filtered": severity >= self.thresholds[category], - "severity": self._severity(severity), + "severity": severity, } return result @@ -148,10 +138,10 @@ class _PROXY_AzureContentSafety( content=response.choices[0].message.content, source="output" ) - #async def async_post_call_streaming_hook( + # async def async_post_call_streaming_hook( # self, # user_api_key_dict: UserAPIKeyAuth, # response: str, - #): + # ): # self.print_verbose(f"Inside Azure Content-Safety Call-Stream Hook") # await self.test_violation(content=response, source="output") diff --git a/litellm/tests/test_azure_content_safety.py b/litellm/tests/test_azure_content_safety.py index f7d9d826868..3cc31003a7c 100644 --- a/litellm/tests/test_azure_content_safety.py +++ b/litellm/tests/test_azure_content_safety.py @@ -50,7 +50,7 @@ async def test_strict_input_filtering_01(): assert exc_info.value.detail["source"] == "input" assert exc_info.value.detail["category"] == "Hate" - assert exc_info.value.detail["severity"] == "low" + assert exc_info.value.detail["severity"] == 2 @pytest.mark.asyncio @@ -168,7 +168,7 @@ async def test_strict_output_filtering_01(): assert exc_info.value.detail["source"] == "output" assert exc_info.value.detail["category"] == "Hate" - assert exc_info.value.detail["severity"] == "low" + assert exc_info.value.detail["severity"] == 2 @pytest.mark.asyncio From ebbeb333c6820c100e9e6cf5dfd577adceda2714 Mon Sep 17 00:00:00 2001 From: Lunik Date: Sat, 4 May 2024 10:45:15 +0200 Subject: [PATCH 010/378] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20doc:=20typo=20in?= =?UTF-8?q?=20azure=20content=20safety?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- docs/my-website/docs/proxy/logging.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index f583765bb97..eaa65f09c76 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -3,7 +3,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# 🔎 Logging - Custom Callbacks, DataDog, Langfuse, s3 Bucket, Sentry, OpenTelemetry, Athina +# 🔎 Logging - Custom Callbacks, DataDog, Langfuse, s3 Bucket, Sentry, OpenTelemetry, Athina, Azure Content-Safety Log Proxy Input, Output, Exceptions using Custom Callbacks, Langfuse, OpenTelemetry, LangFuse, DynamoDB, s3 Bucket @@ -1019,7 +1019,7 @@ Deploy an Azure Content-Safety instance from the Azure Portal and get the `endpo **Step 1** Set Athina API key ```shell -AZURE_CONTENT_SAFETY_KEU = "" +AZURE_CONTENT_SAFETY_KEY = "" ``` **Step 2**: Create a `config.yaml` file and set `litellm_settings`: `success_callback` From 8783fd4895107cd2aa9ac5e7d9feec27c3b79ed5 Mon Sep 17 00:00:00 2001 From: Lunik Date: Sat, 4 May 2024 10:45:39 +0200 Subject: [PATCH 011/378] =?UTF-8?q?=E2=9C=A8=20feat:=20Use=208=20severity?= =?UTF-8?q?=20levels=20for=20azure=20content=20safety?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- litellm/proxy/hooks/azure_content_safety.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py index 2735a883940..fb9fc80ae01 100644 --- a/litellm/proxy/hooks/azure_content_safety.py +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -15,8 +15,11 @@ class _PROXY_AzureContentSafety( try: from azure.ai.contentsafety.aio import ContentSafetyClient from azure.core.credentials import AzureKeyCredential - from azure.ai.contentsafety.models import TextCategory - from azure.ai.contentsafety.models import AnalyzeTextOptions + from azure.ai.contentsafety.models import ( + TextCategory, + AnalyzeTextOptions, + AnalyzeTextOutputType, + ) from azure.core.exceptions import HttpResponseError except Exception as e: raise Exception( @@ -26,6 +29,7 @@ class _PROXY_AzureContentSafety( self.api_key = api_key self.text_category = TextCategory self.analyze_text_options = AnalyzeTextOptions + self.analyze_text_output_type = AnalyzeTextOutputType self.azure_http_error = HttpResponseError self.thresholds = self._configure_thresholds(thresholds) @@ -79,7 +83,10 @@ class _PROXY_AzureContentSafety( self.print_verbose(f"Testing Azure Content-Safety for: {content}") # Construct a request - request = self.analyze_text_options(text=content) + request = self.analyze_text_options( + text=content, + output_type=self.analyze_text_output_type.EIGHT_SEVERITY_LEVELS, + ) # Analyze text try: From 1639a51f241d906d2e1ce0b4343bd581206f7751 Mon Sep 17 00:00:00 2001 From: Lunik Date: Sat, 4 May 2024 11:04:23 +0200 Subject: [PATCH 012/378] =?UTF-8?q?=F0=9F=94=8A=20fix:=20Correctly=20use?= =?UTF-8?q?=20verbose=20logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lunik --- litellm/proxy/hooks/azure_content_safety.py | 22 +++++++-------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py index fb9fc80ae01..433571c15ce 100644 --- a/litellm/proxy/hooks/azure_content_safety.py +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -55,14 +55,6 @@ class _PROXY_AzureContentSafety( return thresholds - def print_verbose(self, print_statement): - try: - verbose_proxy_logger.debug(print_statement) - if litellm.set_verbose: - print(print_statement) # noqa - except: - pass - def _compute_result(self, response): result = {} @@ -80,7 +72,7 @@ class _PROXY_AzureContentSafety( return result async def test_violation(self, content: str, source: str = None): - self.print_verbose(f"Testing Azure Content-Safety for: {content}") + verbose_proxy_logger.debug("Testing Azure Content-Safety for: %s", content) # Construct a request request = self.analyze_text_options( @@ -92,14 +84,14 @@ class _PROXY_AzureContentSafety( try: response = await self.client.analyze_text(request) except self.azure_http_error as e: - self.print_verbose( - f"Error in Azure Content-Safety: {traceback.format_exc()}" + verbose_proxy_logger.debug( + "Error in Azure Content-Safety: %s", traceback.format_exc() ) traceback.print_exc() raise result = self._compute_result(response) - self.print_verbose(f"Azure Content-Safety Result: {result}") + verbose_proxy_logger.debug("Azure Content-Safety Result: %s", result) for key, value in result.items(): if value["filtered"]: @@ -120,7 +112,7 @@ class _PROXY_AzureContentSafety( data: dict, call_type: str, # "completion", "embeddings", "image_generation", "moderation" ): - self.print_verbose(f"Inside Azure Content-Safety Pre-Call Hook") + verbose_proxy_logger.debug("Inside Azure Content-Safety Pre-Call Hook") try: if call_type == "completion" and "messages" in data: for m in data["messages"]: @@ -137,7 +129,7 @@ class _PROXY_AzureContentSafety( user_api_key_dict: UserAPIKeyAuth, response, ): - self.print_verbose(f"Inside Azure Content-Safety Post-Call Hook") + verbose_proxy_logger.debug("Inside Azure Content-Safety Post-Call Hook") if isinstance(response, litellm.ModelResponse) and isinstance( response.choices[0], litellm.utils.Choices ): @@ -150,5 +142,5 @@ class _PROXY_AzureContentSafety( # user_api_key_dict: UserAPIKeyAuth, # response: str, # ): - # self.print_verbose(f"Inside Azure Content-Safety Call-Stream Hook") + # verbose_proxy_logger.debug("Inside Azure Content-Safety Call-Stream Hook") # await self.test_violation(content=response, source="output") From 39099e9c5bb1f2c106aeffc1daba35f9d3b8a50c Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Sat, 4 May 2024 16:22:53 +0400 Subject: [PATCH 013/378] feat: add logfire integration --- .circleci/config.yml | 13 ++- litellm/integrations/logfire_logger.py | 145 +++++++++++++++++++++++++ litellm/utils.py | 46 ++++++-- 3 files changed, 190 insertions(+), 14 deletions(-) create mode 100644 litellm/integrations/logfire_logger.py diff --git a/.circleci/config.yml b/.circleci/config.yml index 4b762ca82bf..1326c136844 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -41,6 +41,7 @@ jobs: pip install langchain pip install lunary==0.2.5 pip install "langfuse==2.27.1" + pip install "logfire==0.29.0" pip install numpydoc pip install traceloop-sdk==0.0.69 pip install openai @@ -86,7 +87,6 @@ jobs: exit 1 fi cd .. - # Run pytest and generate JUnit XML report - run: @@ -94,7 +94,7 @@ jobs: command: | pwd ls - python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 + python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m # Store test results @@ -170,6 +170,7 @@ jobs: pip install "aioboto3==12.3.0" pip install langchain pip install "langfuse>=2.0.0" + pip install "logfire==0.29.0" pip install numpydoc pip install prisma pip install fastapi @@ -223,7 +224,7 @@ jobs: name: Start outputting logs command: docker logs -f my-app background: true - - run: + - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 1m - run: @@ -231,7 +232,7 @@ jobs: command: | pwd ls - python -m pytest -vv tests/ -x --junitxml=test-results/junit.xml --durations=5 + python -m pytest -vv tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m # Store test results @@ -253,7 +254,7 @@ jobs: name: Copy model_prices_and_context_window File to model_prices_and_context_window_backup command: | cp model_prices_and_context_window.json litellm/model_prices_and_context_window_backup.json - + - run: name: Check if litellm dir was updated or if pyproject.toml was modified command: | @@ -338,4 +339,4 @@ workflows: filters: branches: only: - - main \ No newline at end of file + - main diff --git a/litellm/integrations/logfire_logger.py b/litellm/integrations/logfire_logger.py new file mode 100644 index 00000000000..edc83a35e12 --- /dev/null +++ b/litellm/integrations/logfire_logger.py @@ -0,0 +1,145 @@ +#### What this does #### +# On success + failure, log events to Logfire + +import dotenv, os + +dotenv.load_dotenv() # Loading env variables using dotenv +import traceback +import uuid +from litellm._logging import print_verbose, verbose_logger + +from typing import Any, Dict, NamedTuple +from typing_extensions import LiteralString + + +class SpanConfig(NamedTuple): + message_template: LiteralString + span_data: Dict[str, Any] + + +class LogfireLogger: + # Class variables or attributes + def __init__(self): + try: + verbose_logger.debug(f"in init logfire logger") + import logfire + + # only setting up logfire if we are sending to logfire + # in testing, we don't want to send to logfire + if logfire.DEFAULT_LOGFIRE_INSTANCE.config.send_to_logfire: + logfire.configure(token=os.getenv("LOGFIRE_TOKEN")) + except Exception as e: + print_verbose(f"Got exception on init logfire client {str(e)}") + raise e + + def _get_span_config(self, payload) -> SpanConfig: + if ( + payload["call_type"] == "completion" + or payload["call_type"] == "acompletion" + ): + return SpanConfig( + message_template="Chat Completion with {request_data[model]!r}", + span_data={"request_data": payload}, + ) + elif ( + payload["call_type"] == "embedding" or payload["call_type"] == "aembedding" + ): + return SpanConfig( + message_template="Embedding Creation with {request_data[model]!r}", + span_data={"request_data": payload}, + ) + elif ( + payload["call_type"] == "image_generation" + or payload["call_type"] == "aimage_generation" + ): + return SpanConfig( + message_template="Image Generation with {request_data[model]!r}", + span_data={"request_data": payload}, + ) + else: + return SpanConfig( + message_template="Litellm Call with {request_data[model]!r}", + span_data={"request_data": payload}, + ) + + async def _async_log_event( + self, kwargs, response_obj, start_time, end_time, print_verbose, user_id + ): + self.log_event(kwargs, response_obj, start_time, end_time, print_verbose) + + def log_event( + self, kwargs, response_obj, start_time, end_time, user_id, print_verbose + ): + try: + import logfire + + verbose_logger.debug( + f"logfire Logging - Enters logging function for model {kwargs}" + ) + litellm_params = kwargs.get("litellm_params", {}) + metadata = ( + litellm_params.get("metadata", {}) or {} + ) # if litellm_params['metadata'] == None + messages = kwargs.get("messages") + optional_params = kwargs.get("optional_params", {}) + call_type = kwargs.get("call_type", "completion") + cache_hit = kwargs.get("cache_hit", False) + usage = response_obj.get("usage", {}) + id = response_obj.get("id", str(uuid.uuid4())) + try: + response_time = (end_time - start_time).total_seconds() + except: + response_time = None + + # Clean Metadata before logging - never log raw metadata + # the raw metadata can contain circular references which leads to infinite recursion + # we clean out all extra litellm metadata params before logging + clean_metadata = {} + if isinstance(metadata, dict): + for key, value in metadata.items(): + # clean litellm metadata before logging + if key in [ + "endpoint", + "caching_groups", + "previous_models", + ]: + continue + else: + clean_metadata[key] = value + + # Build the initial payload + payload = { + "id": id, + "call_type": call_type, + "cache_hit": cache_hit, + "startTime": start_time, + "endTime": end_time, + "responseTime (seconds)": response_time, + "model": kwargs.get("model", ""), + "user": kwargs.get("user", ""), + "modelParameters": optional_params, + "spend": kwargs.get("response_cost", 0), + "messages": messages, + "response": response_obj, + "usage": usage, + "metadata": clean_metadata, + } + logfire_openai = logfire.with_settings(custom_scope_suffix="openai") + + message_template, span_data = self._get_span_config(payload) + with logfire_openai.span( + message_template, + **span_data, + ): + pass + print_verbose(f"\ndd Logger - Logging payload = {payload}") + + print_verbose( + f"Logfire Layer Logging - final response object: {response_obj}" + ) + except Exception as e: + traceback.print_exc() + verbose_logger.debug( + f"Logfire Layer Error - {str(e)}\n{traceback.format_exc()}" + ) + pass diff --git a/litellm/utils.py b/litellm/utils.py index ec296e9dc3d..1a0310928e8 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -6,7 +6,6 @@ # +-----------------------------------------------+ # # Thank you users! We ❤️ you! - Krrish & Ishaan - import sys, re, binascii, struct import litellm import dotenv, json, traceback, threading, base64, ast @@ -67,6 +66,7 @@ from .integrations.supabase import Supabase from .integrations.lunary import LunaryLogger from .integrations.prompt_layer import PromptLayerLogger from .integrations.langsmith import LangsmithLogger +from .integrations.logfire_logger import LogfireLogger from .integrations.weights_biases import WeightsBiasesLogger from .integrations.custom_logger import CustomLogger from .integrations.langfuse import LangFuseLogger @@ -128,6 +128,7 @@ heliconeLogger = None athinaLogger = None promptLayerLogger = None langsmithLogger = None +logfireLogger = None weightsBiasesLogger = None customLogger = None langFuseLogger = None @@ -1059,7 +1060,7 @@ class CallTypes(Enum): # Logging function -> log the exact model details + what's being sent | Non-BlockingP class Logging: - global supabaseClient, liteDebuggerClient, promptLayerLogger, weightsBiasesLogger, langsmithLogger, capture_exception, add_breadcrumb, lunaryLogger + global supabaseClient, liteDebuggerClient, promptLayerLogger, weightsBiasesLogger, langsmithLogger, logfireLogger, capture_exception, add_breadcrumb, lunaryLogger def __init__( self, @@ -1628,6 +1629,33 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) + if callback == "logfire": + global logfireLogger + verbose_logger.debug("reaches logfire for success logging!") + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + if "complete_streaming_response" not in kwargs: + break + else: + print_verbose("reaches logfire for streaming logging!") + result = kwargs["complete_streaming_response"] + + logfireLogger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + user_id=kwargs.get("user", None), + ) + if callback == "lunary": print_verbose("reaches lunary for logging!") model = self.model @@ -3974,12 +4002,10 @@ def calculage_img_tokens( tile_tokens = (base_tokens * 2) * tiles_needed_high_res total_tokens = base_tokens + tile_tokens return total_tokens - + def create_pretrained_tokenizer( - identifier: str, - revision="main", - auth_token: Optional[str] = None + identifier: str, revision="main", auth_token: Optional[str] = None ): """ Creates a tokenizer from an existing file on a HuggingFace repository to be used with `token_counter`. @@ -3993,7 +4019,9 @@ def create_pretrained_tokenizer( dict: A dictionary with the tokenizer and its type. """ - tokenizer = Tokenizer.from_pretrained(identifier, revision=revision, auth_token=auth_token) + tokenizer = Tokenizer.from_pretrained( + identifier, revision=revision, auth_token=auth_token + ) return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} @@ -6973,7 +7001,7 @@ def validate_environment(model: Optional[str] = None) -> dict: def set_callbacks(callback_list, function_id=None): - global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, aispendLogger, berrispendLogger, supabaseClient, liteDebuggerClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, langsmithLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger + global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, aispendLogger, berrispendLogger, supabaseClient, liteDebuggerClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, langsmithLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger try: for callback in callback_list: @@ -7055,6 +7083,8 @@ def set_callbacks(callback_list, function_id=None): weightsBiasesLogger = WeightsBiasesLogger() elif callback == "langsmith": langsmithLogger = LangsmithLogger() + elif callback == "logfire": + logfireLogger = LogfireLogger() elif callback == "aispend": aispendLogger = AISpendLogger() elif callback == "berrispend": From 134611a8f46338677455c0da63b5c96384b4cbdd Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Sat, 4 May 2024 16:23:06 +0400 Subject: [PATCH 014/378] test: add tests for logfire --- litellm/tests/test_logfire.py | 117 ++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 litellm/tests/test_logfire.py diff --git a/litellm/tests/test_logfire.py b/litellm/tests/test_logfire.py new file mode 100644 index 00000000000..da1cb7bde86 --- /dev/null +++ b/litellm/tests/test_logfire.py @@ -0,0 +1,117 @@ +import sys +import os +import json +import time + +import logfire +import litellm +import pytest +from logfire.testing import TestExporter, SimpleSpanProcessor + +sys.path.insert(0, os.path.abspath("../..")) + +# Testing scenarios for logfire logging: +# 1. Test logfire logging for completion +# 2. Test logfire logging for acompletion +# 3. Test logfire logging for completion while streaming is enabled +# 4. Test logfire logging for completion while streaming is enabled + + +@pytest.mark.parametrize("stream", [False, True]) +def test_completion_logfire_logging(stream): + litellm.success_callback = ["logfire"] + litellm.set_verbose = True + + exporter = TestExporter() + logfire.configure( + send_to_logfire=False, + console=False, + processors=[SimpleSpanProcessor(exporter)], + collect_system_metrics=False, + ) + messages = [{"role": "user", "content": "what llm are u"}] + temperature = 0.3 + max_tokens = 10 + response = litellm.completion( + model="gpt-3.5-turbo", + messages=messages, + max_tokens=max_tokens, + temperature=temperature, + stream=stream, + ) + print(response) + + if stream: + for chunk in response: + print(chunk) + + time.sleep(5) + exported_spans = exporter.exported_spans_as_dict() + + assert len(exported_spans) == 1 + assert ( + exported_spans[0]["attributes"]["logfire.msg"] + == "Chat Completion with 'gpt-3.5-turbo'" + ) + + request_data = json.loads(exported_spans[0]["attributes"]["request_data"]) + + assert request_data["model"] == "gpt-3.5-turbo" + assert request_data["messages"] == messages + + assert "completion_tokens" in request_data["usage"] + assert "prompt_tokens" in request_data["usage"] + assert "total_tokens" in request_data["usage"] + assert request_data["response"]["choices"][0]["message"]["content"] + assert request_data["modelParameters"]["max_tokens"] == max_tokens + assert request_data["modelParameters"]["temperature"] == temperature + + +@pytest.mark.asyncio +@pytest.mark.parametrize("stream", [False, True]) +async def test_acompletion_logfire_logging(stream): + litellm.success_callback = ["logfire"] + litellm.set_verbose = True + + exporter = TestExporter() + logfire.configure( + send_to_logfire=False, + console=False, + processors=[SimpleSpanProcessor(exporter)], + collect_system_metrics=False, + ) + messages = [{"role": "user", "content": "what llm are u"}] + temperature = 0.3 + max_tokens = 10 + response = await litellm.acompletion( + model="gpt-3.5-turbo", + messages=messages, + max_tokens=max_tokens, + temperature=temperature, + ) + print(response) + if stream: + for chunk in response: + print(chunk) + + time.sleep(5) + exported_spans = exporter.exported_spans_as_dict() + print("exported_spans", exported_spans) + + assert len(exported_spans) == 1 + assert ( + exported_spans[0]["attributes"]["logfire.msg"] + == "Chat Completion with 'gpt-3.5-turbo'" + ) + + request_data = json.loads(exported_spans[0]["attributes"]["request_data"]) + + assert request_data["model"] == "gpt-3.5-turbo" + assert request_data["messages"] == messages + + assert "completion_tokens" in request_data["usage"] + assert "prompt_tokens" in request_data["usage"] + assert "total_tokens" in request_data["usage"] + assert request_data["response"]["choices"][0]["message"]["content"] + assert request_data["modelParameters"]["max_tokens"] == max_tokens + assert request_data["modelParameters"]["temperature"] == temperature From 978912ef3265b9b023ea79d466ba034a5e477be6 Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Sat, 4 May 2024 17:40:23 +0400 Subject: [PATCH 015/378] feat: add failure handler for logfire --- litellm/integrations/logfire_logger.py | 50 +++++++++++++++++++++----- litellm/utils.py | 44 +++++++++++++++++------ 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/litellm/integrations/logfire_logger.py b/litellm/integrations/logfire_logger.py index edc83a35e12..fbe390b52ca 100644 --- a/litellm/integrations/logfire_logger.py +++ b/litellm/integrations/logfire_logger.py @@ -8,6 +8,7 @@ import traceback import uuid from litellm._logging import print_verbose, verbose_logger +from enum import Enum from typing import Any, Dict, NamedTuple from typing_extensions import LiteralString @@ -17,6 +18,11 @@ class SpanConfig(NamedTuple): span_data: Dict[str, Any] +class LogfireLevel(str, Enum): + INFO = "info" + ERROR = "error" + + class LogfireLogger: # Class variables or attributes def __init__(self): @@ -63,12 +69,31 @@ class LogfireLogger: ) async def _async_log_event( - self, kwargs, response_obj, start_time, end_time, print_verbose, user_id + self, + kwargs, + response_obj, + start_time, + end_time, + print_verbose, + level: LogfireLevel, ): - self.log_event(kwargs, response_obj, start_time, end_time, print_verbose) + self.log_event( + kwargs=kwargs, + response_obj=response_obj, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + level=level, + ) def log_event( - self, kwargs, response_obj, start_time, end_time, user_id, print_verbose + self, + kwargs, + start_time, + end_time, + print_verbose, + level: LogfireLevel, + response_obj, ): try: import logfire @@ -76,6 +101,9 @@ class LogfireLogger: verbose_logger.debug( f"logfire Logging - Enters logging function for model {kwargs}" ) + + if not response_obj: + response_obj = {} litellm_params = kwargs.get("litellm_params", {}) metadata = ( litellm_params.get("metadata", {}) or {} @@ -127,11 +155,17 @@ class LogfireLogger: logfire_openai = logfire.with_settings(custom_scope_suffix="openai") message_template, span_data = self._get_span_config(payload) - with logfire_openai.span( - message_template, - **span_data, - ): - pass + if level == LogfireLevel.INFO: + logfire_openai.info( + message_template, + **span_data, + ) + elif level == LogfireLevel.ERROR: + logfire_openai.error( + message_template, + **span_data, + exc_info=str(kwargs.get("exception", None)), + ) print_verbose(f"\ndd Logger - Logging payload = {payload}") print_verbose( diff --git a/litellm/utils.py b/litellm/utils.py index 1a0310928e8..0cd0b4c6c5b 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -66,7 +66,7 @@ from .integrations.supabase import Supabase from .integrations.lunary import LunaryLogger from .integrations.prompt_layer import PromptLayerLogger from .integrations.langsmith import LangsmithLogger -from .integrations.logfire_logger import LogfireLogger +from .integrations.logfire_logger import LogfireLogger, LogfireLevel from .integrations.weights_biases import WeightsBiasesLogger from .integrations.custom_logger import CustomLogger from .integrations.langfuse import LangFuseLogger @@ -1646,14 +1646,14 @@ class Logging: else: print_verbose("reaches logfire for streaming logging!") result = kwargs["complete_streaming_response"] - + logfireLogger.log_event( kwargs=self.model_call_details, response_obj=result, start_time=start_time, end_time=end_time, print_verbose=print_verbose, - user_id=kwargs.get("user", None), + level=LogfireLevel.INFO.value, ) if callback == "lunary": @@ -2346,7 +2346,9 @@ class Logging: def failure_handler( self, exception, traceback_exception, start_time=None, end_time=None ): - print_verbose(f"Logging Details LiteLLM-Failure Call") + print_verbose( + f"eLogging Details LiteLLM-Failure Call: {litellm.failure_callback}" + ) try: start_time, end_time = self._failure_handler_helper_fn( exception=exception, @@ -2359,6 +2361,7 @@ class Logging: self.redact_message_input_output_from_logging(result=result) for callback in litellm.failure_callback: + print_verbose(f"failure_callback: {callback}") try: if callback == "lite_debugger": print_verbose("reaches lite_debugger for logging!") @@ -2386,7 +2389,7 @@ class Logging: call_type=self.call_type, stream=self.stream, ) - elif callback == "lunary": + if callback == "lunary": print_verbose("reaches lunary for logging error!") model = self.model @@ -2411,7 +2414,7 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - elif callback == "sentry": + if callback == "sentry": print_verbose("sending exception to sentry") if capture_exception: capture_exception(exception) @@ -2419,7 +2422,7 @@ class Logging: print_verbose( f"capture exception not initialized: {capture_exception}" ) - elif callable(callback): # custom logger functions + if callable(callback): # custom logger functions customLogger.log_event( kwargs=self.model_call_details, response_obj=result, @@ -2428,7 +2431,7 @@ class Logging: print_verbose=print_verbose, callback_func=callback, ) - elif ( + if ( isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get( "acompletion", False @@ -2445,7 +2448,7 @@ class Logging: response_obj=result, kwargs=self.model_call_details, ) - elif callback == "langfuse": + if callback == "langfuse": global langFuseLogger verbose_logger.debug("reaches langfuse for logging!") kwargs = {} @@ -2473,7 +2476,7 @@ class Logging: level="ERROR", kwargs=self.model_call_details, ) - elif callback == "prometheus": + if callback == "prometheus": global prometheusLogger verbose_logger.debug("reaches prometheus for success logging!") kwargs = {} @@ -2491,6 +2494,26 @@ class Logging: user_id=kwargs.get("user", None), print_verbose=print_verbose, ) + + if callback == "logfire": + global logfireLogger + verbose_logger.debug("reaches logfire for failure logging!") + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + kwargs["exception"] = exception + + logfireLogger.log_event( + kwargs=kwargs, + response_obj=result, + start_time=start_time, + end_time=end_time, + level=LogfireLevel.ERROR.value, + print_verbose=print_verbose, + ) except Exception as e: print_verbose( f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging with integrations {str(e)}" @@ -3227,6 +3250,7 @@ def client(original_function): return original_function(*args, **kwargs) traceback_exception = traceback.format_exc() end_time = datetime.datetime.now() + # LOG FAILURE - handle streaming failure logging in the _next_ object, remove `handle_failure` once it's deprecated if logging_obj: logging_obj.failure_handler( From 7e0b479a37e465e50c80f8787c839b4aebcc80b5 Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Sat, 4 May 2024 17:47:54 +0400 Subject: [PATCH 016/378] docs: add documentation for logfire integration --- .../docs/observability/logfire_integration.md | 60 ++++++++++++++++++ docs/my-website/img/logfire.png | Bin 0 -> 711795 bytes 2 files changed, 60 insertions(+) create mode 100644 docs/my-website/docs/observability/logfire_integration.md create mode 100644 docs/my-website/img/logfire.png diff --git a/docs/my-website/docs/observability/logfire_integration.md b/docs/my-website/docs/observability/logfire_integration.md new file mode 100644 index 00000000000..c1f425f4251 --- /dev/null +++ b/docs/my-website/docs/observability/logfire_integration.md @@ -0,0 +1,60 @@ +import Image from '@theme/IdealImage'; + +# Logfire - Logging LLM Input/Output + +Logfire is open Source Observability & Analytics for LLM Apps +Detailed production traces and a granular view on quality, cost and latency + + + +:::info +We want to learn how we can make the callbacks better! Meet the LiteLLM [founders](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) or +join our [discord](https://discord.gg/wuPM9dRgDw) +::: + +## Pre-Requisites + +Ensure you have run `pip install logfire` for this integration + +```shell +pip install logfire litellm +``` + +## Quick Start + +Get your Logfire token from [Logfire](https://logfire.pydantic.dev/) + +```python +litellm.success_callback = ["logfire"] +litellm.failure_callback = ["logfire"] # logs errors to logfire +``` + +```python +# pip install logfire +import litellm +import os + +# from https://logfire.pydantic.dev/ +os.environ["LOGFIRE_TOKEN"] = "" + +# LLM API Keys +os.environ['OPENAI_API_KEY']="" + +# set logfire as a callback, litellm will send the data to logfire +litellm.success_callback = ["logfire"] + +# openai call +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "Hi 👋 - i'm openai"} + ] +) +``` + +## Support & Talk to Founders + +- [Schedule Demo 👋](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) +- [Community Discord 💭](https://discord.gg/wuPM9dRgDw) +- Our numbers 📞 +1 (770) 8783-106 / ‭+1 (412) 618-6238‬ +- Our emails ✉️ ishaan@berri.ai / krrish@berri.ai diff --git a/docs/my-website/img/logfire.png b/docs/my-website/img/logfire.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6be87e23398c8e0b0fbfe697d7ea0b07580cf7 GIT binary patch literal 711795 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

|1{QOB}fB$b0J$yatSmE_FklXnC3lX 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ⅇTu^ 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

^sJ0vJkJ>?5lW6K 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

Uuw-Hpp5G{~A5tsR3MVq`0 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 z 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
@@ -141,140 +171,164 @@ const CreateKey: React.FC = ({ wrapperCol={{ span: 16 }} labelAlign="left" > - <> - - - - - - - - - - - Optional Settings - - - { - if (value && team && team.max_budget !== null && value > team.max_budget) { - throw new Error(`Budget cannot exceed team max budget: $${team.max_budget}`); - } - }, - }, - ]} - > - - - + + + + - { - if (value && team && team.tpm_limit !== null && value > team.tpm_limit) { - throw new Error(`TPM limit cannot exceed team TPM limit: ${team.tpm_limit}`); - } - }, - }, - ]} - > - - - { - if (value && team && team.rpm_limit !== null && value > team.rpm_limit) { - throw new Error(`RPM limit cannot exceed team RPM limit: ${team.rpm_limit}`); - } - }, - }, - ]} - > - - - - - - - - + > + + + + + + + + + Optional Settings + + + { + if ( + value && + team && + team.max_budget !== null && + value > team.max_budget + ) { + throw new Error( + `Budget cannot exceed team max budget: $${team.max_budget}` + ); + } + }, + }, + ]} + > + + + + + + { + if ( + value && + team && + team.tpm_limit !== null && + value > team.tpm_limit + ) { + throw new Error( + `TPM limit cannot exceed team TPM limit: ${team.tpm_limit}` + ); + } + }, + }, + ]} + > + + + { + if ( + value && + team && + team.rpm_limit !== null && + value > team.rpm_limit + ) { + throw new Error( + `RPM limit cannot exceed team RPM limit: ${team.rpm_limit}` + ); + } + }, + }, + ]} + > + + + + + + + + + + + - - - -
Create Key
@@ -288,36 +342,45 @@ const CreateKey: React.FC = ({ footer={null} > - - Save your Key - -

- Please save this secret key somewhere safe and accessible. For - security reasons, you will not be able to view it again{" "} - through your LiteLLM account. If you lose this secret key, you - will need to generate a new one. -

- - - {apiKey != null ? ( -
+ Save your Key + +

+ Please save this secret key somewhere safe and accessible. For + security reasons, you will not be able to view it again{" "} + through your LiteLLM account. If you lose this secret key, you + will need to generate a new one. +

+ + + {apiKey != null ? ( +
API Key: -
-
{apiKey}
-
- - +
+
+                      {apiKey}
+                    
+
+ + - - {/* */} -
- ) : ( - Key being created, this might take 30s - )} - - +
+ ) : ( + Key being created, this might take 30s + )} +
)} diff --git a/ui/litellm-dashboard/src/components/teams.tsx b/ui/litellm-dashboard/src/components/teams.tsx index b2480179909..d22789420fd 100644 --- a/ui/litellm-dashboard/src/components/teams.tsx +++ b/ui/litellm-dashboard/src/components/teams.tsx @@ -2,7 +2,13 @@ import React, { useState, useEffect } from "react"; import Link from "next/link"; import { Typography } from "antd"; import { teamDeleteCall, teamUpdateCall, teamInfoCall } from "./networking"; -import { InformationCircleIcon, PencilAltIcon, PencilIcon, StatusOnlineIcon, TrashIcon } from "@heroicons/react/outline"; +import { + InformationCircleIcon, + PencilAltIcon, + PencilIcon, + StatusOnlineIcon, + TrashIcon, +} from "@heroicons/react/outline"; import { Button as Button2, Modal, @@ -46,8 +52,12 @@ interface EditTeamModalProps { onSubmit: (data: FormData) => void; // Assuming FormData is the type of data to be submitted } - -import { teamCreateCall, teamMemberAddCall, Member, modelAvailableCall } from "./networking"; +import { + teamCreateCall, + teamMemberAddCall, + Member, + modelAvailableCall, +} from "./networking"; const Team: React.FC = ({ teams, @@ -63,7 +73,6 @@ const Team: React.FC = ({ const [value, setValue] = useState(""); const [editModalVisible, setEditModalVisible] = useState(false); - const [selectedTeam, setSelectedTeam] = useState( teams ? teams[0] : null ); @@ -76,127 +85,125 @@ const Team: React.FC = ({ // store team info as {"team_id": team_info_object} const [perTeamInfo, setPerTeamInfo] = useState>({}); + const EditTeamModal: React.FC = ({ + visible, + onCancel, + team, + onSubmit, + }) => { + const [form] = Form.useForm(); - const EditTeamModal: React.FC = ({ visible, onCancel, team, onSubmit }) => { - const [form] = Form.useForm(); + const handleOk = () => { + form + .validateFields() + .then((values) => { + const updatedValues = { ...values, team_id: team.team_id }; + onSubmit(updatedValues); + form.resetFields(); + }) + .catch((error) => { + console.error("Validation failed:", error); + }); + }; - const handleOk = () => { - form - .validateFields() - .then((values) => { - const updatedValues = {...values, team_id: team.team_id}; - onSubmit(updatedValues); - form.resetFields(); - }) - .catch((error) => { - console.error("Validation failed:", error); - }); -}; - - return ( + return ( -
- <> - - - - - - - {"All Proxy Models"} - - {userModels && userModels.map((model) => ( - - {model} - - ))} - - - - - - - - - - - - - - -
- Edit Team -
-
-
- ); -}; - -const handleEditClick = (team: any) => { - setSelectedTeam(team); - setEditModalVisible(true); -}; - -const handleEditCancel = () => { - setEditModalVisible(false); - setSelectedTeam(null); -}; - -const handleEditSubmit = async (formValues: Record) => { - // Call API to update team with teamId and values - const teamId = formValues.team_id; // get team_id - - console.log("handleEditSubmit:", formValues); - if (accessToken == null) { - return; - } - - let newTeamValues = await teamUpdateCall(accessToken, formValues); - - // Update the teams state with the updated team data - if (teams) { - const updatedTeams = teams.map((team) => - team.team_id === teamId ? newTeamValues.data : team +
+ <> + + + + + + + {"All Proxy Models"} + + {userModels && + userModels.map((model) => ( + + {model} + + ))} + + + + + + + + + + + + + +
+ Edit Team +
+
+ ); - setTeams(updatedTeams); - } - message.success("Team updated successfully"); + }; - setEditModalVisible(false); - setSelectedTeam(null); -}; + const handleEditClick = (team: any) => { + setSelectedTeam(team); + setEditModalVisible(true); + }; + + const handleEditCancel = () => { + setEditModalVisible(false); + setSelectedTeam(null); + }; + + const handleEditSubmit = async (formValues: Record) => { + // Call API to update team with teamId and values + const teamId = formValues.team_id; // get team_id + + console.log("handleEditSubmit:", formValues); + if (accessToken == null) { + return; + } + + let newTeamValues = await teamUpdateCall(accessToken, formValues); + + // Update the teams state with the updated team data + if (teams) { + const updatedTeams = teams.map((team) => + team.team_id === teamId ? newTeamValues.data : team + ); + setTeams(updatedTeams); + } + message.success("Team updated successfully"); + + setEditModalVisible(false); + setSelectedTeam(null); + }; const handleOk = () => { setIsTeamModalVisible(false); @@ -224,9 +231,6 @@ const handleEditSubmit = async (formValues: Record) => { setIsDeleteModalOpen(true); }; - - - const confirmDelete = async () => { if (teamToDelete == null || teams == null || accessToken == null) { return; @@ -235,7 +239,9 @@ const handleEditSubmit = async (formValues: Record) => { try { await teamDeleteCall(accessToken, teamToDelete); // Successfully completed the deletion. Update the state to trigger a rerender. - const filteredData = teams.filter((item) => item.team_id !== teamToDelete); + const filteredData = teams.filter( + (item) => item.team_id !== teamToDelete + ); setTeams(filteredData); } catch (error) { console.error("Error deleting the team:", error); @@ -253,8 +259,6 @@ const handleEditSubmit = async (formValues: Record) => { setTeamToDelete(null); }; - - useEffect(() => { const fetchUserModels = async () => { try { @@ -263,7 +267,11 @@ const handleEditSubmit = async (formValues: Record) => { } if (accessToken !== null) { - const model_available = await modelAvailableCall(accessToken, userID, userRole); + const model_available = await modelAvailableCall( + accessToken, + userID, + userRole + ); let available_model_names = model_available["data"].map( (element: { id: string }) => element.id ); @@ -275,7 +283,6 @@ const handleEditSubmit = async (formValues: Record) => { } }; - const fetchTeamInfo = async () => { try { if (userID === null || userRole === null || accessToken === null) { @@ -288,22 +295,21 @@ const handleEditSubmit = async (formValues: Record) => { console.log("fetching team info:"); - let _team_id_to_info: Record = {}; for (let i = 0; i < teams?.length; i++) { let _team_id = teams[i].team_id; const teamInfo = await teamInfoCall(accessToken, _team_id); console.log("teamInfo response:", teamInfo); if (teamInfo !== null) { - _team_id_to_info = {..._team_id_to_info, [_team_id]: teamInfo}; + _team_id_to_info = { ..._team_id_to_info, [_team_id]: teamInfo }; } } setPerTeamInfo(_team_id_to_info); - } catch (error) { - console.error("Error fetching team info:", error); - } - }; - + } catch (error) { + console.error("Error fetching team info:", error); + } + }; + fetchUserModels(); fetchTeamInfo(); }, [accessToken, userID, userRole, teams]); @@ -311,6 +317,15 @@ const handleEditSubmit = async (formValues: Record) => { const handleCreate = async (formValues: Record) => { try { if (accessToken != null) { + const newTeamAlias = formValues?.team_alias; + const existingTeamAliases = teams?.map((t) => t.team_alias) ?? []; + + if (existingTeamAliases.includes(newTeamAlias)) { + throw new Error( + `Team alias ${newTeamAlias} already exists, please pick another alias` + ); + } + message.info("Creating Team"); const response: any = await teamCreateCall(accessToken, formValues); if (teams !== null) { @@ -364,7 +379,7 @@ const handleEditSubmit = async (formValues: Record) => { console.error("Error creating the team:", error); } }; - console.log(`received teams ${teams}`); + console.log(`received teams ${JSON.stringify(teams)}`); return (
@@ -387,55 +402,124 @@ const handleEditSubmit = async (formValues: Record) => { {teams && teams.length > 0 ? teams.map((team: any) => ( - {team["team_alias"]} - {team["spend"]} - + + {team["team_alias"]} + + + {team["spend"]} + + {team["max_budget"] ? team["max_budget"] : "No limit"} - + {Array.isArray(team.models) ? ( -
+
{team.models.length === 0 ? ( All Proxy Models ) : ( - team.models.map((model: string, index: number) => ( - model === "all-proxy-models" ? ( - - All Proxy Models - - ) : ( - - {model.length > 30 ? `${model.slice(0, 30)}...` : model} - - ) - )) + team.models.map( + (model: string, index: number) => + model === "all-proxy-models" ? ( + + All Proxy Models + + ) : ( + + + {model.length > 30 + ? `${model.slice(0, 30)}...` + : model} + + + ) + ) )}
) : null} - - + - TPM:{" "} - {team.tpm_limit ? team.tpm_limit : "Unlimited"}{" "} + TPM: {team.tpm_limit ? team.tpm_limit : "Unlimited"}{" "}

RPM:{" "} {team.rpm_limit ? team.rpm_limit : "Unlimited"}
- {perTeamInfo && team.team_id && perTeamInfo[team.team_id] && perTeamInfo[team.team_id].keys && perTeamInfo[team.team_id].keys.length} Keys - {perTeamInfo && team.team_id && perTeamInfo[team.team_id] && perTeamInfo[team.team_id].team_info && perTeamInfo[team.team_id].team_info.members_with_roles && perTeamInfo[team.team_id].team_info.members_with_roles.length} Members + + {perTeamInfo && + team.team_id && + perTeamInfo[team.team_id] && + perTeamInfo[team.team_id].keys && + perTeamInfo[team.team_id].keys.length}{" "} + Keys + + + {perTeamInfo && + team.team_id && + perTeamInfo[team.team_id] && + perTeamInfo[team.team_id].team_info && + perTeamInfo[team.team_id].team_info + .members_with_roles && + perTeamInfo[team.team_id].team_info + .members_with_roles.length}{" "} + Members + - handleEditClick(team)} /> - handleDelete(team.team_id)} icon={TrashIcon} size="sm" @@ -481,7 +565,11 @@ const handleEditSubmit = async (formValues: Record) => {
- @@ -515,10 +603,12 @@ const handleEditSubmit = async (formValues: Record) => { labelAlign="left" > <> - @@ -528,7 +618,10 @@ const handleEditSubmit = async (formValues: Record) => { placeholder="Select models" style={{ width: "100%" }} > - + All Proxy Models {userModels.map((model) => ( @@ -606,8 +699,8 @@ const handleEditSubmit = async (formValues: Record) => { {member["user_email"] ? member["user_email"] : member["user_id"] - ? member["user_id"] - : null} + ? member["user_id"] + : null} {member["role"]} @@ -618,13 +711,13 @@ const handleEditSubmit = async (formValues: Record) => { {selectedTeam && ( - - )} + + )} - - Key Name: {keyName} - - Monthly Spend ${keySpend} - {predictedSpendString} - - - {data && ( - - )} - - - -
- ); -}; - -export default ViewKeySpendReport; diff --git a/ui/litellm-dashboard/src/components/view_key_table.tsx b/ui/litellm-dashboard/src/components/view_key_table.tsx index d812c19a343..bb6ffc4208c 100644 --- a/ui/litellm-dashboard/src/components/view_key_table.tsx +++ b/ui/litellm-dashboard/src/components/view_key_table.tsx @@ -17,6 +17,7 @@ import { DialogPanel, Text, Title, + Subtitle, Icon, BarChart, } from "@tremor/react"; @@ -32,8 +33,6 @@ import { Select, } from "antd"; -import ViewKeySpendReport from "./view_key_spend_report"; - const { Option } = Select; @@ -570,6 +569,7 @@ const ViewKeyTable: React.FC = ({ icon={InformationCircleIcon} size="sm" /> + = ({ setOpenDialogId(null); setSelectedItem(null); }} + static={true} > @@ -639,22 +640,14 @@ const ViewKeyTable: React.FC = ({
- - {spendData && ( - - )} - - + + Token Name + {selectedItem.key_alias ? selectedItem.key_alias : selectedItem.key_name} + Token ID + {selectedItem.token} Metadata - - {JSON.stringify(selectedItem.metadata)} +
{JSON.stringify(selectedItem.metadata)} 
+
)} - - + + Date: Sat, 11 May 2024 13:08:16 -0700 Subject: [PATCH 095/378] feat - router async batch acompletion --- litellm/router.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index f0d94908e98..7396dab2085 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -605,6 +605,33 @@ class Router: self.fail_calls[model_name] += 1 raise e + async def abatch_completion( + self, models: List[str], messages: List[Dict[str, str]], **kwargs + ): + + async def _async_completion_no_exceptions( + model: str, messages: List[Dict[str, str]], **kwargs + ): + """ + Wrapper around self.async_completion that catches exceptions and returns them as a result + """ + try: + return await self.acompletion(model=model, messages=messages, **kwargs) + except Exception as e: + return e + + _tasks = [] + for model in models: + # add each task but if the task fails + _tasks.append( + _async_completion_no_exceptions( + model=model, messages=messages, **kwargs + ) + ) + + response = await asyncio.gather(*_tasks) + return response + def image_generation(self, prompt: str, model: str, **kwargs): try: kwargs["model"] = model From 6561e0838ea36695847d38f648b81c46d225ce08 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 13:09:17 -0700 Subject: [PATCH 096/378] test - router.batch_acompletion --- litellm/tests/test_router_batch_completion.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 litellm/tests/test_router_batch_completion.py diff --git a/litellm/tests/test_router_batch_completion.py b/litellm/tests/test_router_batch_completion.py new file mode 100644 index 00000000000..f2873b18d55 --- /dev/null +++ b/litellm/tests/test_router_batch_completion.py @@ -0,0 +1,60 @@ +#### What this tests #### +# This tests litellm router with batch completion + +import sys, os, time, openai +import traceback, asyncio +import pytest + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm +from litellm import Router +from litellm.router import Deployment, LiteLLM_Params, ModelInfo +from concurrent.futures import ThreadPoolExecutor +from collections import defaultdict +from dotenv import load_dotenv +import os, httpx + +load_dotenv() + + +@pytest.mark.asyncio +async def test_batch_completion_multiple_models(): + litellm.set_verbose = True + + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + }, + }, + { + "model_name": "groq-llama", + "litellm_params": { + "model": "groq/llama3-8b-8192", + }, + }, + ] + ) + + response = await router.abatch_completion( + models=["gpt-3.5-turbo", "groq-llama"], + messages=[ + {"role": "user", "content": "is litellm becoming a better product ?"} + ], + max_tokens=15, + ) + + print(response) + assert len(response) == 2 + + models_in_responses = [] + for individual_response in response: + _model = individual_response["model"] + models_in_responses.append(_model) + + # assert both models are different + assert models_in_responses[0] != models_in_responses[1] From b8c7bbcb9f8d10103ebed09f9c73d6d49ca48024 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 13:24:25 -0700 Subject: [PATCH 097/378] support batch /chat/completions on proxy --- litellm/proxy/proxy_server.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 46c13277328..0ae498baa9f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -3639,7 +3639,7 @@ async def chat_completion( ### MODEL ALIAS MAPPING ### # check if model name in model alias map # get the actual model name - if data["model"] in litellm.model_alias_map: + if isinstance(data["model"], str) and data["model"] in litellm.model_alias_map: data["model"] = litellm.model_alias_map[data["model"]] ## LOGGING OBJECT ## - initialize logging object for logging success/failure events for call @@ -3673,6 +3673,9 @@ async def chat_completion( # skip router if user passed their key if "api_key" in data: tasks.append(litellm.acompletion(**data)) + elif isinstance(data["model"], list) and llm_router is not None: + _models = data.pop("model") + tasks.append(llm_router.abatch_completion(models=_models, **data)) elif "user_config" in data: # initialize a new router instance. make request using this Router router_config = data.pop("user_config") From 31cb1be27929eec766447616942b5e7b70f2b61d Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 13:24:59 -0700 Subject: [PATCH 098/378] edit dev config.yaml --- litellm/proxy/proxy_config.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/litellm/proxy/proxy_config.yaml b/litellm/proxy/proxy_config.yaml index b1cbf2e8186..85634c5b867 100644 --- a/litellm/proxy/proxy_config.yaml +++ b/litellm/proxy/proxy_config.yaml @@ -4,6 +4,12 @@ model_list: model: openai/fake api_key: fake-key api_base: https://exampleopenaiendpoint-production.up.railway.app/ + - model_name: llama3 + litellm_params: + model: groq/llama3-8b-8192 + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo - model_name: "*" litellm_params: model: openai/* From e1f94fcbbb3a51107fa14ef09d69132eff92e124 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 13:32:30 -0700 Subject: [PATCH 099/378] test batch completions on litellm proxy --- tests/test_openai_endpoints.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/test_openai_endpoints.py b/tests/test_openai_endpoints.py index 38e87c25409..7bc97ca5930 100644 --- a/tests/test_openai_endpoints.py +++ b/tests/test_openai_endpoints.py @@ -4,6 +4,7 @@ import pytest import asyncio import aiohttp, openai from openai import OpenAI, AsyncOpenAI +from typing import Optional, List, Union def response_header_check(response): @@ -71,7 +72,7 @@ async def new_user(session): return await response.json() -async def chat_completion(session, key, model="gpt-4"): +async def chat_completion(session, key, model: Union[str, List] = "gpt-4"): url = "http://0.0.0.0:4000/chat/completions" headers = { "Authorization": f"Bearer {key}", @@ -409,3 +410,27 @@ async def test_openai_wildcard_chat_completion(): # call chat/completions with a model that the key was not created for + the model is not on the config.yaml await chat_completion(session=session, key=key, model="gpt-3.5-turbo-0125") + + +@pytest.mark.asyncio +async def test_batch_chat_completions(): + """ + - Make chat completion call using + + """ + async with aiohttp.ClientSession() as session: + + # call chat/completions with a model that the key was not created for + the model is not on the config.yaml + response = await chat_completion( + session=session, + key="sk-1234", + model=[ + "gpt-3.5-turbo", + "fake-openai-endpoint", + ], + ) + + print(f"response: {response}") + + assert len(response) == 2 + assert isinstance(response, list) From 5918ee543bd9d3523bfc4fdb6c6ceff4384f8a3e Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 13:42:41 -0700 Subject: [PATCH 100/378] docs - batch completion litellm proxy --- docs/my-website/docs/proxy/user_keys.md | 84 +++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/docs/my-website/docs/proxy/user_keys.md b/docs/my-website/docs/proxy/user_keys.md index fa78b37c11f..7aba832eb8a 100644 --- a/docs/my-website/docs/proxy/user_keys.md +++ b/docs/my-website/docs/proxy/user_keys.md @@ -365,6 +365,90 @@ curl --location 'http://0.0.0.0:4000/moderations' \ ## Advanced +### (BETA) Batch Completions - pass `model` as List + +Use this when you want to send 1 request to N Models + +#### Expected Request Format + +This same request will be sent to the following model groups on the [litellm proxy config.yaml](https://docs.litellm.ai/docs/proxy/configs) +- `model_name="llama3"` +- `model_name="gpt-3.5-turbo"` + +```shell +curl --location 'http://localhost:4000/chat/completions' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{ + "model": ["llama3", "gpt-3.5-turbo"], + "max_tokens": 10, + "user": "litellm2", + "messages": [ + { + "role": "user", + "content": "is litellm getting better" + } + ] +}' +``` + + +#### Expected Response Format + +Get a list of responses when `model` is passed as a list + +```json +[ + { + "id": "chatcmpl-3dbd5dd8-7c82-4ca3-bf1f-7c26f497cf2b", + "choices": [ + { + "finish_reason": "length", + "index": 0, + "message": { + "content": "The Elder Scrolls IV: Oblivion!\n\nReleased", + "role": "assistant" + } + } + ], + "created": 1715459876, + "model": "groq/llama3-8b-8192", + "object": "chat.completion", + "system_fingerprint": "fp_179b0f92c9", + "usage": { + "completion_tokens": 10, + "prompt_tokens": 12, + "total_tokens": 22 + } + }, + { + "id": "chatcmpl-9NnldUfFLmVquFHSX4yAtjCw8PGei", + "choices": [ + { + "finish_reason": "length", + "index": 0, + "message": { + "content": "TES4 could refer to The Elder Scrolls IV:", + "role": "assistant" + } + } + ], + "created": 1715459877, + "model": "gpt-3.5-turbo-0125", + "object": "chat.completion", + "system_fingerprint": null, + "usage": { + "completion_tokens": 10, + "prompt_tokens": 9, + "total_tokens": 19 + } + } +] +``` + + + + ### Pass User LLM API Keys, Fallbacks Allow your end-users to pass their model list, api base, OpenAI API key (any LiteLLM supported provider) to make requests From 4a3b08496129841597b1188820a3c45a01ee9abf Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 11 May 2024 13:43:08 -0700 Subject: [PATCH 101/378] feat(bedrock_httpx.py): moves to using httpx client for bedrock cohere calls --- .../generic_api_callback.py | 3 - litellm/integrations/aispend.py | 2 - litellm/integrations/berrispend.py | 1 - litellm/integrations/clickhouse.py | 4 - litellm/integrations/custom_logger.py | 2 - litellm/integrations/datadog.py | 2 - litellm/integrations/dynamodb.py | 2 - litellm/integrations/helicone.py | 2 - litellm/integrations/langfuse.py | 4 +- litellm/integrations/langsmith.py | 2 - litellm/integrations/lunary.py | 9 +- litellm/integrations/openmeter.py | 2 - litellm/integrations/prometheus.py | 2 - litellm/integrations/prometheus_services.py | 2 - litellm/integrations/prompt_layer.py | 2 - litellm/integrations/s3.py | 4 +- litellm/integrations/slack_alerting.py | 2 - litellm/integrations/supabase.py | 2 - litellm/integrations/weights_biases.py | 11 +- litellm/llms/bedrock_httpx.py | 124 ++++++++++++++++++ litellm/main.py | 3 +- .../proxy/example_config_yaml/custom_auth.py | 3 - litellm/router_strategy/least_busy.py | 2 - litellm/router_strategy/lowest_cost.py | 3 +- litellm/router_strategy/lowest_latency.py | 2 - litellm/router_strategy/lowest_tpm_rpm.py | 2 - litellm/router_strategy/lowest_tpm_rpm_v2.py | 2 - litellm/tests/test_completion.py | 9 ++ litellm/utils.py | 1 - 29 files changed, 147 insertions(+), 64 deletions(-) create mode 100644 litellm/llms/bedrock_httpx.py diff --git a/enterprise/enterprise_callbacks/generic_api_callback.py b/enterprise/enterprise_callbacks/generic_api_callback.py index 076c13d5eef..cf1d22e8f8d 100644 --- a/enterprise/enterprise_callbacks/generic_api_callback.py +++ b/enterprise/enterprise_callbacks/generic_api_callback.py @@ -10,7 +10,6 @@ from litellm.caching import DualCache from typing import Literal, Union -dotenv.load_dotenv() # Loading env variables using dotenv import traceback @@ -19,8 +18,6 @@ import traceback import dotenv, os import requests - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/aispend.py b/litellm/integrations/aispend.py index a893f8923bb..2fe8ea0dfa7 100644 --- a/litellm/integrations/aispend.py +++ b/litellm/integrations/aispend.py @@ -1,8 +1,6 @@ #### What this does #### # On success + failure, log events to aispend.io import dotenv, os - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime diff --git a/litellm/integrations/berrispend.py b/litellm/integrations/berrispend.py index 1f0ae4581fb..7d30b706c8f 100644 --- a/litellm/integrations/berrispend.py +++ b/litellm/integrations/berrispend.py @@ -3,7 +3,6 @@ import dotenv, os import requests # type: ignore -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime diff --git a/litellm/integrations/clickhouse.py b/litellm/integrations/clickhouse.py index 7d1fb37d945..0c38b862679 100644 --- a/litellm/integrations/clickhouse.py +++ b/litellm/integrations/clickhouse.py @@ -8,8 +8,6 @@ from litellm.proxy._types import UserAPIKeyAuth from litellm.caching import DualCache from typing import Literal, Union - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback @@ -18,8 +16,6 @@ import traceback import dotenv, os import requests - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/custom_logger.py b/litellm/integrations/custom_logger.py index 8a3e0f4673c..d508825922e 100644 --- a/litellm/integrations/custom_logger.py +++ b/litellm/integrations/custom_logger.py @@ -6,8 +6,6 @@ from litellm.proxy._types import UserAPIKeyAuth from litellm.caching import DualCache from typing import Literal, Union, Optional - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback diff --git a/litellm/integrations/datadog.py b/litellm/integrations/datadog.py index d969341fc45..6d5e08faffc 100644 --- a/litellm/integrations/datadog.py +++ b/litellm/integrations/datadog.py @@ -3,8 +3,6 @@ import dotenv, os import requests # type: ignore - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/dynamodb.py b/litellm/integrations/dynamodb.py index b5462ee7fa2..21ccabe4b77 100644 --- a/litellm/integrations/dynamodb.py +++ b/litellm/integrations/dynamodb.py @@ -3,8 +3,6 @@ import dotenv, os import requests # type: ignore - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/helicone.py b/litellm/integrations/helicone.py index c8c1075419b..85e73258ea8 100644 --- a/litellm/integrations/helicone.py +++ b/litellm/integrations/helicone.py @@ -3,8 +3,6 @@ import dotenv, os import requests # type: ignore import litellm - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index 1e957dfcf88..f27d1996800 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -1,8 +1,6 @@ #### What this does #### # On success, logs events to Langfuse -import dotenv, os - -dotenv.load_dotenv() # Loading env variables using dotenv +import os import copy import traceback from packaging.version import Version diff --git a/litellm/integrations/langsmith.py b/litellm/integrations/langsmith.py index 8a0fb385227..92e4402155d 100644 --- a/litellm/integrations/langsmith.py +++ b/litellm/integrations/langsmith.py @@ -3,8 +3,6 @@ import dotenv, os # type: ignore import requests # type: ignore from datetime import datetime - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import asyncio import types diff --git a/litellm/integrations/lunary.py b/litellm/integrations/lunary.py index 6ddf2ca5992..52316f31549 100644 --- a/litellm/integrations/lunary.py +++ b/litellm/integrations/lunary.py @@ -2,14 +2,11 @@ # On success + failure, log events to lunary.ai from datetime import datetime, timezone import traceback -import dotenv import importlib import sys import packaging -dotenv.load_dotenv() - # convert to {completion: xx, tokens: xx} def parse_usage(usage): @@ -62,14 +59,16 @@ class LunaryLogger: version = importlib.metadata.version("lunary") # if version < 0.1.43 then raise ImportError if packaging.version.Version(version) < packaging.version.Version("0.1.43"): - print( + print( # noqa "Lunary version outdated. Required: >= 0.1.43. Upgrade via 'pip install lunary --upgrade'" ) raise ImportError self.lunary_client = lunary except ImportError: - print("Lunary not installed. Please install it using 'pip install lunary'") + print( # noqa + "Lunary not installed. Please install it using 'pip install lunary'" + ) # noqa raise ImportError def log_event( diff --git a/litellm/integrations/openmeter.py b/litellm/integrations/openmeter.py index a454739d546..2c470d6f49a 100644 --- a/litellm/integrations/openmeter.py +++ b/litellm/integrations/openmeter.py @@ -3,8 +3,6 @@ import dotenv, os, json import litellm - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback from litellm.integrations.custom_logger import CustomLogger from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler diff --git a/litellm/integrations/prometheus.py b/litellm/integrations/prometheus.py index 577946ce18e..6fbc6ca4cee 100644 --- a/litellm/integrations/prometheus.py +++ b/litellm/integrations/prometheus.py @@ -4,8 +4,6 @@ import dotenv, os import requests # type: ignore - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/prometheus_services.py b/litellm/integrations/prometheus_services.py index d276bb85bab..8fce8930de6 100644 --- a/litellm/integrations/prometheus_services.py +++ b/litellm/integrations/prometheus_services.py @@ -5,8 +5,6 @@ import dotenv, os import requests # type: ignore - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/prompt_layer.py b/litellm/integrations/prompt_layer.py index ce610e1ef11..531ed75fe03 100644 --- a/litellm/integrations/prompt_layer.py +++ b/litellm/integrations/prompt_layer.py @@ -3,8 +3,6 @@ import dotenv, os import requests # type: ignore from pydantic import BaseModel - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback diff --git a/litellm/integrations/s3.py b/litellm/integrations/s3.py index d31b1584027..d131e44f0e0 100644 --- a/litellm/integrations/s3.py +++ b/litellm/integrations/s3.py @@ -1,9 +1,7 @@ #### What this does #### # On success + failure, log events to Supabase -import dotenv, os - -dotenv.load_dotenv() # Loading env variables using dotenv +import os import traceback import datetime, subprocess, sys import litellm, uuid diff --git a/litellm/integrations/slack_alerting.py b/litellm/integrations/slack_alerting.py index 07c3585f088..d03922bc1f5 100644 --- a/litellm/integrations/slack_alerting.py +++ b/litellm/integrations/slack_alerting.py @@ -2,8 +2,6 @@ # Class for sending Slack Alerts # import dotenv, os from litellm.proxy._types import UserAPIKeyAuth - -dotenv.load_dotenv() # Loading env variables using dotenv from litellm._logging import verbose_logger, verbose_proxy_logger import litellm, threading from typing import List, Literal, Any, Union, Optional, Dict diff --git a/litellm/integrations/supabase.py b/litellm/integrations/supabase.py index 58beba8a3db..4e6bf517f3d 100644 --- a/litellm/integrations/supabase.py +++ b/litellm/integrations/supabase.py @@ -3,8 +3,6 @@ import dotenv, os import requests # type: ignore - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm diff --git a/litellm/integrations/weights_biases.py b/litellm/integrations/weights_biases.py index 53e6070a5bf..a56233b22f7 100644 --- a/litellm/integrations/weights_biases.py +++ b/litellm/integrations/weights_biases.py @@ -21,11 +21,11 @@ try: # contains a (known) object attribute object: Literal["chat.completion", "edit", "text_completion"] - def __getitem__(self, key: K) -> V: - ... # pragma: no cover + def __getitem__(self, key: K) -> V: ... # noqa - def get(self, key: K, default: Optional[V] = None) -> Optional[V]: - ... # pragma: no cover + def get( # noqa + self, key: K, default: Optional[V] = None + ) -> Optional[V]: ... # pragma: no cover class OpenAIRequestResponseResolver: def __call__( @@ -173,12 +173,11 @@ except: #### What this does #### # On success, logs events to Langfuse -import dotenv, os +import os import requests import requests from datetime import datetime -dotenv.load_dotenv() # Loading env variables using dotenv import traceback diff --git a/litellm/llms/bedrock_httpx.py b/litellm/llms/bedrock_httpx.py new file mode 100644 index 00000000000..c6b0327e6bf --- /dev/null +++ b/litellm/llms/bedrock_httpx.py @@ -0,0 +1,124 @@ +# What is this? +## Initial implementation of calling bedrock via httpx client (allows for async calls). +## V0 - just covers cohere command-r support + +import os, types +import json +from enum import Enum +import requests, copy # type: ignore +import time +from typing import Callable, Optional, List, Literal, Union +from litellm.utils import ( + ModelResponse, + Usage, + map_finish_reason, + CustomStreamWrapper, + Message, + Choices, + get_secret, +) +import litellm +from .prompt_templates.factory import prompt_factory, custom_prompt +from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler +from .base import BaseLLM +import httpx # type: ignore +from .bedrock import BedrockError + + +class BedrockLLM(BaseLLM): + """ + Example call + + ``` + curl --location --request POST 'https://bedrock-runtime.{aws_region_name}.amazonaws.com/model/{bedrock_model_name}/invoke' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY" \ + --aws-sigv4 "aws:amz:us-east-1:bedrock" \ + --data-raw '{ + "prompt": "Hi", + "temperature": 0, + "p": 0.9, + "max_tokens": 4096 + }' + ``` + """ + + def __init__(self) -> None: + super().__init__() + + def get_credentials( + self, + aws_access_key_id: Optional[str] = None, + aws_secret_access_key: Optional[str] = None, + aws_region_name: Optional[str] = None, + aws_session_name: Optional[str] = None, + aws_profile_name: Optional[str] = None, + aws_role_name: Optional[str] = None, + ): + """ + Return a boto3.Credentials object + """ + import boto3 + + ## CHECK IS 'os.environ/' passed in + params_to_check: List[Optional[str]] = [ + aws_access_key_id, + aws_secret_access_key, + aws_region_name, + aws_session_name, + aws_profile_name, + aws_role_name, + ] + + # Iterate over parameters and update if needed + for i, param in enumerate(params_to_check): + if param and param.startswith("os.environ/"): + _v = get_secret(param) + if _v is not None and isinstance(_v, str): + params_to_check[i] = _v + # Assign updated values back to parameters + ( + aws_access_key_id, + aws_secret_access_key, + aws_region_name, + aws_session_name, + aws_profile_name, + aws_role_name, + ) = params_to_check + + ### CHECK STS ### + if aws_role_name is not None and aws_session_name is not None: + sts_client = boto3.client( + "sts", + aws_access_key_id=aws_access_key_id, # [OPTIONAL] + aws_secret_access_key=aws_secret_access_key, # [OPTIONAL] + ) + + sts_response = sts_client.assume_role( + RoleArn=aws_role_name, RoleSessionName=aws_session_name + ) + + return sts_response["Credentials"] + elif aws_profile_name is not None: ### CHECK SESSION ### + # uses auth values from AWS profile usually stored in ~/.aws/credentials + client = boto3.Session(profile_name=aws_profile_name) + + return client.get_credentials() + else: + session = boto3.Session( + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + region_name=aws_region_name, + ) + + return session.get_credentials() + + def completion(self, *args, **kwargs) -> Union[ModelResponse, CustomStreamWrapper]: + ## get credentials + ## generate signature + ## make request + return super().completion(*args, **kwargs) + + def embedding(self, *args, **kwargs): + return super().embedding(*args, **kwargs) diff --git a/litellm/main.py b/litellm/main.py index 9afdc7da200..8be71de0b7e 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -75,6 +75,7 @@ from .llms.anthropic import AnthropicChatCompletion from .llms.anthropic_text import AnthropicTextCompletion from .llms.huggingface_restapi import Huggingface from .llms.predibase import PredibaseChatCompletion +from .llms.bedrock_httpx import BedrockLLM from .llms.triton import TritonChatCompletion from .llms.prompt_templates.factory import ( prompt_factory, @@ -104,7 +105,6 @@ from litellm.utils import ( ) ####### ENVIRONMENT VARIABLES ################### -dotenv.load_dotenv() # Loading env variables using dotenv openai_chat_completions = OpenAIChatCompletion() openai_text_completions = OpenAITextCompletion() anthropic_chat_completions = AnthropicChatCompletion() @@ -114,6 +114,7 @@ azure_text_completions = AzureTextCompletion() huggingface = Huggingface() predibase_chat_completions = PredibaseChatCompletion() triton_chat_completions = TritonChatCompletion() +bedrock_chat_completion = BedrockLLM() ####### COMPLETION ENDPOINTS ################ diff --git a/litellm/proxy/example_config_yaml/custom_auth.py b/litellm/proxy/example_config_yaml/custom_auth.py index a764a647a96..6cecf466c10 100644 --- a/litellm/proxy/example_config_yaml/custom_auth.py +++ b/litellm/proxy/example_config_yaml/custom_auth.py @@ -1,10 +1,7 @@ from litellm.proxy._types import UserAPIKeyAuth, GenerateKeyRequest from fastapi import Request -from dotenv import load_dotenv import os -load_dotenv() - async def user_api_key_auth(request: Request, api_key: str) -> UserAPIKeyAuth: try: diff --git a/litellm/router_strategy/least_busy.py b/litellm/router_strategy/least_busy.py index 54d44b41d54..417651fb3e7 100644 --- a/litellm/router_strategy/least_busy.py +++ b/litellm/router_strategy/least_busy.py @@ -8,8 +8,6 @@ import dotenv, os, requests, random # type: ignore from typing import Optional - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback from litellm.caching import DualCache from litellm.integrations.custom_logger import CustomLogger diff --git a/litellm/router_strategy/lowest_cost.py b/litellm/router_strategy/lowest_cost.py index 279af2ae9c9..fde7781b9b0 100644 --- a/litellm/router_strategy/lowest_cost.py +++ b/litellm/router_strategy/lowest_cost.py @@ -1,12 +1,11 @@ #### What this does #### # picks based on response time (for streaming, this is time to first token) from pydantic import BaseModel, Extra, Field, root_validator -import dotenv, os, requests, random # type: ignore +import os, requests, random # type: ignore from typing import Optional, Union, List, Dict from datetime import datetime, timedelta import random -dotenv.load_dotenv() # Loading env variables using dotenv import traceback from litellm.caching import DualCache from litellm.integrations.custom_logger import CustomLogger diff --git a/litellm/router_strategy/lowest_latency.py b/litellm/router_strategy/lowest_latency.py index afdfc177934..a7b93d344db 100644 --- a/litellm/router_strategy/lowest_latency.py +++ b/litellm/router_strategy/lowest_latency.py @@ -5,8 +5,6 @@ import dotenv, os, requests, random # type: ignore from typing import Optional, Union, List, Dict from datetime import datetime, timedelta import random - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback from litellm.caching import DualCache from litellm.integrations.custom_logger import CustomLogger diff --git a/litellm/router_strategy/lowest_tpm_rpm.py b/litellm/router_strategy/lowest_tpm_rpm.py index 0a7773a84b8..625db70482d 100644 --- a/litellm/router_strategy/lowest_tpm_rpm.py +++ b/litellm/router_strategy/lowest_tpm_rpm.py @@ -4,8 +4,6 @@ import dotenv, os, requests, random from typing import Optional, Union, List, Dict from datetime import datetime - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback from litellm import token_counter from litellm.caching import DualCache diff --git a/litellm/router_strategy/lowest_tpm_rpm_v2.py b/litellm/router_strategy/lowest_tpm_rpm_v2.py index f7a55d97091..23e55f4a3c4 100644 --- a/litellm/router_strategy/lowest_tpm_rpm_v2.py +++ b/litellm/router_strategy/lowest_tpm_rpm_v2.py @@ -5,8 +5,6 @@ import dotenv, os, requests, random from typing import Optional, Union, List, Dict import datetime as datetime_og from datetime import datetime - -dotenv.load_dotenv() # Loading env variables using dotenv import traceback, asyncio, httpx import litellm from litellm import token_counter diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 04f4cc5115c..214dc105b11 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -2584,6 +2584,15 @@ def test_completion_chat_sagemaker_mistral(): # test_completion_chat_sagemaker_mistral() +def test_completion_bedrock_command_r(): + response = completion( + model="bedrock/cohere.command-r-plus-v1:0", + messages=[{"role": "user", "content": "Hey! how's it going?"}], + ) + + print(f"response: {response}") + + def test_completion_bedrock_titan_null_response(): try: response = completion( diff --git a/litellm/utils.py b/litellm/utils.py index 9218f92a3e7..0fd7963ae32 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -117,7 +117,6 @@ MAX_THREADS = 100 # Create a ThreadPoolExecutor executor = ThreadPoolExecutor(max_workers=MAX_THREADS) -dotenv.load_dotenv() # Loading env variables using dotenv sentry_sdk_instance = None capture_exception = None add_breadcrumb = None From 62276fc22102aafbc9ea91d0f978a39b252ce75a Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 13:45:32 -0700 Subject: [PATCH 102/378] docs link to litellm batch completions --- docs/my-website/docs/completion/batching.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/my-website/docs/completion/batching.md b/docs/my-website/docs/completion/batching.md index 05683b3ddbf..09f59f743d0 100644 --- a/docs/my-website/docs/completion/batching.md +++ b/docs/my-website/docs/completion/batching.md @@ -4,6 +4,12 @@ LiteLLM allows you to: * Send 1 completion call to many models: Return Fastest Response * Send 1 completion call to many models: Return All Responses +:::info + +Trying to do batch completion on LiteLLM Proxy ? Go here: https://docs.litellm.ai/docs/proxy/user_keys#beta-batch-completions---pass-model-as-list + +::: + ## Send multiple completion calls to 1 model In the batch_completion method, you provide a list of `messages` where each sub-list of messages is passed to `litellm.completion()`, allowing you to process multiple prompts efficiently in a single API call. From 038522ab24d92e0644834dcc2ee0b9d7d5899417 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:02:16 -0700 Subject: [PATCH 103/378] fix - support debugging litellm params --- litellm/integrations/langfuse.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index bc1d501906c..b9c8fafc9a8 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -318,11 +318,12 @@ class LangFuseLogger: else: clean_metadata[key] = value - session_id = clean_metadata.get("session_id", None) - trace_name = clean_metadata.get("trace_name", None) - trace_id = clean_metadata.get("trace_id", None) - existing_trace_id = clean_metadata.get("existing_trace_id", None) - update_trace_keys = clean_metadata.get("update_trace_keys", []) + session_id = clean_metadata.pop("session_id", None) + trace_name = clean_metadata.pop("trace_name", None) + trace_id = clean_metadata.pop("trace_id", None) + existing_trace_id = clean_metadata.pop("existing_trace_id", None) + update_trace_keys = clean_metadata.pop("update_trace_keys", []) + debug = clean_metadata.pop("debug", None) if trace_name is None and existing_trace_id is None: # just log `litellm-{call_type}` as the trace name @@ -342,10 +343,6 @@ class LangFuseLogger: if updated_trace_value is not None: trace_params[trace_param_key] = updated_trace_value - if "metadata" in update_trace_keys: - # log metadata in the trace - trace_params["metadata"] = clean_metadata - # Pop the trace specific keys that would have been popped if there were a new trace for key in list( filter(lambda key: key.startswith("trace_"), clean_metadata.keys()) @@ -367,7 +364,6 @@ class LangFuseLogger: "trace_version", clean_metadata.get("version", None) ), # If provided just version, it will applied to the trace as well, if applied a trace version it will take precedence "user_id": user_id, - "metadata": clean_metadata, } for key in list( filter(lambda key: key.startswith("trace_"), clean_metadata.keys()) @@ -381,6 +377,13 @@ class LangFuseLogger: else: trace_params["output"] = output + if debug == True: + if "metadata" in trace_params: + # log the raw_metadata in the trace + trace_params["metadata"]["metadata_passed_to_litellm"] = metadata + else: + trace_params["metadata"] = {"metadata_passed_to_litellm": metadata} + cost = kwargs.get("response_cost", None) print_verbose(f"trace: {cost}") From 97c81a5c7ed8b25a22c09d1f87177cf40394ae27 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:03:40 -0700 Subject: [PATCH 104/378] fix langfuse test --- litellm/tests/test_alangfuse.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/tests/test_alangfuse.py b/litellm/tests/test_alangfuse.py index 6f9b8d6265d..4eeba072148 100644 --- a/litellm/tests/test_alangfuse.py +++ b/litellm/tests/test_alangfuse.py @@ -247,7 +247,9 @@ async def test_langfuse_logging_metadata(langfuse_client): expected_filtered_metadata_keys = { "trace_name", "trace_id", + "existing_trace_id", "trace_user_id", + "session_id", "tags", "generation_name", "generation_id", From 1bf8e7ac75f0d44e911801f7ce23c9944f1d2f79 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:08:39 -0700 Subject: [PATCH 105/378] fix langfuse debug mode --- litellm/integrations/langfuse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index b9c8fafc9a8..90c274a90e9 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -377,7 +377,7 @@ class LangFuseLogger: else: trace_params["output"] = output - if debug == True: + if debug == True or (isinstance(debug, str) and debug.lower() == "true"): if "metadata" in trace_params: # log the raw_metadata in the trace trace_params["metadata"]["metadata_passed_to_litellm"] = metadata From 360d2840583371b27b03f038d401a2d86db8276f Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:12:17 -0700 Subject: [PATCH 106/378] docs - debug langfuse --- docs/my-website/docs/observability/langfuse_integration.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/my-website/docs/observability/langfuse_integration.md b/docs/my-website/docs/observability/langfuse_integration.md index ebf20b63359..7ba204497a9 100644 --- a/docs/my-website/docs/observability/langfuse_integration.md +++ b/docs/my-website/docs/observability/langfuse_integration.md @@ -136,6 +136,7 @@ response = completion( "existing_trace_id": "trace-id22", "trace_metadata": {"key": "updated_trace_value"}, # The new value to use for the langfuse Trace Metadata "update_trace_keys": ["input", "output", "trace_metadata"], # Updates the trace input & output to be this generations input & output also updates the Trace Metadata to match the passed in value + "debug_langfuse": True, # Will log the exact metadata sent to litellm for the trace/generation as `metadata_passed_to_litellm` }, ) From a41bef52971528b1b740f9ccd5e7c3dacb132ea2 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:12:26 -0700 Subject: [PATCH 107/378] debug langfuse --- litellm/integrations/langfuse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index 90c274a90e9..5cdf83a7c2f 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -323,7 +323,7 @@ class LangFuseLogger: trace_id = clean_metadata.pop("trace_id", None) existing_trace_id = clean_metadata.pop("existing_trace_id", None) update_trace_keys = clean_metadata.pop("update_trace_keys", []) - debug = clean_metadata.pop("debug", None) + debug = clean_metadata.pop("debug_langfuse", None) if trace_name is None and existing_trace_id is None: # just log `litellm-{call_type}` as the trace name From d4288b134ba32c2bc8a1085bdfa5f55b6825797b Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:24:48 -0700 Subject: [PATCH 108/378] fix - use csv list for batch completions --- litellm/proxy/proxy_server.py | 5 +++-- tests/test_openai_endpoints.py | 5 +---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 0ae498baa9f..210912fcfc7 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -3673,8 +3673,9 @@ async def chat_completion( # skip router if user passed their key if "api_key" in data: tasks.append(litellm.acompletion(**data)) - elif isinstance(data["model"], list) and llm_router is not None: - _models = data.pop("model") + elif "," in data["model"] and llm_router is not None: + _models_csv_string = data.pop("model") + _models = _models_csv_string.split(",") tasks.append(llm_router.abatch_completion(models=_models, **data)) elif "user_config" in data: # initialize a new router instance. make request using this Router diff --git a/tests/test_openai_endpoints.py b/tests/test_openai_endpoints.py index 7bc97ca5930..43dcae3cd7b 100644 --- a/tests/test_openai_endpoints.py +++ b/tests/test_openai_endpoints.py @@ -424,10 +424,7 @@ async def test_batch_chat_completions(): response = await chat_completion( session=session, key="sk-1234", - model=[ - "gpt-3.5-turbo", - "fake-openai-endpoint", - ], + model="gpt-3.5-turbo,fake-openai-endpoint", ) print(f"response: {response}") From bf2194d7fc5af49acc24f0e505bd14322f92fe3e Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:27:20 -0700 Subject: [PATCH 109/378] feat - support model as csv on proxy --- docs/my-website/docs/proxy/user_keys.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/user_keys.md b/docs/my-website/docs/proxy/user_keys.md index 7aba832eb8a..d86feb29c37 100644 --- a/docs/my-website/docs/proxy/user_keys.md +++ b/docs/my-website/docs/proxy/user_keys.md @@ -365,12 +365,14 @@ curl --location 'http://0.0.0.0:4000/moderations' \ ## Advanced -### (BETA) Batch Completions - pass `model` as List +### (BETA) Batch Completions - pass multiple models Use this when you want to send 1 request to N Models #### Expected Request Format +Pass model as a string of comma separated value of models. Example `"model"="llama3,gpt-3.5-turbo"` + This same request will be sent to the following model groups on the [litellm proxy config.yaml](https://docs.litellm.ai/docs/proxy/configs) - `model_name="llama3"` - `model_name="gpt-3.5-turbo"` @@ -380,7 +382,7 @@ curl --location 'http://localhost:4000/chat/completions' \ --header 'Authorization: Bearer sk-1234' \ --header 'Content-Type: application/json' \ --data '{ - "model": ["llama3", "gpt-3.5-turbo"], + "model": "llama3,gpt-3.5-turbo", "max_tokens": 10, "user": "litellm2", "messages": [ From 25febe41c470b32b1dddd57ea64b199bdd18f9a6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 14:37:32 -0700 Subject: [PATCH 110/378] docs - using batch completions with python --- docs/my-website/docs/proxy/user_keys.md | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/docs/my-website/docs/proxy/user_keys.md b/docs/my-website/docs/proxy/user_keys.md index d86feb29c37..cda3a46af9f 100644 --- a/docs/my-website/docs/proxy/user_keys.md +++ b/docs/my-website/docs/proxy/user_keys.md @@ -377,6 +377,95 @@ This same request will be sent to the following model groups on the [litellm pro - `model_name="llama3"` - `model_name="gpt-3.5-turbo"` + + + + + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +response = client.chat.completions.create( + model="gpt-3.5-turbo,llama3", + messages=[ + {"role": "user", "content": "this is a test request, write a short poem"} + ], +) + +print(response) +``` + + + +#### Expected Response Format + +Get a list of responses when `model` is passed as a list + +```python +[ + ChatCompletion( + id='chatcmpl-9NoYhS2G0fswot0b6QpoQgmRQMaIf', + choices=[ + Choice( + finish_reason='stop', + index=0, + logprobs=None, + message=ChatCompletionMessage( + content='In the depths of my soul, a spark ignites\nA light that shines so pure and bright\nIt dances and leaps, refusing to die\nA flame of hope that reaches the sky\n\nIt warms my heart and fills me with bliss\nA reminder that in darkness, there is light to kiss\nSo I hold onto this fire, this guiding light\nAnd let it lead me through the darkest night.', + role='assistant', + function_call=None, + tool_calls=None + ) + ) + ], + created=1715462919, + model='gpt-3.5-turbo-0125', + object='chat.completion', + system_fingerprint=None, + usage=CompletionUsage( + completion_tokens=83, + prompt_tokens=17, + total_tokens=100 + ) + ), + ChatCompletion( + id='chatcmpl-4ac3e982-da4e-486d-bddb-ed1d5cb9c03c', + choices=[ + Choice( + finish_reason='stop', + index=0, + logprobs=None, + message=ChatCompletionMessage( + content="A test request, and I'm delighted!\nHere's a short poem, just for you:\n\nMoonbeams dance upon the sea,\nA path of light, for you to see.\nThe stars up high, a twinkling show,\nA night of wonder, for all to know.\n\nThe world is quiet, save the night,\nA peaceful hush, a gentle light.\nThe world is full, of beauty rare,\nA treasure trove, beyond compare.\n\nI hope you enjoyed this little test,\nA poem born, of whimsy and jest.\nLet me know, if there's anything else!", + role='assistant', + function_call=None, + tool_calls=None + ) + ) + ], + created=1715462919, + model='groq/llama3-8b-8192', + object='chat.completion', + system_fingerprint='fp_a2c8d063cb', + usage=CompletionUsage( + completion_tokens=120, + prompt_tokens=20, + total_tokens=140 + ) + ) +] +``` + + + + + + + + + ```shell curl --location 'http://localhost:4000/chat/completions' \ --header 'Authorization: Bearer sk-1234' \ @@ -395,6 +484,8 @@ curl --location 'http://localhost:4000/chat/completions' \ ``` + + #### Expected Response Format Get a list of responses when `model` is passed as a list @@ -449,6 +540,11 @@ Get a list of responses when `model` is passed as a list ``` + + + + + ### Pass User LLM API Keys, Fallbacks From 59c8c0adff167d373643e3872f2b4e5f5142fa81 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 11 May 2024 15:04:38 -0700 Subject: [PATCH 111/378] feat(bedrock_httpx.py): working cohere command r async calls --- litellm/__init__.py | 1 + litellm/llms/bedrock_httpx.py | 316 +++++++++++++++++++++- litellm/llms/custom_httpx/http_handler.py | 27 +- litellm/main.py | 45 ++- litellm/tests/test_completion.py | 1 + litellm/types/llms/bedrock.py | 6 + 6 files changed, 364 insertions(+), 32 deletions(-) create mode 100644 litellm/types/llms/bedrock.py diff --git a/litellm/__init__.py b/litellm/__init__.py index aedf4213917..67170c68d0a 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -670,6 +670,7 @@ from .llms.sagemaker import SagemakerConfig from .llms.ollama import OllamaConfig from .llms.ollama_chat import OllamaChatConfig from .llms.maritalk import MaritTalkConfig +from .llms.bedrock_httpx import AmazonCohereChatConfig from .llms.bedrock import ( AmazonTitanConfig, AmazonAI21Config, diff --git a/litellm/llms/bedrock_httpx.py b/litellm/llms/bedrock_httpx.py index c6b0327e6bf..d3062b5ed84 100644 --- a/litellm/llms/bedrock_httpx.py +++ b/litellm/llms/bedrock_httpx.py @@ -7,7 +7,7 @@ import json from enum import Enum import requests, copy # type: ignore import time -from typing import Callable, Optional, List, Literal, Union +from typing import Callable, Optional, List, Literal, Union, Any, TypedDict, Tuple from litellm.utils import ( ModelResponse, Usage, @@ -18,11 +18,110 @@ from litellm.utils import ( get_secret, ) import litellm -from .prompt_templates.factory import prompt_factory, custom_prompt -from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler +from .prompt_templates.factory import prompt_factory, custom_prompt, cohere_message_pt +from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler from .base import BaseLLM import httpx # type: ignore -from .bedrock import BedrockError +from .bedrock import BedrockError, convert_messages_to_prompt +from litellm.types.llms.bedrock import * + + +class AmazonCohereChatConfig: + """ + Reference - https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-cohere-command-r-plus.html + """ + + documents: Optional[List[Document]] = None + search_queries_only: Optional[bool] = None + preamble: Optional[str] = None + max_tokens: Optional[int] = None + temperature: Optional[float] = None + p: Optional[float] = None + k: Optional[float] = None + prompt_truncation: Optional[str] = None + frequency_penalty: Optional[float] = None + presence_penalty: Optional[float] = None + seed: Optional[int] = None + return_prompt: Optional[bool] = None + stop_sequences: Optional[List[str]] = None + raw_prompting: Optional[bool] = None + + def __init__( + self, + documents: Optional[List[Document]] = None, + search_queries_only: Optional[bool] = None, + preamble: Optional[str] = None, + max_tokens: Optional[int] = None, + temperature: Optional[float] = None, + p: Optional[float] = None, + k: Optional[float] = None, + prompt_truncation: Optional[str] = None, + frequency_penalty: Optional[float] = None, + presence_penalty: Optional[float] = None, + seed: Optional[int] = None, + return_prompt: Optional[bool] = None, + stop_sequences: Optional[str] = None, + raw_prompting: Optional[bool] = None, + ) -> None: + locals_ = locals() + for key, value in locals_.items(): + if key != "self" and value is not None: + setattr(self.__class__, key, value) + + @classmethod + def get_config(cls): + return { + k: v + for k, v in cls.__dict__.items() + if not k.startswith("__") + and not isinstance( + v, + ( + types.FunctionType, + types.BuiltinFunctionType, + classmethod, + staticmethod, + ), + ) + and v is not None + } + + def get_supported_openai_params(self) -> List[str]: + return [ + "max_tokens", + "stream", + "stop", + "temperature", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + ] + + def map_openai_params( + self, non_default_params: dict, optional_params: dict + ) -> dict: + for param, value in non_default_params.items(): + if param == "max_tokens": + optional_params["max_tokens"] = value + if param == "stream": + optional_params["stream"] = value + if param == "stop": + if isinstance(value, str): + value = [value] + optional_params["stop_sequences"] = value + if param == "temperature": + optional_params["temperature"] = value + if param == "top_p": + optional_params["p"] = value + if param == "frequency_penalty": + optional_params["frequency_penalty"] = value + if param == "presence_penalty": + optional_params["presence_penalty"] = value + if "seed": + optional_params["seed"] = value + return optional_params class BedrockLLM(BaseLLM): @@ -47,6 +146,48 @@ class BedrockLLM(BaseLLM): def __init__(self) -> None: super().__init__() + def convert_messages_to_prompt( + self, model, messages, provider, custom_prompt_dict + ) -> Tuple[str, Optional[list]]: + # handle anthropic prompts and amazon titan prompts + prompt = "" + chat_history: Optional[list] = None + if provider == "anthropic" or provider == "amazon": + if model in custom_prompt_dict: + # check if the model has a registered custom prompt + model_prompt_details = custom_prompt_dict[model] + prompt = custom_prompt( + role_dict=model_prompt_details["roles"], + initial_prompt_value=model_prompt_details["initial_prompt_value"], + final_prompt_value=model_prompt_details["final_prompt_value"], + messages=messages, + ) + else: + prompt = prompt_factory( + model=model, messages=messages, custom_llm_provider="bedrock" + ) + elif provider == "mistral": + prompt = prompt_factory( + model=model, messages=messages, custom_llm_provider="bedrock" + ) + elif provider == "meta": + prompt = prompt_factory( + model=model, messages=messages, custom_llm_provider="bedrock" + ) + elif provider == "cohere": + prompt, chat_history = cohere_message_pt(messages=messages) + else: + prompt = "" + for message in messages: + if "role" in message: + if message["role"] == "user": + prompt += f"{message['content']}" + else: + prompt += f"{message['content']}" + else: + prompt += f"{message['content']}" + return prompt, chat_history # type: ignore + def get_credentials( self, aws_access_key_id: Optional[str] = None, @@ -114,11 +255,168 @@ class BedrockLLM(BaseLLM): return session.get_credentials() - def completion(self, *args, **kwargs) -> Union[ModelResponse, CustomStreamWrapper]: - ## get credentials - ## generate signature - ## make request - return super().completion(*args, **kwargs) + def completion( + self, + model: str, + messages: list, + custom_prompt_dict: dict, + model_response: ModelResponse, + print_verbose: Callable, + encoding, + logging_obj, + optional_params: dict, + timeout: Optional[Union[float, httpx.Timeout]], + litellm_params=None, + logger_fn=None, + extra_headers: Optional[dict] = None, + client: Optional[HTTPHandler] = None, + ) -> Union[ModelResponse, CustomStreamWrapper]: + try: + import boto3 + + from botocore.auth import SigV4Auth + from botocore.awsrequest import AWSRequest + from botocore.credentials import Credentials + except ImportError as e: + raise ImportError("Missing boto3 to call bedrock. Run 'pip install boto3'.") + + ## CREDENTIALS ## + # pop aws_secret_access_key, aws_access_key_id, aws_region_name from kwargs, since completion calls fail with them + aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) + aws_access_key_id = optional_params.pop("aws_access_key_id", None) + aws_region_name = optional_params.pop("aws_region_name", None) + aws_role_name = optional_params.pop("aws_role_name", None) + aws_session_name = optional_params.pop("aws_session_name", None) + aws_profile_name = optional_params.pop("aws_profile_name", None) + aws_bedrock_runtime_endpoint = optional_params.pop( + "aws_bedrock_runtime_endpoint", None + ) # https://bedrock-runtime.{region_name}.amazonaws.com + + ### SET REGION NAME ### + if aws_region_name is None: + # check env # + litellm_aws_region_name = get_secret("AWS_REGION_NAME", None) + + if litellm_aws_region_name is not None and isinstance( + litellm_aws_region_name, str + ): + aws_region_name = litellm_aws_region_name + + standard_aws_region_name = get_secret("AWS_REGION", None) + if standard_aws_region_name is not None and isinstance( + standard_aws_region_name, str + ): + aws_region_name = standard_aws_region_name + + if aws_region_name is None: + aws_region_name = "us-west-2" + + credentials: Credentials = self.get_credentials( + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_region_name=aws_region_name, + aws_session_name=aws_session_name, + aws_profile_name=aws_profile_name, + aws_role_name=aws_role_name, + ) + + ### SET RUNTIME ENDPOINT ### + endpoint_url = "" + env_aws_bedrock_runtime_endpoint = get_secret("AWS_BEDROCK_RUNTIME_ENDPOINT") + if aws_bedrock_runtime_endpoint is not None and isinstance( + aws_bedrock_runtime_endpoint, str + ): + endpoint_url = aws_bedrock_runtime_endpoint + elif env_aws_bedrock_runtime_endpoint and isinstance( + env_aws_bedrock_runtime_endpoint, str + ): + endpoint_url = env_aws_bedrock_runtime_endpoint + else: + endpoint_url = f"https://bedrock-runtime.{aws_region_name}.amazonaws.com" + + endpoint_url = f"{endpoint_url}/model/{model}/invoke" + + sigv4 = SigV4Auth(credentials, "bedrock", aws_region_name) + + provider = model.split(".")[0] + prompt, chat_history = self.convert_messages_to_prompt( + model, messages, provider, custom_prompt_dict + ) + inference_params = copy.deepcopy(optional_params) + stream = inference_params.pop("stream", False) + + if provider == "cohere": + if model.startswith("cohere.command-r"): + ## LOAD CONFIG + config = litellm.AmazonCohereChatConfig().get_config() + for k, v in config.items(): + if ( + k not in inference_params + ): # completion(top_k=3) > anthropic_config(top_k=3) <- allows for dynamic variables to be passed in + inference_params[k] = v + if optional_params.get("stream", False) == True: + inference_params["stream"] = ( + True # cohere requires stream = True in inference params + ) + + _data = {"message": prompt, **inference_params} + if chat_history is not None: + _data["chat_history"] = chat_history + data = json.dumps(_data) + else: + ## LOAD CONFIG + config = litellm.AmazonCohereConfig.get_config() + for k, v in config.items(): + if ( + k not in inference_params + ): # completion(top_k=3) > anthropic_config(top_k=3) <- allows for dynamic variables to be passed in + inference_params[k] = v + if optional_params.get("stream", False) == True: + inference_params["stream"] = ( + True # cohere requires stream = True in inference params + ) + data = json.dumps({"prompt": prompt, **inference_params}) + else: + raise Exception("UNSUPPORTED PROVIDER") + + ## COMPLETION CALL + headers = {"Content-Type": "application/json"} + request = AWSRequest( + method="POST", url=endpoint_url, data=data, headers=headers + ) + sigv4.add_auth(request) + prepped = request.prepare() + + if client is None: + _params = {} + if timeout is not None: + if isinstance(timeout, float) or isinstance(timeout, int): + timeout = httpx.Timeout(timeout) + _params["timeout"] = timeout + self.client = HTTPHandler(**_params) # type: ignore + else: + self.client = client + + ## LOGGING + logging_obj.pre_call( + input=messages, + api_key="", + additional_args={ + "complete_input_dict": data, + "api_base": prepped.url, + "headers": prepped.headers, + }, + ) + + response = self.client.post(url=prepped.url, headers=prepped.headers, data=data) # type: ignore + + try: + response.raise_for_status() + except httpx.HTTPStatusError as err: + error_code = err.response.status_code + raise BedrockError(status_code=error_code, message=response.text) + + return response def embedding(self, *args, **kwargs): return super().embedding(*args, **kwargs) diff --git a/litellm/llms/custom_httpx/http_handler.py b/litellm/llms/custom_httpx/http_handler.py index 7c7d4938a40..529ba3b390a 100644 --- a/litellm/llms/custom_httpx/http_handler.py +++ b/litellm/llms/custom_httpx/http_handler.py @@ -58,16 +58,25 @@ class AsyncHTTPHandler: class HTTPHandler: def __init__( - self, timeout: httpx.Timeout = _DEFAULT_TIMEOUT, concurrent_limit=1000 + self, + timeout: Optional[httpx.Timeout] = None, + concurrent_limit=1000, + client: Optional[httpx.Client] = None, ): - # Create a client with a connection pool - self.client = httpx.Client( - timeout=timeout, - limits=httpx.Limits( - max_connections=concurrent_limit, - max_keepalive_connections=concurrent_limit, - ), - ) + if timeout is None: + timeout = _DEFAULT_TIMEOUT + + if client is None: + # Create a client with a connection pool + self.client = httpx.Client( + timeout=timeout, + limits=httpx.Limits( + max_connections=concurrent_limit, + max_keepalive_connections=concurrent_limit, + ), + ) + else: + self.client = client def close(self): # Close the client when you're done with it diff --git a/litellm/main.py b/litellm/main.py index 8be71de0b7e..d2f3939fdee 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -1922,20 +1922,37 @@ def completion( elif custom_llm_provider == "bedrock": # boto3 reads keys from .env custom_prompt_dict = custom_prompt_dict or litellm.custom_prompt_dict - response = bedrock.completion( - model=model, - messages=messages, - custom_prompt_dict=litellm.custom_prompt_dict, - model_response=model_response, - print_verbose=print_verbose, - optional_params=optional_params, - litellm_params=litellm_params, - logger_fn=logger_fn, - encoding=encoding, - logging_obj=logging, - extra_headers=extra_headers, - timeout=timeout, - ) + + if "cohere" in model: + response = bedrock_chat_completion.completion( + model=model, + messages=messages, + custom_prompt_dict=litellm.custom_prompt_dict, + model_response=model_response, + print_verbose=print_verbose, + optional_params=optional_params, + litellm_params=litellm_params, + logger_fn=logger_fn, + encoding=encoding, + logging_obj=logging, + extra_headers=extra_headers, + timeout=timeout, + ) + else: + response = bedrock.completion( + model=model, + messages=messages, + custom_prompt_dict=litellm.custom_prompt_dict, + model_response=model_response, + print_verbose=print_verbose, + optional_params=optional_params, + litellm_params=litellm_params, + logger_fn=logger_fn, + encoding=encoding, + logging_obj=logging, + extra_headers=extra_headers, + timeout=timeout, + ) if ( "stream" in optional_params diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 214dc105b11..0cf6dda8359 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -2585,6 +2585,7 @@ def test_completion_chat_sagemaker_mistral(): def test_completion_bedrock_command_r(): + litellm.set_verbose = True response = completion( model="bedrock/cohere.command-r-plus-v1:0", messages=[{"role": "user", "content": "Hey! how's it going?"}], diff --git a/litellm/types/llms/bedrock.py b/litellm/types/llms/bedrock.py new file mode 100644 index 00000000000..87ef6fd3cc2 --- /dev/null +++ b/litellm/types/llms/bedrock.py @@ -0,0 +1,6 @@ +from typing import TypedDict + + +class Document(TypedDict): + title: str + snippet: str From 9167ff0d759acbfca0ff98de8d472615faa3c9df Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Sat, 11 May 2024 15:22:30 -0700 Subject: [PATCH 112/378] Set fake env vars for `client_no_auth` fixture This allows all of the tests in `test_proxy_server.py` to pass, with the exception of `test_load_router_config`, without needing to set up real environment variables. Before: ```shell $ env -i PATH=$PATH poetry run pytest litellm/tests/test_proxy_server.py -k 'not test_load_router_config' --disable-warnings ... ========================================================== short test summary info =========================================================== ERROR litellm/tests/test_proxy_server.py::test_bedrock_embedding - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_chat_completion - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_chat_completion_azure - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_chat_completion_optional_params - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_embedding - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_engines_model_chat_completions - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_health - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_img_gen - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ERROR litellm/tests/test_proxy_server.py::test_openai_deployments_model_chat_completions_azure - openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY enviro... ========================================== 2 skipped, 1 deselected, 39 warnings, 9 errors in 3.24s =========================================== ``` After: ```shell $ env -i PATH=$PATH poetry run pytest litellm/tests/test_proxy_server.py -k 'not test_load_router_config' --disable-warnings ============================================================ test session starts ============================================================= platform darwin -- Python 3.12.3, pytest-7.4.4, pluggy-1.5.0 rootdir: /Users/abramowi/Code/OpenSource/litellm plugins: anyio-4.3.0, asyncio-0.23.6, mock-3.14.0 asyncio: mode=Mode.STRICT collected 12 items / 1 deselected / 11 selected litellm/tests/test_proxy_server.py s.........s [100%] ========================================== 9 passed, 2 skipped, 1 deselected, 48 warnings in 8.42s =========================================== ``` --- litellm/tests/test_proxy_server.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index c1965dc2aac..76b2b2d185c 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -109,7 +109,17 @@ def mock_patch_aimage_generation(): @pytest.fixture(scope="function") -def client_no_auth(): +def fake_env_vars(monkeypatch): + # Set some fake environment variables + monkeypatch.setenv("OPENAI_API_KEY", "fake_openai_api_key") + monkeypatch.setenv("OPENAI_API_BASE", "http://fake-openai-api-base") + monkeypatch.setenv("AZURE_API_BASE", "http://fake-azure-api-base") + monkeypatch.setenv("AZURE_OPENAI_API_KEY", "fake_azure_openai_api_key") + monkeypatch.setenv("AZURE_SWEDEN_API_BASE", "http://fake-azure-sweden-api-base") + + +@pytest.fixture(scope="function") +def client_no_auth(fake_env_vars): # Assuming litellm.proxy.proxy_server is an object from litellm.proxy.proxy_server import cleanup_router_config_variables From 91a6a0eef40c4f1a9f91a8e78a989f4091fc10c7 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 15:57:06 -0700 Subject: [PATCH 113/378] (Fix) - linting errors --- litellm/exceptions.py | 6 +- litellm/proxy/hooks/azure_content_safety.py | 3 +- litellm/utils.py | 71 +++++++++++++++------ 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/litellm/exceptions.py b/litellm/exceptions.py index 7c3471acf36..d239f1e1280 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -202,13 +202,11 @@ class BudgetExceededError(Exception): ## DEPRECATED ## class InvalidRequestError(openai.BadRequestError): # type: ignore - def __init__( - self, message, model, llm_provider, response: Optional[httpx.Response] = None - ): + def __init__(self, message, model, llm_provider): self.status_code = 400 self.message = message self.model = model self.llm_provider = llm_provider super().__init__( - self.message, response=response, body=None + self.message, f"{self.model}" ) # Call the base class constructor with the parameters it needs diff --git a/litellm/proxy/hooks/azure_content_safety.py b/litellm/proxy/hooks/azure_content_safety.py index 433571c15ce..5b5139f8c78 100644 --- a/litellm/proxy/hooks/azure_content_safety.py +++ b/litellm/proxy/hooks/azure_content_safety.py @@ -4,6 +4,7 @@ from litellm.proxy._types import UserAPIKeyAuth import litellm, traceback, sys, uuid from fastapi import HTTPException from litellm._logging import verbose_proxy_logger +from typing import Optional class _PROXY_AzureContentSafety( @@ -71,7 +72,7 @@ class _PROXY_AzureContentSafety( return result - async def test_violation(self, content: str, source: str = None): + async def test_violation(self, content: str, source: Optional[str] = None): verbose_proxy_logger.debug("Testing Azure Content-Safety for: %s", content) # Construct a request diff --git a/litellm/utils.py b/litellm/utils.py index e787d215570..2eee41d8d47 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -35,6 +35,7 @@ from dataclasses import ( import litellm._service_logger # for storing API inputs, outputs, and metadata from litellm.llms.custom_httpx.http_handler import HTTPHandler from litellm.caching import DualCache + oidc_cache = DualCache() try: @@ -2957,7 +2958,7 @@ def client(original_function): ) else: return result - + return result # Prints Exactly what was passed to litellm function - don't execute any logic here - it should just print @@ -9559,16 +9560,20 @@ def get_secret( if oidc_token is not None: return oidc_token - client = HTTPHandler(timeout=httpx.Timeout(timeout=600.0, connect=5.0)) + oidc_client = HTTPHandler( + timeout=httpx.Timeout(timeout=600.0, connect=5.0) + ) # https://cloud.google.com/compute/docs/instances/verifying-instance-identity#request_signature - response = client.get( + response = oidc_client.get( "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity", params={"audience": oidc_aud}, headers={"Metadata-Flavor": "Google"}, ) if response.status_code == 200: oidc_token = response.text - oidc_cache.set_cache(key=secret_name, value=oidc_token, ttl=3600 - 60) + oidc_cache.set_cache( + key=secret_name, value=oidc_token, ttl=3600 - 60 + ) return oidc_token else: raise ValueError("Google OIDC provider failed") @@ -9587,25 +9592,34 @@ def get_secret( case "github": # https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-cloud-providers#using-custom-actions actions_id_token_request_url = os.getenv("ACTIONS_ID_TOKEN_REQUEST_URL") - actions_id_token_request_token = os.getenv("ACTIONS_ID_TOKEN_REQUEST_TOKEN") - if actions_id_token_request_url is None or actions_id_token_request_token is None: - raise ValueError("ACTIONS_ID_TOKEN_REQUEST_URL or ACTIONS_ID_TOKEN_REQUEST_TOKEN not found in environment") + actions_id_token_request_token = os.getenv( + "ACTIONS_ID_TOKEN_REQUEST_TOKEN" + ) + if ( + actions_id_token_request_url is None + or actions_id_token_request_token is None + ): + raise ValueError( + "ACTIONS_ID_TOKEN_REQUEST_URL or ACTIONS_ID_TOKEN_REQUEST_TOKEN not found in environment" + ) oidc_token = oidc_cache.get_cache(key=secret_name) if oidc_token is not None: return oidc_token - client = HTTPHandler(timeout=httpx.Timeout(timeout=600.0, connect=5.0)) - response = client.get( + oidc_client = HTTPHandler( + timeout=httpx.Timeout(timeout=600.0, connect=5.0) + ) + response = oidc_client.get( actions_id_token_request_url, params={"audience": oidc_aud}, headers={ "Authorization": f"Bearer {actions_id_token_request_token}", "Accept": "application/json; api-version=2.0", - }, + }, ) if response.status_code == 200: - oidc_token = response.text['value'] + oidc_token = response.text["value"] oidc_cache.set_cache(key=secret_name, value=oidc_token, ttl=300 - 5) return oidc_token else: @@ -9613,7 +9627,6 @@ def get_secret( case _: raise ValueError("Unsupported OIDC provider") - try: if litellm.secret_manager_client is not None: try: @@ -10562,7 +10575,12 @@ class CustomStreamWrapper: response = chunk.replace("data: ", "").strip() parsed_response = json.loads(response) else: - return {"text": "", "is_finished": False, "prompt_tokens": 0, "completion_tokens": 0} + return { + "text": "", + "is_finished": False, + "prompt_tokens": 0, + "completion_tokens": 0, + } else: print_verbose(f"chunk: {chunk} (Type: {type(chunk)})") raise ValueError( @@ -10583,19 +10601,32 @@ class CustomStreamWrapper: return {"text": "", "is_finished": False} except Exception as e: raise e - + def handle_clarifai_completion_chunk(self, chunk): try: if isinstance(chunk, dict): - parsed_response = chunk + parsed_response = chunk if isinstance(chunk, (str, bytes)): if isinstance(chunk, bytes): parsed_response = chunk.decode("utf-8") else: parsed_response = chunk - data_json = json.loads(parsed_response) - text = data_json.get("outputs", "")[0].get("data", "").get("text", "").get("raw","") - prompt_tokens = len(encoding.encode(data_json.get("outputs", "")[0].get("input","").get("data", "").get("text", "").get("raw",""))) + data_json = json.loads(parsed_response) + text = ( + data_json.get("outputs", "")[0] + .get("data", "") + .get("text", "") + .get("raw", "") + ) + prompt_tokens = len( + encoding.encode( + data_json.get("outputs", "")[0] + .get("input", "") + .get("data", "") + .get("text", "") + .get("raw", "") + ) + ) completion_tokens = len(encoding.encode(text)) return { "text": text, @@ -10650,9 +10681,7 @@ class CustomStreamWrapper: completion_obj["content"] = response_obj["text"] if response_obj["is_finished"]: self.received_finish_reason = response_obj["finish_reason"] - elif ( - self.custom_llm_provider and self.custom_llm_provider == "clarifai" - ): + elif self.custom_llm_provider and self.custom_llm_provider == "clarifai": response_obj = self.handle_clarifai_completion_chunk(chunk) completion_obj["content"] = response_obj["text"] elif self.model == "replicate" or self.custom_llm_provider == "replicate": From d7f71208800397f3c5d14ba81e5f2c304cc08ae9 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 11 May 2024 15:58:53 -0700 Subject: [PATCH 114/378] ui - new build --- litellm/proxy/_experimental/out/404.html | 2 +- .../_buildManifest.js | 0 .../_ssgManifest.js | 0 ...bc85-17d29013b8ff3da5.js => 2f6dbc85-052c4579f80d66ae.js} | 0 .../{69-e49705773ae41779.js => 69-04708d7d4a17c1ee.js} | 0 .../{566-ccd699ab19124658.js => 884-7576ee407a2ecbe6.js} | 4 ++-- ...nd-a166f65a6af292d9.js => _not-found-b1ee1381b72386c2.js} | 0 ...layout-94ae1345f5d85446.js => layout-a756276e228ca058.js} | 0 .../out/_next/static/chunks/app/page-c804e862b63be987.js | 1 - .../out/_next/static/chunks/app/page-e6190351ac8da62a.js | 1 + ...1056-dafd44dfa2da140c.js => fd9d1056-f960ab1e6d32b002.js} | 0 .../out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js | 2 +- .../_experimental/out/_next/static/css/a1602eb39f799143.css | 5 ----- .../_experimental/out/_next/static/css/f04e46b02318b660.css | 5 +++++ litellm/proxy/_experimental/out/index.html | 2 +- litellm/proxy/_experimental/out/index.txt | 4 ++-- ui/litellm-dashboard/out/404.html | 2 +- .../_buildManifest.js | 0 .../_ssgManifest.js | 0 ...bc85-17d29013b8ff3da5.js => 2f6dbc85-052c4579f80d66ae.js} | 0 .../{69-e49705773ae41779.js => 69-04708d7d4a17c1ee.js} | 0 .../{566-ccd699ab19124658.js => 884-7576ee407a2ecbe6.js} | 4 ++-- ...nd-a166f65a6af292d9.js => _not-found-b1ee1381b72386c2.js} | 0 ...layout-94ae1345f5d85446.js => layout-a756276e228ca058.js} | 0 .../out/_next/static/chunks/app/page-c804e862b63be987.js | 1 - .../out/_next/static/chunks/app/page-e6190351ac8da62a.js | 1 + ...1056-dafd44dfa2da140c.js => fd9d1056-f960ab1e6d32b002.js} | 0 .../out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js | 2 +- .../out/_next/static/css/a1602eb39f799143.css | 5 ----- .../out/_next/static/css/f04e46b02318b660.css | 5 +++++ ui/litellm-dashboard/out/index.html | 2 +- ui/litellm-dashboard/out/index.txt | 4 ++-- 32 files changed, 26 insertions(+), 26 deletions(-) rename litellm/proxy/_experimental/out/_next/static/{K8KXTbmuI2ArWjjdMi2iq => 84BZ5uERcn4DsO4_POsLl}/_buildManifest.js (100%) rename litellm/proxy/_experimental/out/_next/static/{K8KXTbmuI2ArWjjdMi2iq => 84BZ5uERcn4DsO4_POsLl}/_ssgManifest.js (100%) rename litellm/proxy/_experimental/out/_next/static/chunks/{2f6dbc85-17d29013b8ff3da5.js => 2f6dbc85-052c4579f80d66ae.js} (100%) rename litellm/proxy/_experimental/out/_next/static/chunks/{69-e49705773ae41779.js => 69-04708d7d4a17c1ee.js} (100%) rename litellm/proxy/_experimental/out/_next/static/chunks/{566-ccd699ab19124658.js => 884-7576ee407a2ecbe6.js} (64%) rename litellm/proxy/_experimental/out/_next/static/chunks/app/{_not-found-a166f65a6af292d9.js => _not-found-b1ee1381b72386c2.js} (100%) rename litellm/proxy/_experimental/out/_next/static/chunks/app/{layout-94ae1345f5d85446.js => layout-a756276e228ca058.js} (100%) delete mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/page-c804e862b63be987.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/page-e6190351ac8da62a.js rename litellm/proxy/_experimental/out/_next/static/chunks/{fd9d1056-dafd44dfa2da140c.js => fd9d1056-f960ab1e6d32b002.js} (100%) rename ui/litellm-dashboard/out/_next/static/chunks/webpack-5b257e1ab47d4b4a.js => litellm/proxy/_experimental/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js (98%) delete mode 100644 litellm/proxy/_experimental/out/_next/static/css/a1602eb39f799143.css create mode 100644 litellm/proxy/_experimental/out/_next/static/css/f04e46b02318b660.css rename ui/litellm-dashboard/out/_next/static/{K8KXTbmuI2ArWjjdMi2iq => 84BZ5uERcn4DsO4_POsLl}/_buildManifest.js (100%) rename ui/litellm-dashboard/out/_next/static/{K8KXTbmuI2ArWjjdMi2iq => 84BZ5uERcn4DsO4_POsLl}/_ssgManifest.js (100%) rename ui/litellm-dashboard/out/_next/static/chunks/{2f6dbc85-17d29013b8ff3da5.js => 2f6dbc85-052c4579f80d66ae.js} (100%) rename ui/litellm-dashboard/out/_next/static/chunks/{69-e49705773ae41779.js => 69-04708d7d4a17c1ee.js} (100%) rename ui/litellm-dashboard/out/_next/static/chunks/{566-ccd699ab19124658.js => 884-7576ee407a2ecbe6.js} (64%) rename ui/litellm-dashboard/out/_next/static/chunks/app/{_not-found-a166f65a6af292d9.js => _not-found-b1ee1381b72386c2.js} (100%) rename ui/litellm-dashboard/out/_next/static/chunks/app/{layout-94ae1345f5d85446.js => layout-a756276e228ca058.js} (100%) delete mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/page-c804e862b63be987.js create mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/page-e6190351ac8da62a.js rename ui/litellm-dashboard/out/_next/static/chunks/{fd9d1056-dafd44dfa2da140c.js => fd9d1056-f960ab1e6d32b002.js} (100%) rename litellm/proxy/_experimental/out/_next/static/chunks/webpack-5b257e1ab47d4b4a.js => ui/litellm-dashboard/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js (98%) delete mode 100644 ui/litellm-dashboard/out/_next/static/css/a1602eb39f799143.css create mode 100644 ui/litellm-dashboard/out/_next/static/css/f04e46b02318b660.css diff --git a/litellm/proxy/_experimental/out/404.html b/litellm/proxy/_experimental/out/404.html index 448d7cf877c..eaf57013553 100644 --- a/litellm/proxy/_experimental/out/404.html +++ b/litellm/proxy/_experimental/out/404.html @@ -1 +1 @@ -404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/K8KXTbmuI2ArWjjdMi2iq/_buildManifest.js b/litellm/proxy/_experimental/out/_next/static/84BZ5uERcn4DsO4_POsLl/_buildManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/K8KXTbmuI2ArWjjdMi2iq/_buildManifest.js rename to litellm/proxy/_experimental/out/_next/static/84BZ5uERcn4DsO4_POsLl/_buildManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/K8KXTbmuI2ArWjjdMi2iq/_ssgManifest.js b/litellm/proxy/_experimental/out/_next/static/84BZ5uERcn4DsO4_POsLl/_ssgManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/K8KXTbmuI2ArWjjdMi2iq/_ssgManifest.js rename to litellm/proxy/_experimental/out/_next/static/84BZ5uERcn4DsO4_POsLl/_ssgManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/2f6dbc85-17d29013b8ff3da5.js b/litellm/proxy/_experimental/out/_next/static/chunks/2f6dbc85-052c4579f80d66ae.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/chunks/2f6dbc85-17d29013b8ff3da5.js rename to litellm/proxy/_experimental/out/_next/static/chunks/2f6dbc85-052c4579f80d66ae.js diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/69-e49705773ae41779.js b/litellm/proxy/_experimental/out/_next/static/chunks/69-04708d7d4a17c1ee.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/chunks/69-e49705773ae41779.js rename to litellm/proxy/_experimental/out/_next/static/chunks/69-04708d7d4a17c1ee.js diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/566-ccd699ab19124658.js b/litellm/proxy/_experimental/out/_next/static/chunks/884-7576ee407a2ecbe6.js similarity index 64% rename from litellm/proxy/_experimental/out/_next/static/chunks/566-ccd699ab19124658.js rename to litellm/proxy/_experimental/out/_next/static/chunks/884-7576ee407a2ecbe6.js index 3b819d4158a..f0f47e76abf 100644 --- a/litellm/proxy/_experimental/out/_next/static/chunks/566-ccd699ab19124658.js +++ b/litellm/proxy/_experimental/out/_next/static/chunks/884-7576ee407a2ecbe6.js @@ -1,4 +1,4 @@ -"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[566],{12215:function(e,t,n){n.d(t,{iN:function(){return h},R_:function(){return d},EV:function(){return g},ez:function(){return p}});var r=n(41785),o=n(76991),a=[{index:7,opacity:.15},{index:6,opacity:.25},{index:5,opacity:.3},{index:5,opacity:.45},{index:5,opacity:.65},{index:5,opacity:.85},{index:4,opacity:.9},{index:3,opacity:.95},{index:2,opacity:.97},{index:1,opacity:.98}];function i(e){var t=e.r,n=e.g,o=e.b,a=(0,r.py)(t,n,o);return{h:360*a.h,s:a.s,v:a.v}}function l(e){var t=e.r,n=e.g,o=e.b;return"#".concat((0,r.vq)(t,n,o,!1))}function s(e,t,n){var r;return(r=Math.round(e.h)>=60&&240>=Math.round(e.h)?n?Math.round(e.h)-2*t:Math.round(e.h)+2*t:n?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?r+=360:r>=360&&(r-=360),r}function c(e,t,n){var r;return 0===e.h&&0===e.s?e.s:((r=n?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(r=1),n&&5===t&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2)))}function u(e,t,n){var r;return(r=n?e.v+.05*t:e.v-.15*t)>1&&(r=1),Number(r.toFixed(2))}function d(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=(0,o.uA)(e),d=5;d>0;d-=1){var p=i(r),f=l((0,o.uA)({h:s(p,d,!0),s:c(p,d,!0),v:u(p,d,!0)}));n.push(f)}n.push(l(r));for(var m=1;m<=4;m+=1){var g=i(r),h=l((0,o.uA)({h:s(g,m),s:c(g,m),v:u(g,m)}));n.push(h)}return"dark"===t.theme?a.map(function(e){var r,a,i,s=e.index,c=e.opacity;return l((r=(0,o.uA)(t.backgroundColor||"#141414"),a=(0,o.uA)(n[s]),i=100*c/100,{r:(a.r-r.r)*i+r.r,g:(a.g-r.g)*i+r.g,b:(a.b-r.b)*i+r.b}))}):n}var p={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},f={},m={};Object.keys(p).forEach(function(e){f[e]=d(p[e]),f[e].primary=f[e][5],m[e]=d(p[e],{theme:"dark",backgroundColor:"#141414"}),m[e].primary=m[e][5]}),f.red,f.volcano;var g=f.gold;f.orange,f.yellow,f.lime,f.green,f.cyan;var h=f.blue;f.geekblue,f.purple,f.magenta,f.grey,f.grey},8985:function(e,t,n){n.d(t,{E4:function(){return ej},jG:function(){return A},ks:function(){return Z},bf:function(){return F},CI:function(){return eD},fp:function(){return X},xy:function(){return eM}});var r,o,a=n(50833),i=n(80406),l=n(63787),s=n(5239),c=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))*1540483477+((t>>>16)*59797<<16),t^=t>>>24,n=(65535&t)*1540483477+((t>>>16)*59797<<16)^(65535&n)*1540483477+((n>>>16)*59797<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n^=255&e.charCodeAt(r),n=(65535&n)*1540483477+((n>>>16)*59797<<16)}return n^=n>>>13,(((n=(65535&n)*1540483477+((n>>>16)*59797<<16))^n>>>15)>>>0).toString(36)},u=n(24050),d=n(64090),p=n.t(d,2);n(61475),n(92536);var f=n(47365),m=n(65127);function g(e){return e.join("%")}var h=function(){function e(t){(0,f.Z)(this,e),(0,a.Z)(this,"instanceId",void 0),(0,a.Z)(this,"cache",new Map),this.instanceId=t}return(0,m.Z)(e,[{key:"get",value:function(e){return this.opGet(g(e))}},{key:"opGet",value:function(e){return this.cache.get(e)||null}},{key:"update",value:function(e,t){return this.opUpdate(g(e),t)}},{key:"opUpdate",value:function(e,t){var n=t(this.cache.get(e));null===n?this.cache.delete(e):this.cache.set(e,n)}}]),e}(),b="data-token-hash",v="data-css-hash",y="__cssinjs_instance__",E=d.createContext({hashPriority:"low",cache:function(){var e=Math.random().toString(12).slice(2);if("undefined"!=typeof document&&document.head&&document.body){var t=document.body.querySelectorAll("style[".concat(v,"]"))||[],n=document.head.firstChild;Array.from(t).forEach(function(t){t[y]=t[y]||e,t[y]===e&&document.head.insertBefore(t,n)});var r={};Array.from(document.querySelectorAll("style[".concat(v,"]"))).forEach(function(t){var n,o=t.getAttribute(v);r[o]?t[y]===e&&(null===(n=t.parentNode)||void 0===n||n.removeChild(t)):r[o]=!0})}return new h(e)}(),defaultCache:!0}),w=n(6976),S=n(22127),x=function(){function e(){(0,f.Z)(this,e),(0,a.Z)(this,"cache",void 0),(0,a.Z)(this,"keys",void 0),(0,a.Z)(this,"cacheCallTimes",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return(0,m.Z)(e,[{key:"size",value:function(){return this.keys.length}},{key:"internalGet",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach(function(e){if(o){var t;o=null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e)}else o=void 0}),null!==(t=o)&&void 0!==t&&t.value&&r&&(o.value[1]=this.cacheCallTimes++),null===(n=o)||void 0===n?void 0:n.value}},{key:"get",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:"has",value:function(e){return!!this.internalGet(e)}},{key:"set",value:function(t,n){var r=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce(function(e,t){var n=(0,i.Z)(e,2)[1];return r.internalGet(t)[1]0,"[Ant Design CSS-in-JS] Theme should have at least one derivative function."),k+=1}return(0,m.Z)(e,[{key:"getDerivativeToken",value:function(e){return this.derivatives.reduce(function(t,n){return n(e,t)},void 0)}}]),e}(),T=new x;function A(e){var t=Array.isArray(e)?e:[e];return T.has(t)||T.set(t,new C(t)),T.get(t)}var N=new WeakMap,I={},R=new WeakMap;function _(e){var t=R.get(e)||"";return t||(Object.keys(e).forEach(function(n){var r=e[n];t+=n,r instanceof C?t+=r.id:r&&"object"===(0,w.Z)(r)?t+=_(r):t+=r}),R.set(e,t)),t}function P(e,t){return c("".concat(t,"_").concat(_(e)))}var M="random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,""),L="_bAmBoO_",D=void 0,j=(0,S.Z)();function F(e){return"number"==typeof e?"".concat(e,"px"):e}function B(e,t,n){var r,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(i)return e;var l=(0,s.Z)((0,s.Z)({},o),{},(r={},(0,a.Z)(r,b,t),(0,a.Z)(r,v,n),r)),c=Object.keys(l).map(function(e){var t=l[e];return t?"".concat(e,'="').concat(t,'"'):null}).filter(function(e){return e}).join(" ");return"")}var Z=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"--".concat(t?"".concat(t,"-"):"").concat(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},U=function(e,t,n){var r,o={},a={};return Object.entries(e).forEach(function(e){var t=(0,i.Z)(e,2),r=t[0],l=t[1];if(null!=n&&null!==(s=n.preserve)&&void 0!==s&&s[r])a[r]=l;else if(("string"==typeof l||"number"==typeof l)&&!(null!=n&&null!==(c=n.ignore)&&void 0!==c&&c[r])){var s,c,u,d=Z(r,null==n?void 0:n.prefix);o[d]="number"!=typeof l||null!=n&&null!==(u=n.unitless)&&void 0!==u&&u[r]?String(l):"".concat(l,"px"),a[r]="var(".concat(d,")")}}),[a,(r={scope:null==n?void 0:n.scope},Object.keys(o).length?".".concat(t).concat(null!=r&&r.scope?".".concat(r.scope):"","{").concat(Object.entries(o).map(function(e){var t=(0,i.Z)(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(r,";")}).join(""),"}"):"")]},z=n(24800),H=(0,s.Z)({},p).useInsertionEffect,G=H?function(e,t,n){return H(function(){return e(),t()},n)}:function(e,t,n){d.useMemo(e,n),(0,z.Z)(function(){return t(!0)},n)},W=void 0!==(0,s.Z)({},p).useInsertionEffect?function(e){var t=[],n=!1;return d.useEffect(function(){return n=!1,function(){n=!0,t.length&&t.forEach(function(e){return e()})}},e),function(e){n||t.push(e)}}:function(){return function(e){e()}};function $(e,t,n,r,o){var a=d.useContext(E).cache,s=g([e].concat((0,l.Z)(t))),c=W([s]),u=function(e){a.opUpdate(s,function(t){var r=(0,i.Z)(t||[void 0,void 0],2),o=r[0],a=[void 0===o?0:o,r[1]||n()];return e?e(a):a})};d.useMemo(function(){u()},[s]);var p=a.opGet(s)[1];return G(function(){null==o||o(p)},function(e){return u(function(t){var n=(0,i.Z)(t,2),r=n[0],a=n[1];return e&&0===r&&(null==o||o(p)),[r+1,a]}),function(){a.opUpdate(s,function(t){var n=(0,i.Z)(t||[],2),o=n[0],l=void 0===o?0:o,u=n[1];return 0==l-1?(c(function(){(e||!a.opGet(s))&&(null==r||r(u,!1))}),null):[l-1,u]})}},[s]),p}var V={},q=new Map,Y=function(e,t,n,r){var o=n.getDerivativeToken(e),a=(0,s.Z)((0,s.Z)({},o),t);return r&&(a=r(a)),a},K="token";function X(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=(0,d.useContext)(E),o=r.cache.instanceId,a=r.container,p=n.salt,f=void 0===p?"":p,m=n.override,g=void 0===m?V:m,h=n.formatToken,w=n.getComputedToken,S=n.cssVar,x=function(e,t){for(var n=N,r=0;r=(q.get(e)||0)}),n.length-r.length>0&&r.forEach(function(e){"undefined"!=typeof document&&document.querySelectorAll("style[".concat(b,'="').concat(e,'"]')).forEach(function(e){if(e[y]===o){var t;null===(t=e.parentNode)||void 0===t||t.removeChild(e)}}),q.delete(e)})},function(e){var t=(0,i.Z)(e,4),n=t[0],r=t[3];if(S&&r){var l=(0,u.hq)(r,c("css-variables-".concat(n._themeKey)),{mark:v,prepend:"queue",attachTo:a,priority:-999});l[y]=o,l.setAttribute(b,n._themeKey)}})}var Q=n(14749),J={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ee="comm",et="rule",en="decl",er=Math.abs,eo=String.fromCharCode;function ea(e,t,n){return e.replace(t,n)}function ei(e,t){return 0|e.charCodeAt(t)}function el(e,t,n){return e.slice(t,n)}function es(e){return e.length}function ec(e,t){return t.push(e),e}function eu(e,t){for(var n="",r=0;r0?f[v]+" "+y:ea(y,/&\f/g,f[v])).trim())&&(s[b++]=E);return ev(e,t,n,0===o?et:l,s,c,u,d)}function eO(e,t,n,r,o){return ev(e,t,n,en,el(e,0,r),el(e,r+1,-1),r,o)}var ek="data-ant-cssinjs-cache-path",eC="_FILE_STYLE__",eT=!0,eA="_multi_value_";function eN(e){var t,n,r;return eu((r=function e(t,n,r,o,a,i,l,s,c){for(var u,d,p,f=0,m=0,g=l,h=0,b=0,v=0,y=1,E=1,w=1,S=0,x="",O=a,k=i,C=o,T=x;E;)switch(v=S,S=ey()){case 40:if(108!=v&&58==ei(T,g-1)){-1!=(d=T+=ea(eS(S),"&","&\f"),p=er(f?s[f-1]:0),d.indexOf("&\f",p))&&(w=-1);break}case 34:case 39:case 91:T+=eS(S);break;case 9:case 10:case 13:case 32:T+=function(e){for(;eh=eE();)if(eh<33)ey();else break;return ew(e)>2||ew(eh)>3?"":" "}(v);break;case 92:T+=function(e,t){for(var n;--t&&ey()&&!(eh<48)&&!(eh>102)&&(!(eh>57)||!(eh<65))&&(!(eh>70)||!(eh<97)););return n=eg+(t<6&&32==eE()&&32==ey()),el(eb,e,n)}(eg-1,7);continue;case 47:switch(eE()){case 42:case 47:ec(ev(u=function(e,t){for(;ey();)if(e+eh===57)break;else if(e+eh===84&&47===eE())break;return"/*"+el(eb,t,eg-1)+"*"+eo(47===e?e:ey())}(ey(),eg),n,r,ee,eo(eh),el(u,2,-2),0,c),c);break;default:T+="/"}break;case 123*y:s[f++]=es(T)*w;case 125*y:case 59:case 0:switch(S){case 0:case 125:E=0;case 59+m:-1==w&&(T=ea(T,/\f/g,"")),b>0&&es(T)-g&&ec(b>32?eO(T+";",o,r,g-1,c):eO(ea(T," ","")+";",o,r,g-2,c),c);break;case 59:T+=";";default:if(ec(C=ex(T,n,r,f,m,a,s,x,O=[],k=[],g,i),i),123===S){if(0===m)e(T,n,C,C,O,i,g,s,k);else switch(99===h&&110===ei(T,3)?100:h){case 100:case 108:case 109:case 115:e(t,C,C,o&&ec(ex(t,C,C,0,0,a,s,x,a,O=[],g,k),k),a,k,g,s,o?O:k);break;default:e(T,C,C,C,[""],k,0,s,k)}}}f=m=b=0,y=w=1,x=T="",g=l;break;case 58:g=1+es(T),b=v;default:if(y<1){if(123==S)--y;else if(125==S&&0==y++&&125==(eh=eg>0?ei(eb,--eg):0,ef--,10===eh&&(ef=1,ep--),eh))continue}switch(T+=eo(S),S*y){case 38:w=m>0?1:(T+="\f",-1);break;case 44:s[f++]=(es(T)-1)*w,w=1;break;case 64:45===eE()&&(T+=eS(ey())),h=eE(),m=g=es(x=T+=function(e){for(;!ew(eE());)ey();return el(eb,e,eg)}(eg)),S++;break;case 45:45===v&&2==es(T)&&(y=0)}}return i}("",null,null,null,[""],(n=t=e,ep=ef=1,em=es(eb=n),eg=0,t=[]),0,[0],t),eb="",r),ed).replace(/\{%%%\:[^;];}/g,";")}var eI=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=r.root,a=r.injectHash,c=r.parentSelectors,d=n.hashId,p=n.layer,f=(n.path,n.hashPriority),m=n.transformers,g=void 0===m?[]:m;n.linters;var h="",b={};function v(t){var r=t.getName(d);if(!b[r]){var o=e(t.style,n,{root:!1,parentSelectors:c}),a=(0,i.Z)(o,1)[0];b[r]="@keyframes ".concat(t.getName(d)).concat(a)}}if((function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach(function(t){Array.isArray(t)?e(t,n):t&&n.push(t)}),n})(Array.isArray(t)?t:[t]).forEach(function(t){var r="string"!=typeof t||o?t:{};if("string"==typeof r)h+="".concat(r,"\n");else if(r._keyframe)v(r);else{var u=g.reduce(function(e,t){var n;return(null==t||null===(n=t.visit)||void 0===n?void 0:n.call(t,e))||e},r);Object.keys(u).forEach(function(t){var r=u[t];if("object"!==(0,w.Z)(r)||!r||"animationName"===t&&r._keyframe||"object"===(0,w.Z)(r)&&r&&("_skip_check_"in r||eA in r)){function p(e,t){var n=e.replace(/[A-Z]/g,function(e){return"-".concat(e.toLowerCase())}),r=t;J[e]||"number"!=typeof r||0===r||(r="".concat(r,"px")),"animationName"===e&&null!=t&&t._keyframe&&(v(t),r=t.getName(d)),h+="".concat(n,":").concat(r,";")}var m,g=null!==(m=null==r?void 0:r.value)&&void 0!==m?m:r;"object"===(0,w.Z)(r)&&null!=r&&r[eA]&&Array.isArray(g)?g.forEach(function(e){p(t,e)}):p(t,g)}else{var y=!1,E=t.trim(),S=!1;(o||a)&&d?E.startsWith("@")?y=!0:E=function(e,t,n){if(!t)return e;var r=".".concat(t),o="low"===n?":where(".concat(r,")"):r;return e.split(",").map(function(e){var t,n=e.trim().split(/\s+/),r=n[0]||"",a=(null===(t=r.match(/^\w+/))||void 0===t?void 0:t[0])||"";return[r="".concat(a).concat(o).concat(r.slice(a.length))].concat((0,l.Z)(n.slice(1))).join(" ")}).join(",")}(t,d,f):o&&!d&&("&"===E||""===E)&&(E="",S=!0);var x=e(r,n,{root:S,injectHash:y,parentSelectors:[].concat((0,l.Z)(c),[E])}),O=(0,i.Z)(x,2),k=O[0],C=O[1];b=(0,s.Z)((0,s.Z)({},b),C),h+="".concat(E).concat(k)}})}}),o){if(p&&(void 0===D&&(D=function(e,t,n){if((0,S.Z)()){(0,u.hq)(e,M);var r,o,a=document.createElement("div");a.style.position="fixed",a.style.left="0",a.style.top="0",null==t||t(a),document.body.appendChild(a);var i=n?n(a):null===(r=getComputedStyle(a).content)||void 0===r?void 0:r.includes(L);return null===(o=a.parentNode)||void 0===o||o.removeChild(a),(0,u.jL)(M),i}return!1}("@layer ".concat(M," { .").concat(M,' { content: "').concat(L,'"!important; } }'),function(e){e.className=M})),D)){var y=p.split(","),E=y[y.length-1].trim();h="@layer ".concat(E," {").concat(h,"}"),y.length>1&&(h="@layer ".concat(p,"{%%%:%}").concat(h))}}else h="{".concat(h,"}");return[h,b]};function eR(e,t){return c("".concat(e.join("%")).concat(t))}function e_(){return null}var eP="style";function eM(e,t){var n=e.token,o=e.path,s=e.hashId,c=e.layer,p=e.nonce,f=e.clientOnly,m=e.order,g=void 0===m?0:m,h=d.useContext(E),w=h.autoClear,x=(h.mock,h.defaultCache),O=h.hashPriority,k=h.container,C=h.ssrInline,T=h.transformers,A=h.linters,N=h.cache,I=n._tokenKey,R=[I].concat((0,l.Z)(o)),_=$(eP,R,function(){var e=R.join("|");if(!function(){if(!r&&(r={},(0,S.Z)())){var e,t=document.createElement("div");t.className=ek,t.style.position="fixed",t.style.visibility="hidden",t.style.top="-9999px",document.body.appendChild(t);var n=getComputedStyle(t).content||"";(n=n.replace(/^"/,"").replace(/"$/,"")).split(";").forEach(function(e){var t=e.split(":"),n=(0,i.Z)(t,2),o=n[0],a=n[1];r[o]=a});var o=document.querySelector("style[".concat(ek,"]"));o&&(eT=!1,null===(e=o.parentNode)||void 0===e||e.removeChild(o)),document.body.removeChild(t)}}(),r[e]){var n=function(e){var t=r[e],n=null;if(t&&(0,S.Z)()){if(eT)n=eC;else{var o=document.querySelector("style[".concat(v,'="').concat(r[e],'"]'));o?n=o.innerHTML:delete r[e]}}return[n,t]}(e),a=(0,i.Z)(n,2),l=a[0],u=a[1];if(l)return[l,I,u,{},f,g]}var d=eI(t(),{hashId:s,hashPriority:O,layer:c,path:o.join("-"),transformers:T,linters:A}),p=(0,i.Z)(d,2),m=p[0],h=p[1],b=eN(m),y=eR(R,b);return[b,I,y,h,f,g]},function(e,t){var n=(0,i.Z)(e,3)[2];(t||w)&&j&&(0,u.jL)(n,{mark:v})},function(e){var t=(0,i.Z)(e,4),n=t[0],r=(t[1],t[2]),o=t[3];if(j&&n!==eC){var a={mark:v,prepend:"queue",attachTo:k,priority:g},l="function"==typeof p?p():p;l&&(a.csp={nonce:l});var s=(0,u.hq)(n,r,a);s[y]=N.instanceId,s.setAttribute(b,I),Object.keys(o).forEach(function(e){(0,u.hq)(eN(o[e]),"_effect-".concat(e),a)})}}),P=(0,i.Z)(_,3),M=P[0],L=P[1],D=P[2];return function(e){var t,n;return t=C&&!j&&x?d.createElement("style",(0,Q.Z)({},(n={},(0,a.Z)(n,b,L),(0,a.Z)(n,v,D),n),{dangerouslySetInnerHTML:{__html:M}})):d.createElement(e_,null),d.createElement(d.Fragment,null,t,e)}}var eL="cssVar",eD=function(e,t){var n=e.key,r=e.prefix,o=e.unitless,a=e.ignore,s=e.token,c=e.scope,p=void 0===c?"":c,f=(0,d.useContext)(E),m=f.cache.instanceId,g=f.container,h=s._tokenKey,w=[].concat((0,l.Z)(e.path),[n,p,h]);return $(eL,w,function(){var e=U(t(),n,{prefix:r,unitless:o,ignore:a,scope:p}),l=(0,i.Z)(e,2),s=l[0],c=l[1],u=eR(w,c);return[s,c,u,n]},function(e){var t=(0,i.Z)(e,3)[2];j&&(0,u.jL)(t,{mark:v})},function(e){var t=(0,i.Z)(e,3),r=t[1],o=t[2];if(r){var a=(0,u.hq)(r,o,{mark:v,prepend:"queue",attachTo:g,priority:-999});a[y]=m,a.setAttribute(b,n)}})};o={},(0,a.Z)(o,eP,function(e,t,n){var r=(0,i.Z)(e,6),o=r[0],a=r[1],l=r[2],s=r[3],c=r[4],u=r[5],d=(n||{}).plain;if(c)return null;var p=o,f={"data-rc-order":"prependQueue","data-rc-priority":"".concat(u)};return p=B(o,a,l,f,d),s&&Object.keys(s).forEach(function(e){if(!t[e]){t[e]=!0;var n=eN(s[e]);p+=B(n,a,"_effect-".concat(e),f,d)}}),[u,l,p]}),(0,a.Z)(o,K,function(e,t,n){var r=(0,i.Z)(e,5),o=r[2],a=r[3],l=r[4],s=(n||{}).plain;if(!a)return null;var c=o._tokenKey,u=B(a,l,c,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s);return[-999,c,u]}),(0,a.Z)(o,eL,function(e,t,n){var r=(0,i.Z)(e,4),o=r[1],a=r[2],l=r[3],s=(n||{}).plain;if(!o)return null;var c=B(o,l,a,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s);return[-999,a,c]});var ej=function(){function e(t,n){(0,f.Z)(this,e),(0,a.Z)(this,"name",void 0),(0,a.Z)(this,"style",void 0),(0,a.Z)(this,"_keyframe",!0),this.name=t,this.style=n}return(0,m.Z)(e,[{key:"getName",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?"".concat(e,"-").concat(this.name):this.name}}]),e}();function eF(e){return e.notSplit=!0,e}eF(["borderTop","borderBottom"]),eF(["borderTop"]),eF(["borderBottom"]),eF(["borderLeft","borderRight"]),eF(["borderLeft"]),eF(["borderRight"])},60688:function(e,t,n){n.d(t,{Z:function(){return A}});var r=n(14749),o=n(80406),a=n(50833),i=n(60635),l=n(64090),s=n(16480),c=n.n(s),u=n(12215),d=n(67689),p=n(5239),f=n(6976),m=n(24050),g=n(74687),h=n(53850);function b(e){return"object"===(0,f.Z)(e)&&"string"==typeof e.name&&"string"==typeof e.theme&&("object"===(0,f.Z)(e.icon)||"function"==typeof e.icon)}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce(function(t,n){var r=e[n];return"class"===n?(t.className=r,delete t.class):(delete t[n],t[n.replace(/-(.)/g,function(e,t){return t.toUpperCase()})]=r),t},{})}function y(e){return(0,u.R_)(e)[0]}function E(e){return e?Array.isArray(e)?e:[e]:[]}var w=function(e){var t=(0,l.useContext)(d.Z),n=t.csp,r=t.prefixCls,o="\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";r&&(o=o.replace(/anticon/g,r)),(0,l.useEffect)(function(){var t=e.current,r=(0,g.A)(t);(0,m.hq)(o,"@ant-design-icons",{prepend:!0,csp:n,attachTo:r})},[])},S=["icon","className","onClick","style","primaryColor","secondaryColor"],x={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1},O=function(e){var t,n,r=e.icon,o=e.className,a=e.onClick,s=e.style,c=e.primaryColor,u=e.secondaryColor,d=(0,i.Z)(e,S),f=l.useRef(),m=x;if(c&&(m={primaryColor:c,secondaryColor:u||y(c)}),w(f),t=b(r),n="icon should be icon definiton, but got ".concat(r),(0,h.ZP)(t,"[@ant-design/icons] ".concat(n)),!b(r))return null;var g=r;return g&&"function"==typeof g.icon&&(g=(0,p.Z)((0,p.Z)({},g),{},{icon:g.icon(m.primaryColor,m.secondaryColor)})),function e(t,n,r){return r?l.createElement(t.tag,(0,p.Z)((0,p.Z)({key:n},v(t.attrs)),r),(t.children||[]).map(function(r,o){return e(r,"".concat(n,"-").concat(t.tag,"-").concat(o))})):l.createElement(t.tag,(0,p.Z)({key:n},v(t.attrs)),(t.children||[]).map(function(r,o){return e(r,"".concat(n,"-").concat(t.tag,"-").concat(o))}))}(g.icon,"svg-".concat(g.name),(0,p.Z)((0,p.Z)({className:o,onClick:a,style:s,"data-icon":g.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},d),{},{ref:f}))};function k(e){var t=E(e),n=(0,o.Z)(t,2),r=n[0],a=n[1];return O.setTwoToneColors({primaryColor:r,secondaryColor:a})}O.displayName="IconReact",O.getTwoToneColors=function(){return(0,p.Z)({},x)},O.setTwoToneColors=function(e){var t=e.primaryColor,n=e.secondaryColor;x.primaryColor=t,x.secondaryColor=n||y(t),x.calculated=!!n};var C=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];k(u.iN.primary);var T=l.forwardRef(function(e,t){var n,s=e.className,u=e.icon,p=e.spin,f=e.rotate,m=e.tabIndex,g=e.onClick,h=e.twoToneColor,b=(0,i.Z)(e,C),v=l.useContext(d.Z),y=v.prefixCls,w=void 0===y?"anticon":y,S=v.rootClassName,x=c()(S,w,(n={},(0,a.Z)(n,"".concat(w,"-").concat(u.name),!!u.name),(0,a.Z)(n,"".concat(w,"-spin"),!!p||"loading"===u.name),n),s),k=m;void 0===k&&g&&(k=-1);var T=E(h),A=(0,o.Z)(T,2),N=A[0],I=A[1];return l.createElement("span",(0,r.Z)({role:"img","aria-label":u.name},b,{ref:t,tabIndex:k,onClick:g,className:x}),l.createElement(O,{icon:u,primaryColor:N,secondaryColor:I,style:f?{msTransform:"rotate(".concat(f,"deg)"),transform:"rotate(".concat(f,"deg)")}:void 0}))});T.displayName="AntdIcon",T.getTwoToneColor=function(){var e=O.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},T.setTwoToneColor=k;var A=T},67689:function(e,t,n){var r=(0,n(64090).createContext)({});t.Z=r},99537:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},90507:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},77136:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},81303:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},20383:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},31413:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},20653:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},41311:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},40388:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},66155:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},50459:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z"}}]},name:"right",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},96871:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}}]},name:"search",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},97766:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(14749),o=n(64090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"},i=n(60688),l=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},41785:function(e,t,n){n.d(t,{T6:function(){return p},VD:function(){return f},WE:function(){return c},Yt:function(){return m},lC:function(){return a},py:function(){return s},rW:function(){return o},s:function(){return d},ve:function(){return l},vq:function(){return u}});var r=n(27974);function o(e,t,n){return{r:255*(0,r.sh)(e,255),g:255*(0,r.sh)(t,255),b:255*(0,r.sh)(n,255)}}function a(e,t,n){var o=Math.max(e=(0,r.sh)(e,255),t=(0,r.sh)(t,255),n=(0,r.sh)(n,255)),a=Math.min(e,t,n),i=0,l=0,s=(o+a)/2;if(o===a)l=0,i=0;else{var c=o-a;switch(l=s>.5?c/(2-o-a):c/(o+a),o){case e:i=(t-n)/c+(t1&&(n-=1),n<1/6)?e+6*n*(t-e):n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function l(e,t,n){if(e=(0,r.sh)(e,360),t=(0,r.sh)(t,100),n=(0,r.sh)(n,100),0===t)a=n,l=n,o=n;else{var o,a,l,s=n<.5?n*(1+t):n+t-n*t,c=2*n-s;o=i(c,s,e+1/3),a=i(c,s,e),l=i(c,s,e-1/3)}return{r:255*o,g:255*a,b:255*l}}function s(e,t,n){var o=Math.max(e=(0,r.sh)(e,255),t=(0,r.sh)(t,255),n=(0,r.sh)(n,255)),a=Math.min(e,t,n),i=0,l=o-a;if(o===a)i=0;else{switch(o){case e:i=(t-n)/l+(t>16,g:(65280&e)>>8,b:255&e}}},6564:function(e,t,n){n.d(t,{R:function(){return r}});var r={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}},76991:function(e,t,n){n.d(t,{uA:function(){return i}});var r=n(41785),o=n(6564),a=n(27974);function i(e){var t={r:0,g:0,b:0},n=1,i=null,l=null,s=null,c=!1,p=!1;return"string"==typeof e&&(e=function(e){if(0===(e=e.trim().toLowerCase()).length)return!1;var t=!1;if(o.R[e])e=o.R[e],t=!0;else if("transparent"===e)return{r:0,g:0,b:0,a:0,format:"name"};var n=u.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=u.rgba.exec(e))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=u.hsl.exec(e))?{h:n[1],s:n[2],l:n[3]}:(n=u.hsla.exec(e))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=u.hsv.exec(e))?{h:n[1],s:n[2],v:n[3]}:(n=u.hsva.exec(e))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=u.hex8.exec(e))?{r:(0,r.VD)(n[1]),g:(0,r.VD)(n[2]),b:(0,r.VD)(n[3]),a:(0,r.T6)(n[4]),format:t?"name":"hex8"}:(n=u.hex6.exec(e))?{r:(0,r.VD)(n[1]),g:(0,r.VD)(n[2]),b:(0,r.VD)(n[3]),format:t?"name":"hex"}:(n=u.hex4.exec(e))?{r:(0,r.VD)(n[1]+n[1]),g:(0,r.VD)(n[2]+n[2]),b:(0,r.VD)(n[3]+n[3]),a:(0,r.T6)(n[4]+n[4]),format:t?"name":"hex8"}:!!(n=u.hex3.exec(e))&&{r:(0,r.VD)(n[1]+n[1]),g:(0,r.VD)(n[2]+n[2]),b:(0,r.VD)(n[3]+n[3]),format:t?"name":"hex"}}(e)),"object"==typeof e&&(d(e.r)&&d(e.g)&&d(e.b)?(t=(0,r.rW)(e.r,e.g,e.b),c=!0,p="%"===String(e.r).substr(-1)?"prgb":"rgb"):d(e.h)&&d(e.s)&&d(e.v)?(i=(0,a.JX)(e.s),l=(0,a.JX)(e.v),t=(0,r.WE)(e.h,i,l),c=!0,p="hsv"):d(e.h)&&d(e.s)&&d(e.l)&&(i=(0,a.JX)(e.s),s=(0,a.JX)(e.l),t=(0,r.ve)(e.h,i,s),c=!0,p="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=(0,a.Yq)(n),{ok:c,format:e.format||p,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}var l="(?:".concat("[-\\+]?\\d*\\.\\d+%?",")|(?:").concat("[-\\+]?\\d+%?",")"),s="[\\s|\\(]+(".concat(l,")[,|\\s]+(").concat(l,")[,|\\s]+(").concat(l,")\\s*\\)?"),c="[\\s|\\(]+(".concat(l,")[,|\\s]+(").concat(l,")[,|\\s]+(").concat(l,")[,|\\s]+(").concat(l,")\\s*\\)?"),u={CSS_UNIT:new RegExp(l),rgb:RegExp("rgb"+s),rgba:RegExp("rgba"+c),hsl:RegExp("hsl"+s),hsla:RegExp("hsla"+c),hsv:RegExp("hsv"+s),hsva:RegExp("hsva"+c),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function d(e){return!!u.CSS_UNIT.exec(String(e))}},6336:function(e,t,n){n.d(t,{C:function(){return l}});var r=n(41785),o=n(6564),a=n(76991),i=n(27974),l=function(){function e(t,n){if(void 0===t&&(t=""),void 0===n&&(n={}),t instanceof e)return t;"number"==typeof t&&(t=(0,r.Yt)(t)),this.originalInput=t;var o,i=(0,a.uA)(t);this.originalInput=t,this.r=i.r,this.g=i.g,this.b=i.b,this.a=i.a,this.roundA=Math.round(100*this.a)/100,this.format=null!==(o=n.format)&&void 0!==o?o:i.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=i.ok}return e.prototype.isDark=function(){return 128>this.getBrightness()},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},e.prototype.getLuminance=function(){var e=this.toRgb(),t=e.r/255,n=e.g/255,r=e.b/255;return .2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(e){return this.a=(0,i.Yq)(e),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){return 0===this.toHsl().s},e.prototype.toHsv=function(){var e=(0,r.py)(this.r,this.g,this.b);return{h:360*e.h,s:e.s,v:e.v,a:this.a}},e.prototype.toHsvString=function(){var e=(0,r.py)(this.r,this.g,this.b),t=Math.round(360*e.h),n=Math.round(100*e.s),o=Math.round(100*e.v);return 1===this.a?"hsv(".concat(t,", ").concat(n,"%, ").concat(o,"%)"):"hsva(".concat(t,", ").concat(n,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var e=(0,r.lC)(this.r,this.g,this.b);return{h:360*e.h,s:e.s,l:e.l,a:this.a}},e.prototype.toHslString=function(){var e=(0,r.lC)(this.r,this.g,this.b),t=Math.round(360*e.h),n=Math.round(100*e.s),o=Math.round(100*e.l);return 1===this.a?"hsl(".concat(t,", ").concat(n,"%, ").concat(o,"%)"):"hsla(".concat(t,", ").concat(n,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(e){return void 0===e&&(e=!1),(0,r.vq)(this.r,this.g,this.b,e)},e.prototype.toHexString=function(e){return void 0===e&&(e=!1),"#"+this.toHex(e)},e.prototype.toHex8=function(e){return void 0===e&&(e=!1),(0,r.s)(this.r,this.g,this.b,this.a,e)},e.prototype.toHex8String=function(e){return void 0===e&&(e=!1),"#"+this.toHex8(e)},e.prototype.toHexShortString=function(e){return void 0===e&&(e=!1),1===this.a?this.toHexString(e):this.toHex8String(e)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var e=Math.round(this.r),t=Math.round(this.g),n=Math.round(this.b);return 1===this.a?"rgb(".concat(e,", ").concat(t,", ").concat(n,")"):"rgba(".concat(e,", ").concat(t,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var e=function(e){return"".concat(Math.round(100*(0,i.sh)(e,255)),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var e=function(e){return Math.round(100*(0,i.sh)(e,255))};return 1===this.a?"rgb(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%)"):"rgba(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(0===this.a)return"transparent";if(this.a<1)return!1;for(var e="#"+(0,r.vq)(this.r,this.g,this.b,!1),t=0,n=Object.entries(o.R);t=0;return!t&&r&&(e.startsWith("hex")||"name"===e)?"name"===e&&0===this.a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),("hex"===e||"hex6"===e)&&(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.l+=t/100,n.l=(0,i.V2)(n.l),new e(n)},e.prototype.brighten=function(t){void 0===t&&(t=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(-(t/100*255)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(-(t/100*255)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(-(t/100*255)))),new e(n)},e.prototype.darken=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.l-=t/100,n.l=(0,i.V2)(n.l),new e(n)},e.prototype.tint=function(e){return void 0===e&&(e=10),this.mix("white",e)},e.prototype.shade=function(e){return void 0===e&&(e=10),this.mix("black",e)},e.prototype.desaturate=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.s-=t/100,n.s=(0,i.V2)(n.s),new e(n)},e.prototype.saturate=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.s+=t/100,n.s=(0,i.V2)(n.s),new e(n)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var n=this.toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,new e(n)},e.prototype.mix=function(t,n){void 0===n&&(n=50);var r=this.toRgb(),o=new e(t).toRgb(),a=n/100;return new e({r:(o.r-r.r)*a+r.r,g:(o.g-r.g)*a+r.g,b:(o.b-r.b)*a+r.b,a:(o.a-r.a)*a+r.a})},e.prototype.analogous=function(t,n){void 0===t&&(t=6),void 0===n&&(n=30);var r=this.toHsl(),o=360/n,a=[this];for(r.h=(r.h-(o*t>>1)+720)%360;--t;)r.h=(r.h+o)%360,a.push(new e(r));return a},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){void 0===t&&(t=6);for(var n=this.toHsv(),r=n.h,o=n.s,a=n.v,i=[],l=1/t;t--;)i.push(new e({h:r,s:o,v:a})),a=(a+l)%1;return i},e.prototype.splitcomplement=function(){var t=this.toHsl(),n=t.h;return[this,new e({h:(n+72)%360,s:t.s,l:t.l}),new e({h:(n+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var n=this.toRgb(),r=new e(t).toRgb(),o=n.a+r.a*(1-n.a);return new e({r:(n.r*n.a+r.r*r.a*(1-n.a))/o,g:(n.g*n.a+r.g*r.a*(1-n.a))/o,b:(n.b*n.a+r.b*r.a*(1-n.a))/o,a:o})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var n=this.toHsl(),r=n.h,o=[this],a=360/t,i=1;iMath.abs(e-t))?1:e=360===t?(e<0?e%t+t:e%t)/parseFloat(String(t)):e%t/parseFloat(String(t))}function o(e){return Math.min(1,Math.max(0,e))}function a(e){return(isNaN(e=parseFloat(e))||e<0||e>1)&&(e=1),e}function i(e){return e<=1?"".concat(100*Number(e),"%"):e}function l(e){return 1===e.length?"0"+e:String(e)}n.d(t,{FZ:function(){return l},JX:function(){return i},V2:function(){return o},Yq:function(){return a},sh:function(){return r}})},88804:function(e,t,n){n.d(t,{Z:function(){return y}});var r,o=n(80406),a=n(64090),i=n(89542),l=n(22127);n(53850);var s=n(74084),c=a.createContext(null),u=n(63787),d=n(24800),p=[],f=n(24050);function m(e){var t=e.match(/^(.*)px$/),n=Number(null==t?void 0:t[1]);return Number.isNaN(n)?function(e){if("undefined"==typeof document)return 0;if(void 0===r){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var n=document.createElement("div"),o=n.style;o.position="absolute",o.top="0",o.left="0",o.pointerEvents="none",o.visibility="hidden",o.width="200px",o.height="150px",o.overflow="hidden",n.appendChild(t),document.body.appendChild(n);var a=t.offsetWidth;n.style.overflow="scroll";var i=t.offsetWidth;a===i&&(i=n.clientWidth),document.body.removeChild(n),r=a-i}return r}():n}var g="rc-util-locker-".concat(Date.now()),h=0,b=!1,v=function(e){return!1!==e&&((0,l.Z)()&&e?"string"==typeof e?document.querySelector(e):"function"==typeof e?e():e:null)},y=a.forwardRef(function(e,t){var n,r,y,E,w=e.open,S=e.autoLock,x=e.getContainer,O=(e.debug,e.autoDestroy),k=void 0===O||O,C=e.children,T=a.useState(w),A=(0,o.Z)(T,2),N=A[0],I=A[1],R=N||w;a.useEffect(function(){(k||w)&&I(w)},[w,k]);var _=a.useState(function(){return v(x)}),P=(0,o.Z)(_,2),M=P[0],L=P[1];a.useEffect(function(){var e=v(x);L(null!=e?e:null)});var D=function(e,t){var n=a.useState(function(){return(0,l.Z)()?document.createElement("div"):null}),r=(0,o.Z)(n,1)[0],i=a.useRef(!1),s=a.useContext(c),f=a.useState(p),m=(0,o.Z)(f,2),g=m[0],h=m[1],b=s||(i.current?void 0:function(e){h(function(t){return[e].concat((0,u.Z)(t))})});function v(){r.parentElement||document.body.appendChild(r),i.current=!0}function y(){var e;null===(e=r.parentElement)||void 0===e||e.removeChild(r),i.current=!1}return(0,d.Z)(function(){return e?s?s(v):v():y(),y},[e]),(0,d.Z)(function(){g.length&&(g.forEach(function(e){return e()}),h(p))},[g]),[r,b]}(R&&!M,0),j=(0,o.Z)(D,2),F=j[0],B=j[1],Z=null!=M?M:F;n=!!(S&&w&&(0,l.Z)()&&(Z===F||Z===document.body)),r=a.useState(function(){return h+=1,"".concat(g,"_").concat(h)}),y=(0,o.Z)(r,1)[0],(0,d.Z)(function(){if(n){var e=function(e){if("undefined"==typeof document||!e||!(e instanceof Element))return{width:0,height:0};var t=getComputedStyle(e,"::-webkit-scrollbar"),n=t.width,r=t.height;return{width:m(n),height:m(r)}}(document.body).width,t=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;(0,f.hq)("\nhtml body {\n overflow-y: hidden;\n ".concat(t?"width: calc(100% - ".concat(e,"px);"):"","\n}"),y)}else(0,f.jL)(y);return function(){(0,f.jL)(y)}},[n,y]);var U=null;C&&(0,s.Yr)(C)&&t&&(U=C.ref);var z=(0,s.x1)(U,t);if(!R||!(0,l.Z)()||void 0===M)return null;var H=!1===Z||("boolean"==typeof E&&(b=E),b),G=C;return t&&(G=a.cloneElement(C,{ref:z})),a.createElement(c.Provider,{value:B},H?G:(0,i.createPortal)(G,Z))})},44101:function(e,t,n){n.d(t,{Z:function(){return z}});var r=n(5239),o=n(80406),a=n(60635),i=n(88804),l=n(16480),s=n.n(l),c=n(46505),u=n(97472),d=n(74687),p=n(54811),f=n(91010),m=n(24800),g=n(76158),h=n(64090),b=n(14749),v=n(49367),y=n(74084);function E(e){var t=e.prefixCls,n=e.align,r=e.arrow,o=e.arrowPos,a=r||{},i=a.className,l=a.content,c=o.x,u=o.y,d=h.useRef();if(!n||!n.points)return null;var p={position:"absolute"};if(!1!==n.autoArrow){var f=n.points[0],m=n.points[1],g=f[0],b=f[1],v=m[0],y=m[1];g!==v&&["t","b"].includes(g)?"t"===g?p.top=0:p.bottom=0:p.top=void 0===u?0:u,b!==y&&["l","r"].includes(b)?"l"===b?p.left=0:p.right=0:p.left=void 0===c?0:c}return h.createElement("div",{ref:d,className:s()("".concat(t,"-arrow"),i),style:p},l)}function w(e){var t=e.prefixCls,n=e.open,r=e.zIndex,o=e.mask,a=e.motion;return o?h.createElement(v.ZP,(0,b.Z)({},a,{motionAppear:!0,visible:n,removeOnLeave:!0}),function(e){var n=e.className;return h.createElement("div",{style:{zIndex:r},className:s()("".concat(t,"-mask"),n)})}):null}var S=h.memo(function(e){return e.children},function(e,t){return t.cache}),x=h.forwardRef(function(e,t){var n=e.popup,a=e.className,i=e.prefixCls,l=e.style,u=e.target,d=e.onVisibleChanged,p=e.open,f=e.keepDom,g=e.fresh,x=e.onClick,O=e.mask,k=e.arrow,C=e.arrowPos,T=e.align,A=e.motion,N=e.maskMotion,I=e.forceRender,R=e.getPopupContainer,_=e.autoDestroy,P=e.portal,M=e.zIndex,L=e.onMouseEnter,D=e.onMouseLeave,j=e.onPointerEnter,F=e.ready,B=e.offsetX,Z=e.offsetY,U=e.offsetR,z=e.offsetB,H=e.onAlign,G=e.onPrepare,W=e.stretch,$=e.targetWidth,V=e.targetHeight,q="function"==typeof n?n():n,Y=p||f,K=(null==R?void 0:R.length)>0,X=h.useState(!R||!K),Q=(0,o.Z)(X,2),J=Q[0],ee=Q[1];if((0,m.Z)(function(){!J&&K&&u&&ee(!0)},[J,K,u]),!J)return null;var et="auto",en={left:"-1000vw",top:"-1000vh",right:et,bottom:et};if(F||!p){var er,eo=T.points,ea=T.dynamicInset||(null===(er=T._experimental)||void 0===er?void 0:er.dynamicInset),ei=ea&&"r"===eo[0][1],el=ea&&"b"===eo[0][0];ei?(en.right=U,en.left=et):(en.left=B,en.right=et),el?(en.bottom=z,en.top=et):(en.top=Z,en.bottom=et)}var es={};return W&&(W.includes("height")&&V?es.height=V:W.includes("minHeight")&&V&&(es.minHeight=V),W.includes("width")&&$?es.width=$:W.includes("minWidth")&&$&&(es.minWidth=$)),p||(es.pointerEvents="none"),h.createElement(P,{open:I||Y,getContainer:R&&function(){return R(u)},autoDestroy:_},h.createElement(w,{prefixCls:i,open:p,zIndex:M,mask:O,motion:N}),h.createElement(c.Z,{onResize:H,disabled:!p},function(e){return h.createElement(v.ZP,(0,b.Z)({motionAppear:!0,motionEnter:!0,motionLeave:!0,removeOnLeave:!1,forceRender:I,leavedClassName:"".concat(i,"-hidden")},A,{onAppearPrepare:G,onEnterPrepare:G,visible:p,onVisibleChanged:function(e){var t;null==A||null===(t=A.onVisibleChanged)||void 0===t||t.call(A,e),d(e)}}),function(n,o){var c=n.className,u=n.style,d=s()(i,c,a);return h.createElement("div",{ref:(0,y.sQ)(e,t,o),className:d,style:(0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({"--arrow-x":"".concat(C.x||0,"px"),"--arrow-y":"".concat(C.y||0,"px")},en),es),u),{},{boxSizing:"border-box",zIndex:M},l),onMouseEnter:L,onMouseLeave:D,onPointerEnter:j,onClick:x},k&&h.createElement(E,{prefixCls:i,arrow:k,arrowPos:C,align:T}),h.createElement(S,{cache:!p&&!g},q))})}))}),O=h.forwardRef(function(e,t){var n=e.children,r=e.getTriggerDOMNode,o=(0,y.Yr)(n),a=h.useCallback(function(e){(0,y.mH)(t,r?r(e):e)},[r]),i=(0,y.x1)(a,n.ref);return o?h.cloneElement(n,{ref:i}):n}),k=h.createContext(null);function C(e){return e?Array.isArray(e)?e:[e]:[]}var T=n(73193);function A(e,t,n,r){return t||(n?{motionName:"".concat(e,"-").concat(n)}:r?{motionName:r}:null)}function N(e){return e.ownerDocument.defaultView}function I(e){for(var t=[],n=null==e?void 0:e.parentElement,r=["hidden","scroll","clip","auto"];n;){var o=N(n).getComputedStyle(n);[o.overflowX,o.overflowY,o.overflow].some(function(e){return r.includes(e)})&&t.push(n),n=n.parentElement}return t}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Number.isNaN(e)?t:e}function _(e){return R(parseFloat(e),0)}function P(e,t){var n=(0,r.Z)({},e);return(t||[]).forEach(function(e){if(!(e instanceof HTMLBodyElement||e instanceof HTMLHtmlElement)){var t=N(e).getComputedStyle(e),r=t.overflow,o=t.overflowClipMargin,a=t.borderTopWidth,i=t.borderBottomWidth,l=t.borderLeftWidth,s=t.borderRightWidth,c=e.getBoundingClientRect(),u=e.offsetHeight,d=e.clientHeight,p=e.offsetWidth,f=e.clientWidth,m=_(a),g=_(i),h=_(l),b=_(s),v=R(Math.round(c.width/p*1e3)/1e3),y=R(Math.round(c.height/u*1e3)/1e3),E=m*y,w=h*v,S=0,x=0;if("clip"===r){var O=_(o);S=O*v,x=O*y}var k=c.x+w-S,C=c.y+E-x,T=k+c.width+2*S-w-b*v-(p-f-h-b)*v,A=C+c.height+2*x-E-g*y-(u-d-m-g)*y;n.left=Math.max(n.left,k),n.top=Math.max(n.top,C),n.right=Math.min(n.right,T),n.bottom=Math.min(n.bottom,A)}}),n}function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n="".concat(t),r=n.match(/^(.*)\%$/);return r?parseFloat(r[1])/100*e:parseFloat(n)}function L(e,t){var n=(0,o.Z)(t||[],2),r=n[0],a=n[1];return[M(e.width,r),M(e.height,a)]}function D(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return[e[0],e[1]]}function j(e,t){var n,r=t[0],o=t[1];return n="t"===r?e.y:"b"===r?e.y+e.height:e.y+e.height/2,{x:"l"===o?e.x:"r"===o?e.x+e.width:e.x+e.width/2,y:n}}function F(e,t){var n={t:"b",b:"t",l:"r",r:"l"};return e.map(function(e,r){return r===t?n[e]||"c":e}).join("")}var B=n(63787);n(53850);var Z=n(19223),U=["prefixCls","children","action","showAction","hideAction","popupVisible","defaultPopupVisible","onPopupVisibleChange","afterPopupVisibleChange","mouseEnterDelay","mouseLeaveDelay","focusDelay","blurDelay","mask","maskClosable","getPopupContainer","forceRender","autoDestroy","destroyPopupOnHide","popup","popupClassName","popupStyle","popupPlacement","builtinPlacements","popupAlign","zIndex","stretch","getPopupClassNameFromAlign","fresh","alignPoint","onPopupClick","onPopupAlign","arrow","popupMotion","maskMotion","popupTransitionName","popupAnimation","maskTransitionName","maskAnimation","className","getTriggerDOMNode"],z=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.Z;return h.forwardRef(function(t,n){var i,l,b,v,y,E,w,S,_,M,z,H,G,W,$,V,q,Y=t.prefixCls,K=void 0===Y?"rc-trigger-popup":Y,X=t.children,Q=t.action,J=t.showAction,ee=t.hideAction,et=t.popupVisible,en=t.defaultPopupVisible,er=t.onPopupVisibleChange,eo=t.afterPopupVisibleChange,ea=t.mouseEnterDelay,ei=t.mouseLeaveDelay,el=void 0===ei?.1:ei,es=t.focusDelay,ec=t.blurDelay,eu=t.mask,ed=t.maskClosable,ep=t.getPopupContainer,ef=t.forceRender,em=t.autoDestroy,eg=t.destroyPopupOnHide,eh=t.popup,eb=t.popupClassName,ev=t.popupStyle,ey=t.popupPlacement,eE=t.builtinPlacements,ew=void 0===eE?{}:eE,eS=t.popupAlign,ex=t.zIndex,eO=t.stretch,ek=t.getPopupClassNameFromAlign,eC=t.fresh,eT=t.alignPoint,eA=t.onPopupClick,eN=t.onPopupAlign,eI=t.arrow,eR=t.popupMotion,e_=t.maskMotion,eP=t.popupTransitionName,eM=t.popupAnimation,eL=t.maskTransitionName,eD=t.maskAnimation,ej=t.className,eF=t.getTriggerDOMNode,eB=(0,a.Z)(t,U),eZ=h.useState(!1),eU=(0,o.Z)(eZ,2),ez=eU[0],eH=eU[1];(0,m.Z)(function(){eH((0,g.Z)())},[]);var eG=h.useRef({}),eW=h.useContext(k),e$=h.useMemo(function(){return{registerSubPopup:function(e,t){eG.current[e]=t,null==eW||eW.registerSubPopup(e,t)}}},[eW]),eV=(0,f.Z)(),eq=h.useState(null),eY=(0,o.Z)(eq,2),eK=eY[0],eX=eY[1],eQ=(0,p.Z)(function(e){(0,u.S)(e)&&eK!==e&&eX(e),null==eW||eW.registerSubPopup(eV,e)}),eJ=h.useState(null),e0=(0,o.Z)(eJ,2),e1=e0[0],e2=e0[1],e4=h.useRef(null),e3=(0,p.Z)(function(e){(0,u.S)(e)&&e1!==e&&(e2(e),e4.current=e)}),e6=h.Children.only(X),e5=(null==e6?void 0:e6.props)||{},e8={},e9=(0,p.Z)(function(e){var t,n;return(null==e1?void 0:e1.contains(e))||(null===(t=(0,d.A)(e1))||void 0===t?void 0:t.host)===e||e===e1||(null==eK?void 0:eK.contains(e))||(null===(n=(0,d.A)(eK))||void 0===n?void 0:n.host)===e||e===eK||Object.values(eG.current).some(function(t){return(null==t?void 0:t.contains(e))||e===t})}),e7=A(K,eR,eM,eP),te=A(K,e_,eD,eL),tt=h.useState(en||!1),tn=(0,o.Z)(tt,2),tr=tn[0],to=tn[1],ta=null!=et?et:tr,ti=(0,p.Z)(function(e){void 0===et&&to(e)});(0,m.Z)(function(){to(et||!1)},[et]);var tl=h.useRef(ta);tl.current=ta;var ts=h.useRef([]);ts.current=[];var tc=(0,p.Z)(function(e){var t;ti(e),(null!==(t=ts.current[ts.current.length-1])&&void 0!==t?t:ta)!==e&&(ts.current.push(e),null==er||er(e))}),tu=h.useRef(),td=function(){clearTimeout(tu.current)},tp=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;td(),0===t?tc(e):tu.current=setTimeout(function(){tc(e)},1e3*t)};h.useEffect(function(){return td},[]);var tf=h.useState(!1),tm=(0,o.Z)(tf,2),tg=tm[0],th=tm[1];(0,m.Z)(function(e){(!e||ta)&&th(!0)},[ta]);var tb=h.useState(null),tv=(0,o.Z)(tb,2),ty=tv[0],tE=tv[1],tw=h.useState([0,0]),tS=(0,o.Z)(tw,2),tx=tS[0],tO=tS[1],tk=function(e){tO([e.clientX,e.clientY])},tC=(i=eT?tx:e1,l=h.useState({ready:!1,offsetX:0,offsetY:0,offsetR:0,offsetB:0,arrowX:0,arrowY:0,scaleX:1,scaleY:1,align:ew[ey]||{}}),v=(b=(0,o.Z)(l,2))[0],y=b[1],E=h.useRef(0),w=h.useMemo(function(){return eK?I(eK):[]},[eK]),S=h.useRef({}),ta||(S.current={}),_=(0,p.Z)(function(){if(eK&&i&&ta){var e,t,n,a,l,s,c,d=eK.ownerDocument,p=N(eK).getComputedStyle(eK),f=p.width,m=p.height,g=p.position,h=eK.style.left,b=eK.style.top,v=eK.style.right,E=eK.style.bottom,x=eK.style.overflow,O=(0,r.Z)((0,r.Z)({},ew[ey]),eS),k=d.createElement("div");if(null===(e=eK.parentElement)||void 0===e||e.appendChild(k),k.style.left="".concat(eK.offsetLeft,"px"),k.style.top="".concat(eK.offsetTop,"px"),k.style.position=g,k.style.height="".concat(eK.offsetHeight,"px"),k.style.width="".concat(eK.offsetWidth,"px"),eK.style.left="0",eK.style.top="0",eK.style.right="auto",eK.style.bottom="auto",eK.style.overflow="hidden",Array.isArray(i))n={x:i[0],y:i[1],width:0,height:0};else{var C=i.getBoundingClientRect();n={x:C.x,y:C.y,width:C.width,height:C.height}}var A=eK.getBoundingClientRect(),I=d.documentElement,_=I.clientWidth,M=I.clientHeight,B=I.scrollWidth,Z=I.scrollHeight,U=I.scrollTop,z=I.scrollLeft,H=A.height,G=A.width,W=n.height,$=n.width,V=O.htmlRegion,q="visible",Y="visibleFirst";"scroll"!==V&&V!==Y&&(V=q);var K=V===Y,X=P({left:-z,top:-U,right:B-z,bottom:Z-U},w),Q=P({left:0,top:0,right:_,bottom:M},w),J=V===q?Q:X,ee=K?Q:J;eK.style.left="auto",eK.style.top="auto",eK.style.right="0",eK.style.bottom="0";var et=eK.getBoundingClientRect();eK.style.left=h,eK.style.top=b,eK.style.right=v,eK.style.bottom=E,eK.style.overflow=x,null===(t=eK.parentElement)||void 0===t||t.removeChild(k);var en=R(Math.round(G/parseFloat(f)*1e3)/1e3),er=R(Math.round(H/parseFloat(m)*1e3)/1e3);if(!(0===en||0===er||(0,u.S)(i)&&!(0,T.Z)(i))){var eo=O.offset,ea=O.targetOffset,ei=L(A,eo),el=(0,o.Z)(ei,2),es=el[0],ec=el[1],eu=L(n,ea),ed=(0,o.Z)(eu,2),ep=ed[0],ef=ed[1];n.x-=ep,n.y-=ef;var em=O.points||[],eg=(0,o.Z)(em,2),eh=eg[0],eb=D(eg[1]),ev=D(eh),eE=j(n,eb),ex=j(A,ev),eO=(0,r.Z)({},O),ek=eE.x-ex.x+es,eC=eE.y-ex.y+ec,eT=tt(ek,eC),eA=tt(ek,eC,Q),eI=j(n,["t","l"]),eR=j(A,["t","l"]),e_=j(n,["b","r"]),eP=j(A,["b","r"]),eM=O.overflow||{},eL=eM.adjustX,eD=eM.adjustY,ej=eM.shiftX,eF=eM.shiftY,eB=function(e){return"boolean"==typeof e?e:e>=0};tn();var eZ=eB(eD),eU=ev[0]===eb[0];if(eZ&&"t"===ev[0]&&(l>ee.bottom||S.current.bt)){var ez=eC;eU?ez-=H-W:ez=eI.y-eP.y-ec;var eH=tt(ek,ez),eG=tt(ek,ez,Q);eH>eT||eH===eT&&(!K||eG>=eA)?(S.current.bt=!0,eC=ez,ec=-ec,eO.points=[F(ev,0),F(eb,0)]):S.current.bt=!1}if(eZ&&"b"===ev[0]&&(aeT||e$===eT&&(!K||eV>=eA)?(S.current.tb=!0,eC=eW,ec=-ec,eO.points=[F(ev,0),F(eb,0)]):S.current.tb=!1}var eq=eB(eL),eY=ev[1]===eb[1];if(eq&&"l"===ev[1]&&(c>ee.right||S.current.rl)){var eX=ek;eY?eX-=G-$:eX=eI.x-eP.x-es;var eQ=tt(eX,eC),eJ=tt(eX,eC,Q);eQ>eT||eQ===eT&&(!K||eJ>=eA)?(S.current.rl=!0,ek=eX,es=-es,eO.points=[F(ev,1),F(eb,1)]):S.current.rl=!1}if(eq&&"r"===ev[1]&&(seT||e1===eT&&(!K||e2>=eA)?(S.current.lr=!0,ek=e0,es=-es,eO.points=[F(ev,1),F(eb,1)]):S.current.lr=!1}tn();var e4=!0===ej?0:ej;"number"==typeof e4&&(sQ.right&&(ek-=c-Q.right-es,n.x>Q.right-e4&&(ek+=n.x-Q.right+e4)));var e3=!0===eF?0:eF;"number"==typeof e3&&(aQ.bottom&&(eC-=l-Q.bottom-ec,n.y>Q.bottom-e3&&(eC+=n.y-Q.bottom+e3)));var e6=A.x+ek,e5=A.y+eC,e8=n.x,e9=n.y;null==eN||eN(eK,eO);var e7=et.right-A.x-(ek+A.width),te=et.bottom-A.y-(eC+A.height);y({ready:!0,offsetX:ek/en,offsetY:eC/er,offsetR:e7/en,offsetB:te/er,arrowX:((Math.max(e6,e8)+Math.min(e6+G,e8+$))/2-e6)/en,arrowY:((Math.max(e5,e9)+Math.min(e5+H,e9+W))/2-e5)/er,scaleX:en,scaleY:er,align:eO})}function tt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:J,r=A.x+e,o=A.y+t,a=Math.max(r,n.left),i=Math.max(o,n.top);return Math.max(0,(Math.min(r+G,n.right)-a)*(Math.min(o+H,n.bottom)-i))}function tn(){l=(a=A.y+eC)+H,c=(s=A.x+ek)+G}}}),M=function(){y(function(e){return(0,r.Z)((0,r.Z)({},e),{},{ready:!1})})},(0,m.Z)(M,[ey]),(0,m.Z)(function(){ta||M()},[ta]),[v.ready,v.offsetX,v.offsetY,v.offsetR,v.offsetB,v.arrowX,v.arrowY,v.scaleX,v.scaleY,v.align,function(){E.current+=1;var e=E.current;Promise.resolve().then(function(){E.current===e&&_()})}]),tT=(0,o.Z)(tC,11),tA=tT[0],tN=tT[1],tI=tT[2],tR=tT[3],t_=tT[4],tP=tT[5],tM=tT[6],tL=tT[7],tD=tT[8],tj=tT[9],tF=tT[10],tB=(z=void 0===Q?"hover":Q,h.useMemo(function(){var e=C(null!=J?J:z),t=C(null!=ee?ee:z),n=new Set(e),r=new Set(t);return ez&&(n.has("hover")&&(n.delete("hover"),n.add("click")),r.has("hover")&&(r.delete("hover"),r.add("click"))),[n,r]},[ez,z,J,ee])),tZ=(0,o.Z)(tB,2),tU=tZ[0],tz=tZ[1],tH=tU.has("click"),tG=tz.has("click")||tz.has("contextMenu"),tW=(0,p.Z)(function(){tg||tF()});H=function(){tl.current&&eT&&tG&&tp(!1)},(0,m.Z)(function(){if(ta&&e1&&eK){var e=I(e1),t=I(eK),n=N(eK),r=new Set([n].concat((0,B.Z)(e),(0,B.Z)(t)));function o(){tW(),H()}return r.forEach(function(e){e.addEventListener("scroll",o,{passive:!0})}),n.addEventListener("resize",o,{passive:!0}),tW(),function(){r.forEach(function(e){e.removeEventListener("scroll",o),n.removeEventListener("resize",o)})}}},[ta,e1,eK]),(0,m.Z)(function(){tW()},[tx,ey]),(0,m.Z)(function(){ta&&!(null!=ew&&ew[ey])&&tW()},[JSON.stringify(eS)]);var t$=h.useMemo(function(){var e=function(e,t,n,r){for(var o=n.points,a=Object.keys(e),i=0;i0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}(null===(l=e[s])||void 0===l?void 0:l.points,o,r))return"".concat(t,"-placement-").concat(s)}return""}(ew,K,tj,eT);return s()(e,null==ek?void 0:ek(tj))},[tj,ek,ew,K,eT]);h.useImperativeHandle(n,function(){return{nativeElement:e4.current,forceAlign:tW}});var tV=h.useState(0),tq=(0,o.Z)(tV,2),tY=tq[0],tK=tq[1],tX=h.useState(0),tQ=(0,o.Z)(tX,2),tJ=tQ[0],t0=tQ[1],t1=function(){if(eO&&e1){var e=e1.getBoundingClientRect();tK(e.width),t0(e.height)}};function t2(e,t,n,r){e8[e]=function(o){var a;null==r||r(o),tp(t,n);for(var i=arguments.length,l=Array(i>1?i-1:0),s=1;s1?n-1:0),o=1;o1?n-1:0),o=1;o{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"}),o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"}))}},8903:function(e,t,n){n.d(t,{Z:function(){return a}});var r=n(69703),o=n(64090);let a=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"}),o.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"}))}},57750:function(e,t,n){n.d(t,{Z:function(){return eg}});var r=n(69703),o=n(64090),a=n(26587),i=n(65558),l=n(75504),s=n(30638),c=n(80509),u=n.n(c),d=n(5037),p=n.n(d),f=n(71292),m=n.n(f),g=n(96240),h=n.n(g),b=n(93574),v=n.n(b),y=n(72996),E=n(84487),w=n(7986),S=n(71594),x=n(68139),O=n(20757),k=n(9586),C=n(765),T=["layout","type","stroke","connectNulls","isRange","ref"];function A(e){return(A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function N(){return(N=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(a,T));return o.createElement(w.m,{clipPath:n?"url(#clipPath-".concat(r,")"):null},o.createElement(y.H,N({},(0,C.L6)(d,!0),{points:e,connectNulls:c,type:l,baseLine:t,layout:i,stroke:"none",className:"recharts-area-area"})),"none"!==s&&o.createElement(y.H,N({},(0,C.L6)(this.props,!1),{className:"recharts-area-curve",layout:i,type:l,connectNulls:c,fill:"none",points:e})),"none"!==s&&u&&o.createElement(y.H,N({},(0,C.L6)(this.props,!1),{className:"recharts-area-curve",layout:i,type:l,connectNulls:c,fill:"none",points:t})))}},{key:"renderAreaWithAnimation",value:function(e,t){var n=this,r=this.props,a=r.points,i=r.baseLine,l=r.isAnimationActive,c=r.animationBegin,u=r.animationDuration,d=r.animationEasing,p=r.animationId,f=this.state,g=f.prevPoints,b=f.prevBaseLine;return o.createElement(s.ZP,{begin:c,duration:u,isActive:l,easing:d,from:{t:0},to:{t:1},key:"area-".concat(p),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(r){var l=r.t;if(g){var s,c=g.length/a.length,u=a.map(function(e,t){var n=Math.floor(t*c);if(g[n]){var r=g[n],o=(0,O.k4)(r.x,e.x),a=(0,O.k4)(r.y,e.y);return R(R({},e),{},{x:o(l),y:a(l)})}return e});return s=(0,O.hj)(i)&&"number"==typeof i?(0,O.k4)(b,i)(l):m()(i)||h()(i)?(0,O.k4)(b,0)(l):i.map(function(e,t){var n=Math.floor(t*c);if(b[n]){var r=b[n],o=(0,O.k4)(r.x,e.x),a=(0,O.k4)(r.y,e.y);return R(R({},e),{},{x:o(l),y:a(l)})}return e}),n.renderAreaStatically(u,s,e,t)}return o.createElement(w.m,null,o.createElement("defs",null,o.createElement("clipPath",{id:"animationClipPath-".concat(t)},n.renderClipRect(l))),o.createElement(w.m,{clipPath:"url(#animationClipPath-".concat(t,")")},n.renderAreaStatically(a,i,e,t)))})}},{key:"renderArea",value:function(e,t){var n=this.props,r=n.points,o=n.baseLine,a=n.isAnimationActive,i=this.state,l=i.prevPoints,s=i.prevBaseLine,c=i.totalLength;return a&&r&&r.length&&(!l&&c>0||!v()(l,r)||!v()(s,o))?this.renderAreaWithAnimation(e,t):this.renderAreaStatically(r,o,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,r=t.dot,a=t.points,i=t.className,s=t.top,c=t.left,u=t.xAxis,d=t.yAxis,p=t.width,f=t.height,g=t.isAnimationActive,h=t.id;if(n||!a||!a.length)return null;var b=this.state.isAnimationFinished,v=1===a.length,y=(0,l.Z)("recharts-area",i),E=u&&u.allowDataOverflow,x=d&&d.allowDataOverflow,O=E||x,k=m()(h)?this.id:h,T=null!==(e=(0,C.L6)(r,!1))&&void 0!==e?e:{r:3,strokeWidth:2},A=T.r,N=T.strokeWidth,I=((0,C.$k)(r)?r:{}).clipDot,R=void 0===I||I,_=2*(void 0===A?3:A)+(void 0===N?2:N);return o.createElement(w.m,{className:y},E||x?o.createElement("defs",null,o.createElement("clipPath",{id:"clipPath-".concat(k)},o.createElement("rect",{x:E?c:c-p/2,y:x?s:s-f/2,width:E?p:2*p,height:x?f:2*f})),!R&&o.createElement("clipPath",{id:"clipPath-dots-".concat(k)},o.createElement("rect",{x:c-_/2,y:s-_/2,width:p+_,height:f+_}))):null,v?null:this.renderArea(O,k),(r||v)&&this.renderDots(O,R,k),(!g||b)&&S.e.renderCallByParent(this.props,a))}}],r=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,curBaseLine:e.baseLine,prevPoints:t.curPoints,prevBaseLine:t.curBaseLine}:e.points!==t.curPoints||e.baseLine!==t.curBaseLine?{curPoints:e.points,curBaseLine:e.baseLine}:null}}],n&&_(i.prototype,n),r&&_(i,r),Object.defineProperty(i,"prototype",{writable:!1}),i}(o.PureComponent);D(F,"displayName","Area"),D(F,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!x.x.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"}),D(F,"getBaseValue",function(e,t,n,r){var o=e.layout,a=e.baseValue,i=t.props.baseValue,l=null!=i?i:a;if((0,O.hj)(l)&&"number"==typeof l)return l;var s="horizontal"===o?r:n,c=s.scale.domain();if("number"===s.type){var u=Math.max(c[0],c[1]),d=Math.min(c[0],c[1]);return"dataMin"===l?d:"dataMax"===l?u:u<0?u:Math.max(Math.min(c[0],c[1]),0)}return"dataMin"===l?c[0]:"dataMax"===l?c[1]:c[0]}),D(F,"getComposedData",function(e){var t,n=e.props,r=e.item,o=e.xAxis,a=e.yAxis,i=e.xAxisTicks,l=e.yAxisTicks,s=e.bandSize,c=e.dataKey,u=e.stackedData,d=e.dataStartIndex,p=e.displayedData,f=e.offset,m=n.layout,g=u&&u.length,h=F.getBaseValue(n,r,o,a),b="horizontal"===m,v=!1,y=p.map(function(e,t){g?n=u[d+t]:Array.isArray(n=(0,k.F$)(e,c))?v=!0:n=[h,n];var n,r=null==n[1]||g&&null==(0,k.F$)(e,c);return b?{x:(0,k.Hv)({axis:o,ticks:i,bandSize:s,entry:e,index:t}),y:r?null:a.scale(n[1]),value:n,payload:e}:{x:r?null:o.scale(n[1]),y:(0,k.Hv)({axis:a,ticks:l,bandSize:s,entry:e,index:t}),value:n,payload:e}});return t=g||v?y.map(function(e){var t=Array.isArray(e.value)?e.value[0]:null;return b?{x:e.x,y:null!=t&&null!=e.y?a.scale(t):null}:{x:null!=t?o.scale(t):null,y:e.y}}):b?a.scale(h):o.scale(h),R({points:y,baseLine:t,layout:m,isRange:v},f)}),D(F,"renderDotItem",function(e,t){return o.isValidElement(e)?o.cloneElement(e,t):u()(e)?e(t):o.createElement(E.o,N({},t,{className:"recharts-area-dot"}))});var B=n(23356),Z=n(22983),U=n(12627),z=(0,i.z)({chartName:"AreaChart",GraphicalChild:F,axisComponents:[{axisType:"xAxis",AxisComp:B.K},{axisType:"yAxis",AxisComp:Z.B}],formatAxisMap:U.t9}),H=n(38333),G=n(10166),W=n(94866),$=n(99355),V=["type","layout","connectNulls","ref"];function q(e){return(q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Y(){return(Y=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);na){s=[].concat(Q(r.slice(0,c)),[a-u]);break}var d=s.length%2==0?[0,l]:[l];return[].concat(Q(i.repeat(r,Math.floor(t/o))),Q(s),d).map(function(e){return"".concat(e,"px")}).join(", ")}),eo(en(e),"id",(0,O.EL)("recharts-line-")),eo(en(e),"pathRef",function(t){e.mainCurve=t}),eo(en(e),"handleAnimationEnd",function(){e.setState({isAnimationFinished:!0}),e.props.onAnimationEnd&&e.props.onAnimationEnd()}),eo(en(e),"handleAnimationStart",function(){e.setState({isAnimationFinished:!1}),e.props.onAnimationStart&&e.props.onAnimationStart()}),e}return n=[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();this.setState({totalLength:e})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();e!==this.state.totalLength&&this.setState({totalLength:e})}}},{key:"getTotalLength",value:function(){var e=this.mainCurve;try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch(e){return 0}}},{key:"renderErrorBar",value:function(e,t){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var n=this.props,r=n.points,a=n.xAxis,i=n.yAxis,l=n.layout,s=n.children,c=(0,C.NN)(s,$.W);if(!c)return null;var u=function(e,t){return{x:e.x,y:e.y,value:e.value,errorVal:(0,k.F$)(e.payload,t)}};return o.createElement(w.m,{clipPath:e?"url(#clipPath-".concat(t,")"):null},c.map(function(e){return o.cloneElement(e,{key:"bar-".concat(e.props.dataKey),data:r,xAxis:a,yAxis:i,layout:l,dataPointFormatter:u})}))}},{key:"renderDots",value:function(e,t,n){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var r=this.props,a=r.dot,l=r.points,s=r.dataKey,c=(0,C.L6)(this.props,!1),u=(0,C.L6)(a,!0),d=l.map(function(e,t){var n=X(X(X({key:"dot-".concat(t),r:3},c),u),{},{value:e.value,dataKey:s,cx:e.x,cy:e.y,index:t,payload:e.payload});return i.renderDotItem(a,n)}),p={clipPath:e?"url(#clipPath-".concat(t?"":"dots-").concat(n,")"):null};return o.createElement(w.m,Y({className:"recharts-line-dots",key:"dots"},p),d)}},{key:"renderCurveStatically",value:function(e,t,n,r){var a=this.props,i=a.type,l=a.layout,s=a.connectNulls,c=(a.ref,function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(a,V)),u=X(X(X({},(0,C.L6)(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:t?"url(#clipPath-".concat(n,")"):null,points:e},r),{},{type:i,layout:l,connectNulls:s});return o.createElement(y.H,Y({},u,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(e,t){var n=this,r=this.props,a=r.points,i=r.strokeDasharray,l=r.isAnimationActive,c=r.animationBegin,u=r.animationDuration,d=r.animationEasing,p=r.animationId,f=r.animateNewValues,m=r.width,g=r.height,h=this.state,b=h.prevPoints,v=h.totalLength;return o.createElement(s.ZP,{begin:c,duration:u,isActive:l,easing:d,from:{t:0},to:{t:1},key:"line-".concat(p),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(r){var o,l=r.t;if(b){var s=b.length/a.length,c=a.map(function(e,t){var n=Math.floor(t*s);if(b[n]){var r=b[n],o=(0,O.k4)(r.x,e.x),a=(0,O.k4)(r.y,e.y);return X(X({},e),{},{x:o(l),y:a(l)})}if(f){var i=(0,O.k4)(2*m,e.x),c=(0,O.k4)(g/2,e.y);return X(X({},e),{},{x:i(l),y:c(l)})}return X(X({},e),{},{x:e.x,y:e.y})});return n.renderCurveStatically(c,e,t)}var u=(0,O.k4)(0,v)(l);if(i){var d="".concat(i).split(/[,\s]+/gim).map(function(e){return parseFloat(e)});o=n.getStrokeDasharray(u,v,d)}else o=n.generateSimpleStrokeDasharray(v,u);return n.renderCurveStatically(a,e,t,{strokeDasharray:o})})}},{key:"renderCurve",value:function(e,t){var n=this.props,r=n.points,o=n.isAnimationActive,a=this.state,i=a.prevPoints,l=a.totalLength;return o&&r&&r.length&&(!i&&l>0||!v()(i,r))?this.renderCurveWithAnimation(e,t):this.renderCurveStatically(r,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,r=t.dot,a=t.points,i=t.className,s=t.xAxis,c=t.yAxis,u=t.top,d=t.left,p=t.width,f=t.height,g=t.isAnimationActive,h=t.id;if(n||!a||!a.length)return null;var b=this.state.isAnimationFinished,v=1===a.length,y=(0,l.Z)("recharts-line",i),E=s&&s.allowDataOverflow,x=c&&c.allowDataOverflow,O=E||x,k=m()(h)?this.id:h,T=null!==(e=(0,C.L6)(r,!1))&&void 0!==e?e:{r:3,strokeWidth:2},A=T.r,N=T.strokeWidth,I=((0,C.$k)(r)?r:{}).clipDot,R=void 0===I||I,_=2*(void 0===A?3:A)+(void 0===N?2:N);return o.createElement(w.m,{className:y},E||x?o.createElement("defs",null,o.createElement("clipPath",{id:"clipPath-".concat(k)},o.createElement("rect",{x:E?d:d-p/2,y:x?u:u-f/2,width:E?p:2*p,height:x?f:2*f})),!R&&o.createElement("clipPath",{id:"clipPath-dots-".concat(k)},o.createElement("rect",{x:d-_/2,y:u-_/2,width:p+_,height:f+_}))):null,!v&&this.renderCurve(O,k),this.renderErrorBar(O,k),(v||r)&&this.renderDots(O,R,k),(!g||b)&&S.e.renderCallByParent(this.props,a))}}],r=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,prevPoints:t.curPoints}:e.points!==t.curPoints?{curPoints:e.points}:null}},{key:"repeat",value:function(e,t){for(var n=e.length%2!=0?[].concat(Q(e),[0]):e,r=[],o=0;o{let{data:n=[],categories:i=[],index:l,stack:s=!1,colors:c=ep.s,valueFormatter:u=em.Cj,startEndOnly:d=!1,showXAxis:p=!0,showYAxis:f=!0,yAxisWidth:m=56,intervalType:g="equidistantPreserveStart",showAnimation:h=!1,animationDuration:b=900,showTooltip:v=!0,showLegend:y=!0,showGridLines:w=!0,showGradient:S=!0,autoMinValue:x=!1,curveType:O="linear",minValue:k,maxValue:C,connectNulls:T=!1,allowDecimals:A=!0,noDataText:N,className:I,onValueChange:R,enableLegendSlider:_=!1,customTooltip:P,rotateLabelX:M,tickGap:L=5}=e,D=(0,r._T)(e,["data","categories","index","stack","colors","valueFormatter","startEndOnly","showXAxis","showYAxis","yAxisWidth","intervalType","showAnimation","animationDuration","showTooltip","showLegend","showGridLines","showGradient","autoMinValue","curveType","minValue","maxValue","connectNulls","allowDecimals","noDataText","className","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","tickGap"]),j=(p||f)&&(!d||f)?20:0,[U,$]=(0,o.useState)(60),[V,q]=(0,o.useState)(void 0),[Y,K]=(0,o.useState)(void 0),X=(0,eu.me)(i,c),Q=(0,eu.i4)(x,k,C),J=!!R;function ee(e){J&&(e===Y&&!V||(0,eu.FB)(n,e)&&V&&V.dataKey===e?(K(void 0),null==R||R(null)):(K(e),null==R||R({eventType:"category",categoryClicked:e})),q(void 0))}return o.createElement("div",Object.assign({ref:t,className:(0,ef.q)("w-full h-80",I)},D),o.createElement(a.h,{className:"h-full w-full"},(null==n?void 0:n.length)?o.createElement(z,{data:n,onClick:J&&(Y||V)?()=>{q(void 0),K(void 0),null==R||R(null)}:void 0},w?o.createElement(H.q,{className:(0,ef.q)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:!0,vertical:!1}):null,o.createElement(B.K,{padding:{left:j,right:j},hide:!p,dataKey:l,tick:{transform:"translate(0, 6)"},ticks:d?[n[0][l],n[n.length-1][l]]:void 0,fill:"",stroke:"",className:(0,ef.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),interval:d?"preserveStartEnd":g,tickLine:!1,axisLine:!1,minTickGap:L,angle:null==M?void 0:M.angle,dy:null==M?void 0:M.verticalShift,height:null==M?void 0:M.xAxisHeight}),o.createElement(Z.B,{width:m,hide:!f,axisLine:!1,tickLine:!1,type:"number",domain:Q,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,ef.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:u,allowDecimals:A}),o.createElement(G.u,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{stroke:"#d1d5db",strokeWidth:1},content:v?e=>{let{active:t,payload:n,label:r}=e;return P?o.createElement(P,{payload:null==n?void 0:n.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!==(t=X.get(e.dataKey))&&void 0!==t?t:ed.fr.Gray})}),active:t,label:r}):o.createElement(es.ZP,{active:t,payload:n,label:r,valueFormatter:u,categoryColors:X})}:o.createElement(o.Fragment,null),position:{y:0}}),y?o.createElement(W.D,{verticalAlign:"top",height:U,content:e=>{let{payload:t}=e;return(0,el.Z)({payload:t},X,$,Y,J?e=>ee(e):void 0,_)}}):null,i.map(e=>{var t,n;return o.createElement("defs",{key:e},S?o.createElement("linearGradient",{className:(0,em.bM)(null!==(t=X.get(e))&&void 0!==t?t:ed.fr.Gray,ep.K.text).textColor,id:X.get(e),x1:"0",y1:"0",x2:"0",y2:"1"},o.createElement("stop",{offset:"5%",stopColor:"currentColor",stopOpacity:V||Y&&Y!==e?.15:.4}),o.createElement("stop",{offset:"95%",stopColor:"currentColor",stopOpacity:0})):o.createElement("linearGradient",{className:(0,em.bM)(null!==(n=X.get(e))&&void 0!==n?n:ed.fr.Gray,ep.K.text).textColor,id:X.get(e),x1:"0",y1:"0",x2:"0",y2:"1"},o.createElement("stop",{stopColor:"currentColor",stopOpacity:V||Y&&Y!==e?.1:.3})))}),i.map(e=>{var t;return o.createElement(F,{className:(0,em.bM)(null!==(t=X.get(e))&&void 0!==t?t:ed.fr.Gray,ep.K.text).strokeColor,strokeOpacity:V||Y&&Y!==e?.3:1,activeDot:e=>{var t;let{cx:r,cy:a,stroke:i,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,dataKey:u}=e;return o.createElement(E.o,{className:(0,ef.q)("stroke-tremor-background dark:stroke-dark-tremor-background",R?"cursor-pointer":"",(0,em.bM)(null!==(t=X.get(u))&&void 0!==t?t:ed.fr.Gray,ep.K.text).fillColor),cx:r,cy:a,r:5,fill:"",stroke:i,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,onClick:(t,r)=>{r.stopPropagation(),J&&(e.index===(null==V?void 0:V.index)&&e.dataKey===(null==V?void 0:V.dataKey)||(0,eu.FB)(n,e.dataKey)&&Y&&Y===e.dataKey?(K(void 0),q(void 0),null==R||R(null)):(K(e.dataKey),q({index:e.index,dataKey:e.dataKey}),null==R||R(Object.assign({eventType:"dot",categoryClicked:e.dataKey},e.payload))))}})},dot:t=>{var r;let{stroke:a,strokeLinecap:i,strokeLinejoin:l,strokeWidth:s,cx:c,cy:u,dataKey:d,index:p}=t;return(0,eu.FB)(n,e)&&!(V||Y&&Y!==e)||(null==V?void 0:V.index)===p&&(null==V?void 0:V.dataKey)===e?o.createElement(E.o,{key:p,cx:c,cy:u,r:5,stroke:a,fill:"",strokeLinecap:i,strokeLinejoin:l,strokeWidth:s,className:(0,ef.q)("stroke-tremor-background dark:stroke-dark-tremor-background",R?"cursor-pointer":"",(0,em.bM)(null!==(r=X.get(d))&&void 0!==r?r:ed.fr.Gray,ep.K.text).fillColor)}):o.createElement(o.Fragment,{key:p})},key:e,name:e,type:O,dataKey:e,stroke:"",fill:"url(#".concat(X.get(e),")"),strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:h,animationDuration:b,stackId:s?"a":void 0,connectNulls:T})}),R?i.map(e=>o.createElement(ei,{className:(0,ef.q)("cursor-pointer"),strokeOpacity:0,key:e,name:e,type:O,dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:T,onClick:(e,t)=>{t.stopPropagation();let{name:n}=e;ee(n)}})):null):o.createElement(ec.Z,{noDataText:N})))});eg.displayName="AreaChart"},44041:function(e,t,n){n.d(t,{Z:function(){return x}});var r=n(69703),o=n(54942),a=n(2898),i=n(99250),l=n(65492),s=n(64090),c=n(26587),u=n(65558),d=n(28485),p=n(23356),f=n(22983),m=n(12627),g=(0,u.z)({chartName:"BarChart",GraphicalChild:d.$,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:p.K},{axisType:"yAxis",AxisComp:f.B}],formatAxisMap:m.t9}),h=n(38333),b=n(10166),v=n(94866),y=n(17280),E=n(30470),w=n(77448),S=n(36342);let x=s.forwardRef((e,t)=>{let{data:n=[],categories:u=[],index:m,colors:x=a.s,valueFormatter:O=l.Cj,layout:k="horizontal",stack:C=!1,relative:T=!1,startEndOnly:A=!1,animationDuration:N=900,showAnimation:I=!1,showXAxis:R=!0,showYAxis:_=!0,yAxisWidth:P=56,intervalType:M="equidistantPreserveStart",showTooltip:L=!0,showLegend:D=!0,showGridLines:j=!0,autoMinValue:F=!1,minValue:B,maxValue:Z,allowDecimals:U=!0,noDataText:z,onValueChange:H,enableLegendSlider:G=!1,customTooltip:W,rotateLabelX:$,tickGap:V=5,className:q}=e,Y=(0,r._T)(e,["data","categories","index","colors","valueFormatter","layout","stack","relative","startEndOnly","animationDuration","showAnimation","showXAxis","showYAxis","yAxisWidth","intervalType","showTooltip","showLegend","showGridLines","autoMinValue","minValue","maxValue","allowDecimals","noDataText","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","tickGap","className"]),K=R||_?20:0,[X,Q]=(0,s.useState)(60),J=(0,S.me)(u,x),[ee,et]=s.useState(void 0),[en,er]=(0,s.useState)(void 0),eo=!!H;function ea(e,t,n){var r,o,a,i;n.stopPropagation(),H&&((0,S.vZ)(ee,Object.assign(Object.assign({},e.payload),{value:e.value}))?(er(void 0),et(void 0),null==H||H(null)):(er(null===(o=null===(r=e.tooltipPayload)||void 0===r?void 0:r[0])||void 0===o?void 0:o.dataKey),et(Object.assign(Object.assign({},e.payload),{value:e.value})),null==H||H(Object.assign({eventType:"bar",categoryClicked:null===(i=null===(a=e.tooltipPayload)||void 0===a?void 0:a[0])||void 0===i?void 0:i.dataKey},e.payload))))}let ei=(0,S.i4)(F,B,Z);return s.createElement("div",Object.assign({ref:t,className:(0,i.q)("w-full h-80",q)},Y),s.createElement(c.h,{className:"h-full w-full"},(null==n?void 0:n.length)?s.createElement(g,{data:n,stackOffset:C?"sign":T?"expand":"none",layout:"vertical"===k?"vertical":"horizontal",onClick:eo&&(en||ee)?()=>{et(void 0),er(void 0),null==H||H(null)}:void 0},j?s.createElement(h.q,{className:(0,i.q)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:"vertical"!==k,vertical:"vertical"===k}):null,"vertical"!==k?s.createElement(p.K,{padding:{left:K,right:K},hide:!R,dataKey:m,interval:A?"preserveStartEnd":M,tick:{transform:"translate(0, 6)"},ticks:A?[n[0][m],n[n.length-1][m]]:void 0,fill:"",stroke:"",className:(0,i.q)("mt-4 text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,angle:null==$?void 0:$.angle,dy:null==$?void 0:$.verticalShift,height:null==$?void 0:$.xAxisHeight,minTickGap:V}):s.createElement(p.K,{hide:!R,type:"number",tick:{transform:"translate(-3, 0)"},domain:ei,fill:"",stroke:"",className:(0,i.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,tickFormatter:O,minTickGap:V,allowDecimals:U,angle:null==$?void 0:$.angle,dy:null==$?void 0:$.verticalShift,height:null==$?void 0:$.xAxisHeight}),"vertical"!==k?s.createElement(f.B,{width:P,hide:!_,axisLine:!1,tickLine:!1,type:"number",domain:ei,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,i.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:T?e=>"".concat((100*e).toString()," %"):O,allowDecimals:U}):s.createElement(f.B,{width:P,hide:!_,dataKey:m,axisLine:!1,tickLine:!1,ticks:A?[n[0][m],n[n.length-1][m]]:void 0,type:"category",interval:"preserveStartEnd",tick:{transform:"translate(0, 6)"},fill:"",stroke:"",className:(0,i.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content")}),s.createElement(b.u,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{fill:"#d1d5db",opacity:"0.15"},content:L?e=>{let{active:t,payload:n,label:r}=e;return W?s.createElement(W,{payload:null==n?void 0:n.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!==(t=J.get(e.dataKey))&&void 0!==t?t:o.fr.Gray})}),active:t,label:r}):s.createElement(E.ZP,{active:t,payload:n,label:r,valueFormatter:O,categoryColors:J})}:s.createElement(s.Fragment,null),position:{y:0}}),D?s.createElement(v.D,{verticalAlign:"top",height:X,content:e=>{let{payload:t}=e;return(0,y.Z)({payload:t},J,Q,en,eo?e=>{eo&&(e!==en||ee?(er(e),null==H||H({eventType:"category",categoryClicked:e})):(er(void 0),null==H||H(null)),et(void 0))}:void 0,G)}}):null,u.map(e=>{var t;return s.createElement(d.$,{className:(0,i.q)((0,l.bM)(null!==(t=J.get(e))&&void 0!==t?t:o.fr.Gray,a.K.background).fillColor,H?"cursor-pointer":""),key:e,name:e,type:"linear",stackId:C||T?"a":void 0,dataKey:e,fill:"",isAnimationActive:I,animationDuration:N,shape:e=>((e,t,n,r)=>{let{fillOpacity:o,name:a,payload:i,value:l}=e,{x:c,width:u,y:d,height:p}=e;return"horizontal"===r&&p<0?(d+=p,p=Math.abs(p)):"vertical"===r&&u<0&&(c+=u,u=Math.abs(u)),s.createElement("rect",{x:c,y:d,width:u,height:p,opacity:t||n&&n!==a?(0,S.vZ)(t,Object.assign(Object.assign({},i),{value:l}))?o:.3:o})})(e,ee,en,k),onClick:ea})})):s.createElement(w.Z,{noDataText:z})))});x.displayName="BarChart"},17280:function(e,t,n){n.d(t,{Z:function(){return g}});var r=n(64090);let o=(e,t)=>{let[n,o]=(0,r.useState)(t);(0,r.useEffect)(()=>{let t=()=>{o(window.innerWidth),e()};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[e,n])};var a=n(69703),i=n(2898),l=n(99250),s=n(65492);let c=e=>{var t=(0,a._T)(e,[]);return r.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),r.createElement("path",{d:"M8 12L14 6V18L8 12Z"}))},u=e=>{var t=(0,a._T)(e,[]);return r.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),r.createElement("path",{d:"M16 12L10 18V6L16 12Z"}))},d=(0,s.fn)("Legend"),p=e=>{let{name:t,color:n,onClick:o,activeLegend:a}=e,c=!!o;return r.createElement("li",{className:(0,l.q)(d("legendItem"),"group inline-flex items-center px-2 py-0.5 rounded-tremor-small transition whitespace-nowrap",c?"cursor-pointer":"cursor-default","text-tremor-content",c?"hover:bg-tremor-background-subtle":"","dark:text-dark-tremor-content",c?"dark:hover:bg-dark-tremor-background-subtle":""),onClick:e=>{e.stopPropagation(),null==o||o(t,n)}},r.createElement("svg",{className:(0,l.q)("flex-none h-2 w-2 mr-1.5",(0,s.bM)(n,i.K.text).textColor,a&&a!==t?"opacity-40":"opacity-100"),fill:"currentColor",viewBox:"0 0 8 8"},r.createElement("circle",{cx:4,cy:4,r:4})),r.createElement("p",{className:(0,l.q)("whitespace-nowrap truncate text-tremor-default","text-tremor-content",c?"group-hover:text-tremor-content-emphasis":"","dark:text-dark-tremor-content",a&&a!==t?"opacity-40":"opacity-100",c?"dark:group-hover:text-dark-tremor-content-emphasis":"")},t))},f=e=>{let{icon:t,onClick:n,disabled:o}=e,[a,i]=r.useState(!1),s=r.useRef(null);return r.useEffect(()=>(a?s.current=setInterval(()=>{null==n||n()},300):clearInterval(s.current),()=>clearInterval(s.current)),[a,n]),(0,r.useEffect)(()=>{o&&(clearInterval(s.current),i(!1))},[o]),r.createElement("button",{type:"button",className:(0,l.q)(d("legendSliderButton"),"w-5 group inline-flex items-center truncate rounded-tremor-small transition",o?"cursor-not-allowed":"cursor-pointer",o?"text-tremor-content-subtle":"text-tremor-content hover:text-tremor-content-emphasis hover:bg-tremor-background-subtle",o?"dark:text-dark-tremor-subtle":"dark:text-dark-tremor dark:hover:text-tremor-content-emphasis dark:hover:bg-dark-tremor-background-subtle"),disabled:o,onClick:e=>{e.stopPropagation(),null==n||n()},onMouseDown:e=>{e.stopPropagation(),i(!0)},onMouseUp:e=>{e.stopPropagation(),i(!1)}},r.createElement(t,{className:"w-full"}))},m=r.forwardRef((e,t)=>{var n,o;let{categories:s,colors:m=i.s,className:g,onClickLegendItem:h,activeLegend:b,enableLegendSlider:v=!1}=e,y=(0,a._T)(e,["categories","colors","className","onClickLegendItem","activeLegend","enableLegendSlider"]),E=r.useRef(null),[w,S]=r.useState(null),[x,O]=r.useState(null),k=r.useRef(null),C=(0,r.useCallback)(()=>{let e=null==E?void 0:E.current;e&&S({left:e.scrollLeft>0,right:e.scrollWidth-e.clientWidth>e.scrollLeft})},[S]),T=(0,r.useCallback)(e=>{var t;let n=null==E?void 0:E.current,r=null!==(t=null==n?void 0:n.clientWidth)&&void 0!==t?t:0;n&&v&&(n.scrollTo({left:"left"===e?n.scrollLeft-r:n.scrollLeft+r,behavior:"smooth"}),setTimeout(()=>{C()},400))},[v,C]);r.useEffect(()=>{let e=e=>{"ArrowLeft"===e?T("left"):"ArrowRight"===e&&T("right")};return x?(e(x),k.current=setInterval(()=>{e(x)},300)):clearInterval(k.current),()=>clearInterval(k.current)},[x,T]);let A=e=>{e.stopPropagation(),"ArrowLeft"!==e.key&&"ArrowRight"!==e.key||(e.preventDefault(),O(e.key))},N=e=>{e.stopPropagation(),O(null)};return r.useEffect(()=>{let e=null==E?void 0:E.current;return v&&(C(),null==e||e.addEventListener("keydown",A),null==e||e.addEventListener("keyup",N)),()=>{null==e||e.removeEventListener("keydown",A),null==e||e.removeEventListener("keyup",N)}},[C,v]),r.createElement("ol",Object.assign({ref:t,className:(0,l.q)(d("root"),"relative overflow-hidden",g)},y),r.createElement("div",{ref:E,tabIndex:0,className:(0,l.q)("h-full flex",v?(null==w?void 0:w.right)||(null==w?void 0:w.left)?"pl-4 pr-12 items-center overflow-auto snap-mandatory [&::-webkit-scrollbar]:hidden [scrollbar-width:none]":"":"flex-wrap")},s.map((e,t)=>r.createElement(p,{key:"item-".concat(t),name:e,color:m[t],onClick:h,activeLegend:b}))),v&&((null==w?void 0:w.right)||(null==w?void 0:w.left))?r.createElement(r.Fragment,null,r.createElement("div",{className:(0,l.q)("absolute top-0 bottom-0 left-0 w-4 bg-gradient-to-r from-white to-transparent pointer-events-none")}),r.createElement("div",{className:(0,l.q)("absolute top-0 bottom-0 right-10 w-4 bg-gradient-to-r from-transparent to-white pointer-events-none")}),r.createElement("div",{className:(0,l.q)("absolute flex top-0 pr-1 bottom-0 right-0 items-center justify-center h-full bg-tremor-background")},r.createElement(f,{icon:c,onClick:()=>{O(null),T("left")},disabled:!(null==w?void 0:w.left)}),r.createElement(f,{icon:u,onClick:()=>{O(null),T("right")},disabled:!(null==w?void 0:w.right)}))):null)});m.displayName="Legend";let g=(e,t,n,a,i,l)=>{let{payload:s}=e,c=(0,r.useRef)(null);o(()=>{var e,t;n((t=null===(e=c.current)||void 0===e?void 0:e.clientHeight)?Number(t)+20:60)});let u=s.filter(e=>"none"!==e.type);return r.createElement("div",{ref:c,className:"flex items-center justify-end"},r.createElement(m,{categories:u.map(e=>e.value),colors:u.map(e=>t.get(e.value)),onClickLegendItem:i,activeLegend:a,enableLegendSlider:l}))}},30470:function(e,t,n){n.d(t,{ZP:function(){return u}});var r=n(64090),o=n(54942),a=n(2898),i=n(99250),l=n(65492);let s=e=>{let{children:t}=e;return r.createElement("div",{className:(0,i.q)("rounded-tremor-default text-tremor-default border","bg-tremor-background shadow-tremor-dropdown border-tremor-border","dark:bg-dark-tremor-background dark:shadow-dark-tremor-dropdown dark:border-dark-tremor-border")},t)},c=e=>{let{value:t,name:n,color:o}=e;return r.createElement("div",{className:"flex items-center justify-between space-x-8"},r.createElement("div",{className:"flex items-center space-x-2"},r.createElement("span",{className:(0,i.q)("shrink-0 rounded-tremor-full border-2 h-3 w-3","border-tremor-background shadow-tremor-card","dark:border-dark-tremor-background dark:shadow-dark-tremor-card",(0,l.bM)(o,a.K.background).bgColor)}),r.createElement("p",{className:(0,i.q)("text-right whitespace-nowrap","text-tremor-content","dark:text-dark-tremor-content")},n)),r.createElement("p",{className:(0,i.q)("font-medium tabular-nums text-right whitespace-nowrap","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},t))},u=e=>{let{active:t,payload:n,label:a,categoryColors:l,valueFormatter:u}=e;if(t&&n){let e=n.filter(e=>"none"!==e.type);return r.createElement(s,null,r.createElement("div",{className:(0,i.q)("border-tremor-border border-b px-4 py-2","dark:border-dark-tremor-border")},r.createElement("p",{className:(0,i.q)("font-medium","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},a)),r.createElement("div",{className:(0,i.q)("px-4 py-2 space-y-1")},e.map((e,t)=>{var n;let{value:a,name:i}=e;return r.createElement(c,{key:"id-".concat(t),value:u(a),name:i,color:null!==(n=l.get(i))&&void 0!==n?n:o.fr.Blue})})))}return null}},77448:function(e,t,n){n.d(t,{Z:function(){return p}});var r=n(99250),o=n(64090),a=n(69703);let i=(0,n(65492).fn)("Flex"),l={start:"justify-start",end:"justify-end",center:"justify-center",between:"justify-between",around:"justify-around",evenly:"justify-evenly"},s={start:"items-start",end:"items-end",center:"items-center",baseline:"items-baseline",stretch:"items-stretch"},c={row:"flex-row",col:"flex-col","row-reverse":"flex-row-reverse","col-reverse":"flex-col-reverse"},u=o.forwardRef((e,t)=>{let{flexDirection:n="row",justifyContent:u="between",alignItems:d="center",children:p,className:f}=e,m=(0,a._T)(e,["flexDirection","justifyContent","alignItems","children","className"]);return o.createElement("div",Object.assign({ref:t,className:(0,r.q)(i("root"),"flex w-full",c[n],l[u],s[d],f)},m),p)});u.displayName="Flex";var d=n(71801);let p=e=>{let{noDataText:t="No data"}=e;return o.createElement(u,{alignItems:"center",justifyContent:"center",className:(0,r.q)("w-full h-full border border-dashed rounded-tremor-default","border-tremor-border","dark:border-dark-tremor-border")},o.createElement(d.Z,{className:(0,r.q)("text-tremor-content","dark:text-dark-tremor-content")},t))}},36342:function(e,t,n){n.d(t,{FB:function(){return a},i4:function(){return o},me:function(){return r},vZ:function(){return function e(t,n){if(t===n)return!0;if("object"!=typeof t||"object"!=typeof n||null===t||null===n)return!1;let r=Object.keys(t),o=Object.keys(n);if(r.length!==o.length)return!1;for(let a of r)if(!o.includes(a)||!e(t[a],n[a]))return!1;return!0}}});let r=(e,t)=>{let n=new Map;return e.forEach((e,r)=>{n.set(e,t[r])}),n},o=(e,t,n)=>[e?"auto":null!=t?t:0,null!=n?n:"auto"];function a(e,t){let n=[];for(let r of e)if(Object.prototype.hasOwnProperty.call(r,t)&&(n.push(r[t]),n.length>1))return!1;return!0}},5:function(e,t,n){n.d(t,{Z:function(){return f}});var r=n(69703),o=n(64090),a=n(58437),i=n(54942),l=n(2898),s=n(99250),c=n(65492);let u={xs:{paddingX:"px-2",paddingY:"py-0.5",fontSize:"text-xs"},sm:{paddingX:"px-2.5",paddingY:"py-0.5",fontSize:"text-sm"},md:{paddingX:"px-3",paddingY:"py-0.5",fontSize:"text-md"},lg:{paddingX:"px-3.5",paddingY:"py-0.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-1",fontSize:"text-xl"}},d={xs:{height:"h-4",width:"w-4"},sm:{height:"h-4",width:"w-4"},md:{height:"h-4",width:"w-4"},lg:{height:"h-5",width:"w-5"},xl:{height:"h-6",width:"w-6"}},p=(0,c.fn)("Badge"),f=o.forwardRef((e,t)=>{let{color:n,icon:f,size:m=i.u8.SM,tooltip:g,className:h,children:b}=e,v=(0,r._T)(e,["color","icon","size","tooltip","className","children"]),y=f||null,{tooltipProps:E,getReferenceProps:w}=(0,a.l)();return o.createElement("span",Object.assign({ref:(0,c.lq)([t,E.refs.setReference]),className:(0,s.q)(p("root"),"w-max flex-shrink-0 inline-flex justify-center items-center cursor-default rounded-tremor-full",n?(0,s.q)((0,c.bM)(n,l.K.background).bgColor,(0,c.bM)(n,l.K.text).textColor,"bg-opacity-20 dark:bg-opacity-25"):(0,s.q)("bg-tremor-brand-muted text-tremor-brand-emphasis","dark:bg-dark-tremor-brand-muted dark:text-dark-tremor-brand-emphasis"),u[m].paddingX,u[m].paddingY,u[m].fontSize,h)},w,v),o.createElement(a.Z,Object.assign({text:g},E)),y?o.createElement(y,{className:(0,s.q)(p("icon"),"shrink-0 -ml-1 mr-1.5",d[m].height,d[m].width)}):null,o.createElement("p",{className:(0,s.q)(p("text"),"text-sm whitespace-nowrap")},b))});f.displayName="Badge"},61244:function(e,t,n){n.d(t,{Z:function(){return g}});var r=n(69703),o=n(64090),a=n(58437),i=n(54942),l=n(99250),s=n(65492),c=n(2898);let u={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},d={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},p={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},f=(e,t)=>{switch(e){case"simple":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,s.bM)(t,c.K.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,l.q)((0,s.bM)(t,c.K.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}},m=(0,s.fn)("Icon"),g=o.forwardRef((e,t)=>{let{icon:n,variant:c="simple",tooltip:g,size:h=i.u8.SM,color:b,className:v}=e,y=(0,r._T)(e,["icon","variant","tooltip","size","color","className"]),E=f(c,b),{tooltipProps:w,getReferenceProps:S}=(0,a.l)();return o.createElement("span",Object.assign({ref:(0,s.lq)([t,w.refs.setReference]),className:(0,l.q)(m("root"),"inline-flex flex-shrink-0 items-center",E.bgColor,E.textColor,E.borderColor,E.ringColor,p[c].rounded,p[c].border,p[c].shadow,p[c].ring,u[h].paddingX,u[h].paddingY,v)},S,y),o.createElement(a.Z,Object.assign({text:g},w)),o.createElement(n,{className:(0,l.q)(m("icon"),"shrink-0",d[h].height,d[h].width)}))});g.displayName="Icon"},16450:function(e,t,n){n.d(t,{Z:function(){return A}});var r=n(69703),o=n(58437),a=n(64090),i=n(70444),l=n(89988),s=n(89542),c={disabled:!1},u=a.createContext(null),d="unmounted",p="exited",f="entering",m="entered",g="exiting",h=function(e){function t(t,n){r=e.call(this,t,n)||this;var r,o,a=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?a?(o=p,r.appearStatus=f):o=m:o=t.unmountOnExit||t.mountOnEnter?d:p,r.state={status:o},r.nextCallback=null,r}t.prototype=Object.create(e.prototype),t.prototype.constructor=t,(0,l.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===d?{status:p}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==f&&n!==m&&(t=f):(n===f||n===m)&&(t=g)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t){if(this.cancelNextCallback(),t===f){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:s.findDOMNode(this);n&&n.scrollTop}this.performEnter(e)}else this.performExit()}else this.props.unmountOnExit&&this.state.status===p&&this.setState({status:d})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[s.findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),u=r?l.appear:l.enter;if(!e&&!n||c.disabled){this.safeSetState({status:m},function(){t.props.onEntered(a)});return}this.props.onEnter(a,i),this.safeSetState({status:f},function(){t.props.onEntering(a,i),t.onTransitionEnd(u,function(){t.safeSetState({status:m},function(){t.props.onEntered(a,i)})})})},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:s.findDOMNode(this);if(!t||c.disabled){this.safeSetState({status:p},function(){e.props.onExited(r)});return}this.props.onExit(r),this.safeSetState({status:g},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:p},function(){e.props.onExited(r)})})})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:s.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(!n||r){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)},n.render=function(){var e=this.state.status;if(e===d)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,i.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return a.createElement(u.Provider,{value:null},"function"==typeof n?n(e,r):a.cloneElement(a.Children.only(n),r))},t}(a.Component);function b(){}h.contextType=u,h.propTypes={},h.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},h.UNMOUNTED=d,h.EXITED=p,h.ENTERING=f,h.ENTERED=m,h.EXITING=g;var v=n(54942),y=n(99250),E=n(65492);let w=e=>{var t=(0,r._T)(e,[]);return a.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),a.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),a.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var S=n(2898);let x={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},O=e=>"light"!==e?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}},k=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,E.bM)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,E.bM)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,E.bM)(t,S.K.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,E.bM)(t,S.K.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,E.bM)(t,S.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,E.bM)(t,S.K.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,E.bM)(t,S.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,E.bM)(t,S.K.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,E.bM)("transparent").bgColor,hoverBgColor:t?(0,y.q)((0,E.bM)(t,S.K.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,E.bM)(t,S.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,E.bM)(t,S.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,E.bM)(t,S.K.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,E.bM)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},C=(0,E.fn)("Button"),T=e=>{let{loading:t,iconSize:n,iconPosition:r,Icon:o,needMargin:i,transitionState:l}=e,s=i?r===v.zS.Left?(0,y.q)("-ml-1","mr-1.5"):(0,y.q)("-mr-1","ml-1.5"):"",c=(0,y.q)("w-0 h-0"),u={default:c,entering:c,entered:n,exiting:n,exited:c};return t?a.createElement(w,{className:(0,y.q)(C("icon"),"animate-spin shrink-0",s,u.default,u[l]),style:{transition:"width 150ms"}}):a.createElement(o,{className:(0,y.q)(C("icon"),"shrink-0",n,s)})},A=a.forwardRef((e,t)=>{let{icon:n,iconPosition:i=v.zS.Left,size:l=v.u8.SM,color:s,variant:c="primary",disabled:u,loading:d=!1,loadingText:p,children:f,tooltip:m,className:g}=e,b=(0,r._T)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),w=d||u,S=void 0!==n||d,A=d&&p,N=!(!f&&!A),I=(0,y.q)(x[l].height,x[l].width),R="light"!==c?(0,y.q)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",_=k(c,s),P=O(c)[l],{tooltipProps:M,getReferenceProps:L}=(0,o.l)(300);return a.createElement(h,{in:d,timeout:50},e=>a.createElement("button",Object.assign({ref:(0,E.lq)([t,M.refs.setReference]),className:(0,y.q)(C("root"),"flex-shrink-0 inline-flex justify-center items-center group font-medium outline-none",R,P.paddingX,P.paddingY,P.fontSize,_.textColor,_.bgColor,_.borderColor,_.hoverBorderColor,w?"opacity-50 cursor-not-allowed":(0,y.q)(k(c,s).hoverTextColor,k(c,s).hoverBgColor,k(c,s).hoverBorderColor),g),disabled:w},L,b),a.createElement(o.Z,Object.assign({text:m},M)),S&&i!==v.zS.Right?a.createElement(T,{loading:d,iconSize:I,iconPosition:i,Icon:n,transitionState:e,needMargin:N}):null,A||f?a.createElement("span",{className:(0,y.q)(C("text"),"text-sm whitespace-nowrap")},A?p:f):null,S&&i===v.zS.Right?a.createElement(T,{loading:d,iconSize:I,iconPosition:i,Icon:n,transitionState:e,needMargin:N}):null))});A.displayName="Button"},5474:function(e,t,n){n.d(t,{Z:function(){return eD}});var r,o,a=n(69703),i=n(64090),l=n(73832),s=n(10641),c=n(15740),u=n(92381),d=n(39790),p=n(85235),f=n(71679),m=n(37130),g=n(71454),h=n(31820),b=n(36601),v=n(83839),y=n(37700),E=n(88358),w=n(84152),S=n(48803),x=n(72640),O=n(94819),k=n(18318),C=n(67409),T=((r=T||{})[r.Open=0]="Open",r[r.Closed=1]="Closed",r),A=((o=A||{})[o.TogglePopover=0]="TogglePopover",o[o.ClosePopover=1]="ClosePopover",o[o.SetButton=2]="SetButton",o[o.SetButtonId=3]="SetButtonId",o[o.SetPanel=4]="SetPanel",o[o.SetPanelId=5]="SetPanelId",o);let N={0:e=>{let t={...e,popoverState:(0,x.E)(e.popoverState,{0:1,1:0})};return 0===t.popoverState&&(t.__demoMode=!1),t},1:e=>1===e.popoverState?e:{...e,popoverState:1},2:(e,t)=>e.button===t.button?e:{...e,button:t.button},3:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},4:(e,t)=>e.panel===t.panel?e:{...e,panel:t.panel},5:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId}},I=(0,i.createContext)(null);function R(e){let t=(0,i.useContext)(I);if(null===t){let t=Error("<".concat(e," /> is missing a parent component."));throw Error.captureStackTrace&&Error.captureStackTrace(t,R),t}return t}I.displayName="PopoverContext";let _=(0,i.createContext)(null);function P(e){let t=(0,i.useContext)(_);if(null===t){let t=Error("<".concat(e," /> is missing a parent component."));throw Error.captureStackTrace&&Error.captureStackTrace(t,P),t}return t}_.displayName="PopoverAPIContext";let M=(0,i.createContext)(null);function L(){return(0,i.useContext)(M)}M.displayName="PopoverGroupContext";let D=(0,i.createContext)(null);function j(e,t){return(0,x.E)(t.type,N,e,t)}D.displayName="PopoverPanelContext";let F=k.AN.RenderStrategy|k.AN.Static,B=k.AN.RenderStrategy|k.AN.Static,Z=Object.assign((0,k.yV)(function(e,t){var n;let{__demoMode:r=!1,...o}=e,a=(0,i.useRef)(null),u=(0,b.T)(t,(0,b.h)(e=>{a.current=e})),d=(0,i.useRef)([]),g=(0,i.useReducer)(j,{__demoMode:r,popoverState:r?0:1,buttons:d,button:null,buttonId:null,panel:null,panelId:null,beforePanelSentinel:(0,i.createRef)(),afterPanelSentinel:(0,i.createRef)()}),[{popoverState:v,button:y,buttonId:w,panel:O,panelId:C,beforePanelSentinel:T,afterPanelSentinel:A},N]=g,R=(0,m.i)(null!=(n=a.current)?n:y),P=(0,i.useMemo)(()=>{if(!y||!O)return!1;for(let e of document.querySelectorAll("body > *"))if(Number(null==e?void 0:e.contains(y))^Number(null==e?void 0:e.contains(O)))return!0;let e=(0,S.GO)(),t=e.indexOf(y),n=(t+e.length-1)%e.length,r=(t+1)%e.length,o=e[n],a=e[r];return!O.contains(o)&&!O.contains(a)},[y,O]),M=(0,p.E)(w),F=(0,p.E)(C),B=(0,i.useMemo)(()=>({buttonId:M,panelId:F,close:()=>N({type:1})}),[M,F,N]),Z=L(),U=null==Z?void 0:Z.registerPopover,z=(0,s.z)(()=>{var e;return null!=(e=null==Z?void 0:Z.isFocusWithinPopoverGroup())?e:(null==R?void 0:R.activeElement)&&((null==y?void 0:y.contains(R.activeElement))||(null==O?void 0:O.contains(R.activeElement)))});(0,i.useEffect)(()=>null==U?void 0:U(B),[U,B]);let[H,G]=(0,l.k)(),W=(0,h.v)({mainTreeNodeRef:null==Z?void 0:Z.mainTreeNodeRef,portals:H,defaultContainers:[y,O]});(0,c.O)(null==R?void 0:R.defaultView,"focus",e=>{var t,n,r,o;e.target!==window&&e.target instanceof HTMLElement&&0===v&&(z()||y&&O&&(W.contains(e.target)||null!=(n=null==(t=T.current)?void 0:t.contains)&&n.call(t,e.target)||null!=(o=null==(r=A.current)?void 0:r.contains)&&o.call(r,e.target)||N({type:1})))},!0),(0,f.O)(W.resolveContainers,(e,t)=>{N({type:1}),(0,S.sP)(t,S.tJ.Loose)||(e.preventDefault(),null==y||y.focus())},0===v);let $=(0,s.z)(e=>{N({type:1});let t=e?e instanceof HTMLElement?e:"current"in e&&e.current instanceof HTMLElement?e.current:y:y;null==t||t.focus()}),V=(0,i.useMemo)(()=>({close:$,isPortalled:P}),[$,P]),q=(0,i.useMemo)(()=>({open:0===v,close:$}),[v,$]);return i.createElement(D.Provider,{value:null},i.createElement(I.Provider,{value:g},i.createElement(_.Provider,{value:V},i.createElement(E.up,{value:(0,x.E)(v,{0:E.ZM.Open,1:E.ZM.Closed})},i.createElement(G,null,(0,k.sY)({ourProps:{ref:u},theirProps:o,slot:q,defaultTag:"div",name:"Popover"}),i.createElement(W.MainTreeNode,null))))))}),{Button:(0,k.yV)(function(e,t){let n=(0,u.M)(),{id:r="headlessui-popover-button-".concat(n),...o}=e,[a,l]=R("Popover.Button"),{isPortalled:c}=P("Popover.Button"),d=(0,i.useRef)(null),p="headlessui-focus-sentinel-".concat((0,u.M)()),f=L(),h=null==f?void 0:f.closeOthers,E=null!==(0,i.useContext)(D);(0,i.useEffect)(()=>{if(!E)return l({type:3,buttonId:r}),()=>{l({type:3,buttonId:null})}},[E,r,l]);let[O]=(0,i.useState)(()=>Symbol()),T=(0,b.T)(d,t,E?null:e=>{if(e)a.buttons.current.push(O);else{let e=a.buttons.current.indexOf(O);-1!==e&&a.buttons.current.splice(e,1)}a.buttons.current.length>1&&console.warn("You are already using a but only 1 is supported."),e&&l({type:2,button:e})}),A=(0,b.T)(d,t),N=(0,m.i)(d),I=(0,s.z)(e=>{var t,n,r;if(E){if(1===a.popoverState)return;switch(e.key){case C.R.Space:case C.R.Enter:e.preventDefault(),null==(n=(t=e.target).click)||n.call(t),l({type:1}),null==(r=a.button)||r.focus()}}else switch(e.key){case C.R.Space:case C.R.Enter:e.preventDefault(),e.stopPropagation(),1===a.popoverState&&(null==h||h(a.buttonId)),l({type:0});break;case C.R.Escape:if(0!==a.popoverState)return null==h?void 0:h(a.buttonId);if(!d.current||null!=N&&N.activeElement&&!d.current.contains(N.activeElement))return;e.preventDefault(),e.stopPropagation(),l({type:1})}}),_=(0,s.z)(e=>{E||e.key===C.R.Space&&e.preventDefault()}),M=(0,s.z)(t=>{var n,r;(0,w.P)(t.currentTarget)||e.disabled||(E?(l({type:1}),null==(n=a.button)||n.focus()):(t.preventDefault(),t.stopPropagation(),1===a.popoverState&&(null==h||h(a.buttonId)),l({type:0}),null==(r=a.button)||r.focus()))}),j=(0,s.z)(e=>{e.preventDefault(),e.stopPropagation()}),F=0===a.popoverState,B=(0,i.useMemo)(()=>({open:F}),[F]),Z=(0,g.f)(e,d),U=E?{ref:A,type:Z,onKeyDown:I,onClick:M}:{ref:T,id:a.buttonId,type:Z,"aria-expanded":0===a.popoverState,"aria-controls":a.panel?a.panelId:void 0,onKeyDown:I,onKeyUp:_,onClick:M,onMouseDown:j},z=(0,v.l)(),H=(0,s.z)(()=>{let e=a.panel;e&&(0,x.E)(z.current,{[v.N.Forwards]:()=>(0,S.jA)(e,S.TO.First),[v.N.Backwards]:()=>(0,S.jA)(e,S.TO.Last)})===S.fE.Error&&(0,S.jA)((0,S.GO)().filter(e=>"true"!==e.dataset.headlessuiFocusGuard),(0,x.E)(z.current,{[v.N.Forwards]:S.TO.Next,[v.N.Backwards]:S.TO.Previous}),{relativeTo:a.button})});return i.createElement(i.Fragment,null,(0,k.sY)({ourProps:U,theirProps:o,slot:B,defaultTag:"button",name:"Popover.Button"}),F&&!E&&c&&i.createElement(y._,{id:p,features:y.A.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:H}))}),Overlay:(0,k.yV)(function(e,t){let n=(0,u.M)(),{id:r="headlessui-popover-overlay-".concat(n),...o}=e,[{popoverState:a},l]=R("Popover.Overlay"),c=(0,b.T)(t),d=(0,E.oJ)(),p=null!==d?(d&E.ZM.Open)===E.ZM.Open:0===a,f=(0,s.z)(e=>{if((0,w.P)(e.currentTarget))return e.preventDefault();l({type:1})}),m=(0,i.useMemo)(()=>({open:0===a}),[a]);return(0,k.sY)({ourProps:{ref:c,id:r,"aria-hidden":!0,onClick:f},theirProps:o,slot:m,defaultTag:"div",features:F,visible:p,name:"Popover.Overlay"})}),Panel:(0,k.yV)(function(e,t){let n=(0,u.M)(),{id:r="headlessui-popover-panel-".concat(n),focus:o=!1,...a}=e,[l,c]=R("Popover.Panel"),{close:p,isPortalled:f}=P("Popover.Panel"),g="headlessui-focus-sentinel-before-".concat((0,u.M)()),h="headlessui-focus-sentinel-after-".concat((0,u.M)()),w=(0,i.useRef)(null),O=(0,b.T)(w,t,e=>{c({type:4,panel:e})}),T=(0,m.i)(w),A=(0,k.Y2)();(0,d.e)(()=>(c({type:5,panelId:r}),()=>{c({type:5,panelId:null})}),[r,c]);let N=(0,E.oJ)(),I=null!==N?(N&E.ZM.Open)===E.ZM.Open:0===l.popoverState,_=(0,s.z)(e=>{var t;if(e.key===C.R.Escape){if(0!==l.popoverState||!w.current||null!=T&&T.activeElement&&!w.current.contains(T.activeElement))return;e.preventDefault(),e.stopPropagation(),c({type:1}),null==(t=l.button)||t.focus()}});(0,i.useEffect)(()=>{var t;e.static||1===l.popoverState&&(null==(t=e.unmount)||t)&&c({type:4,panel:null})},[l.popoverState,e.unmount,e.static,c]),(0,i.useEffect)(()=>{if(l.__demoMode||!o||0!==l.popoverState||!w.current)return;let e=null==T?void 0:T.activeElement;w.current.contains(e)||(0,S.jA)(w.current,S.TO.First)},[l.__demoMode,o,w,l.popoverState]);let M=(0,i.useMemo)(()=>({open:0===l.popoverState,close:p}),[l,p]),L={ref:O,id:r,onKeyDown:_,onBlur:o&&0===l.popoverState?e=>{var t,n,r,o,a;let i=e.relatedTarget;i&&w.current&&(null!=(t=w.current)&&t.contains(i)||(c({type:1}),(null!=(r=null==(n=l.beforePanelSentinel.current)?void 0:n.contains)&&r.call(n,i)||null!=(a=null==(o=l.afterPanelSentinel.current)?void 0:o.contains)&&a.call(o,i))&&i.focus({preventScroll:!0})))}:void 0,tabIndex:-1},j=(0,v.l)(),F=(0,s.z)(()=>{let e=w.current;e&&(0,x.E)(j.current,{[v.N.Forwards]:()=>{var t;(0,S.jA)(e,S.TO.First)===S.fE.Error&&(null==(t=l.afterPanelSentinel.current)||t.focus())},[v.N.Backwards]:()=>{var e;null==(e=l.button)||e.focus({preventScroll:!0})}})}),Z=(0,s.z)(()=>{let e=w.current;e&&(0,x.E)(j.current,{[v.N.Forwards]:()=>{var e;if(!l.button)return;let t=(0,S.GO)(),n=t.indexOf(l.button),r=t.slice(0,n+1),o=[...t.slice(n+1),...r];for(let t of o.slice())if("true"===t.dataset.headlessuiFocusGuard||null!=(e=l.panel)&&e.contains(t)){let e=o.indexOf(t);-1!==e&&o.splice(e,1)}(0,S.jA)(o,S.TO.First,{sorted:!1})},[v.N.Backwards]:()=>{var t;(0,S.jA)(e,S.TO.Previous)===S.fE.Error&&(null==(t=l.button)||t.focus())}})});return i.createElement(D.Provider,{value:r},I&&f&&i.createElement(y._,{id:g,ref:l.beforePanelSentinel,features:y.A.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:F}),(0,k.sY)({mergeRefs:A,ourProps:L,theirProps:a,slot:M,defaultTag:"div",features:B,visible:I,name:"Popover.Panel"}),I&&f&&i.createElement(y._,{id:h,ref:l.afterPanelSentinel,features:y.A.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:Z}))}),Group:(0,k.yV)(function(e,t){let n=(0,i.useRef)(null),r=(0,b.T)(n,t),[o,a]=(0,i.useState)([]),l=(0,h.H)(),c=(0,s.z)(e=>{a(t=>{let n=t.indexOf(e);if(-1!==n){let e=t.slice();return e.splice(n,1),e}return t})}),u=(0,s.z)(e=>(a(t=>[...t,e]),()=>c(e))),d=(0,s.z)(()=>{var e;let t=(0,O.r)(n);if(!t)return!1;let r=t.activeElement;return!!(null!=(e=n.current)&&e.contains(r))||o.some(e=>{var n,o;return(null==(n=t.getElementById(e.buttonId.current))?void 0:n.contains(r))||(null==(o=t.getElementById(e.panelId.current))?void 0:o.contains(r))})}),p=(0,s.z)(e=>{for(let t of o)t.buttonId.current!==e&&t.close()}),f=(0,i.useMemo)(()=>({registerPopover:u,unregisterPopover:c,isFocusWithinPopoverGroup:d,closeOthers:p,mainTreeNodeRef:l.mainTreeNodeRef}),[u,c,d,p,l.mainTreeNodeRef]),m=(0,i.useMemo)(()=>({}),[]);return i.createElement(M.Provider,{value:f},(0,k.sY)({ourProps:{ref:r},theirProps:e,slot:m,defaultTag:"div",name:"Popover.Group"}),i.createElement(l.MainTreeNode,null))})});var U=n(70129),z=n(25163);let H=e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"}),i.createElement("path",{fillRule:"evenodd",d:"M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z",clipRule:"evenodd"}))};var G=n(8903),W=n(49492);function $(){return(0,W.Z)(Date.now())}var V=n(32633),q=n(99250),Y=n(91753),K=n(74416),X=n(50295),Q=n(6976),J=n(13256),ee=n(68309),et=n(84120),en=n(27552);function er(e,t){if((0,en.Z)(2,arguments),!t||"object"!==(0,Q.Z)(t))return new Date(NaN);var n=t.years?(0,ee.Z)(t.years):0,r=t.months?(0,ee.Z)(t.months):0,o=t.weeks?(0,ee.Z)(t.weeks):0,a=t.days?(0,ee.Z)(t.days):0,i=t.hours?(0,ee.Z)(t.hours):0,l=t.minutes?(0,ee.Z)(t.minutes):0,s=t.seconds?(0,ee.Z)(t.seconds):0,c=function(e,t){(0,en.Z)(2,arguments);var n=(0,ee.Z)(t);return(0,et.Z)(e,-n)}(e,r+12*n);return new Date((0,J.Z)(c,a+7*o).getTime()-1e3*(s+60*(l+60*i)))}var eo=n(8053),ea=n(68005),ei=n(22893),el=n(65492);let es=(0,el.fn)("DateRangePicker"),ec=(e,t,n,r)=>{var o;if(n&&(e=null===(o=r.get(n))||void 0===o?void 0:o.from),e)return(0,W.Z)(e&&!t?e:(0,K.Z)([e,t]))},eu=(e,t,n,r)=>{var o,a;if(n&&(e=(0,W.Z)(null!==(a=null===(o=r.get(n))||void 0===o?void 0:o.to)&&void 0!==a?a:$())),e)return(0,W.Z)(e&&!t?e:(0,X.Z)([e,t]))},ed=[{value:"tdy",text:"Today",from:$()},{value:"w",text:"Last 7 days",from:er($(),{days:7})},{value:"t",text:"Last 30 days",from:er($(),{days:30})},{value:"m",text:"Month to Date",from:(0,V.Z)($())},{value:"y",text:"Year to Date",from:(0,eo.Z)($())}],ep=(e,t,n,r)=>{let o=(null==n?void 0:n.code)||"en-US";if(!e&&!t)return"";if(e&&!t)return r?(0,ea.Z)(e,r):e.toLocaleDateString(o,{year:"numeric",month:"short",day:"numeric"});if(e&&t){if(function(e,t){(0,en.Z)(2,arguments);var n=(0,ei.Z)(e),r=(0,ei.Z)(t);return n.getTime()===r.getTime()}(e,t))return r?(0,ea.Z)(e,r):e.toLocaleDateString(o,{year:"numeric",month:"short",day:"numeric"});if(e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear())return r?"".concat((0,ea.Z)(e,r)," - ").concat((0,ea.Z)(t,r)):"".concat(e.toLocaleDateString(o,{month:"short",day:"numeric"})," - \n ").concat(t.getDate(),", ").concat(t.getFullYear());{if(r)return"".concat((0,ea.Z)(e,r)," - ").concat((0,ea.Z)(t,r));let n={year:"numeric",month:"short",day:"numeric"};return"".concat(e.toLocaleDateString(o,n)," - \n ").concat(t.toLocaleDateString(o,n))}}return""};var ef=n(26463);let em=e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"},t),i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 19l-7-7 7-7"}))},eg=e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"},t),i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"}))},eh=e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"}),i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11 19l-7-7 7-7m8 14l-7-7 7-7"}))},eb=e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"}),i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13 5l7 7-7 7M5 5l7 7-7 7"}))};var ev=n(45503),ey=n(71801);n(5);var eE=n(58437),ew=n(54942),eS=n(2898);let ex={xs:{paddingX:"px-2",paddingY:"py-0.5",fontSize:"text-xs"},sm:{paddingX:"px-2.5",paddingY:"py-1",fontSize:"text-sm"},md:{paddingX:"px-3",paddingY:"py-1.5",fontSize:"text-md"},lg:{paddingX:"px-3.5",paddingY:"py-1.5",fontSize:"text-lg"},xl:{paddingX:"px-3.5",paddingY:"py-1.5",fontSize:"text-xl"}},eO={xs:{paddingX:"px-2",paddingY:"py-0.5",fontSize:"text-xs"},sm:{paddingX:"px-2.5",paddingY:"py-0.5",fontSize:"text-sm"},md:{paddingX:"px-3",paddingY:"py-0.5",fontSize:"text-md"},lg:{paddingX:"px-3.5",paddingY:"py-0.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-1",fontSize:"text-xl"}},ek={xs:{height:"h-4",width:"w-4"},sm:{height:"h-4",width:"w-4"},md:{height:"h-4",width:"w-4"},lg:{height:"h-5",width:"w-5"},xl:{height:"h-6",width:"w-6"}},eC={[ew.wu.Increase]:{bgColor:(0,el.bM)(ew.fr.Emerald,eS.K.background).bgColor,textColor:(0,el.bM)(ew.fr.Emerald,eS.K.text).textColor},[ew.wu.ModerateIncrease]:{bgColor:(0,el.bM)(ew.fr.Emerald,eS.K.background).bgColor,textColor:(0,el.bM)(ew.fr.Emerald,eS.K.text).textColor},[ew.wu.Decrease]:{bgColor:(0,el.bM)(ew.fr.Rose,eS.K.background).bgColor,textColor:(0,el.bM)(ew.fr.Rose,eS.K.text).textColor},[ew.wu.ModerateDecrease]:{bgColor:(0,el.bM)(ew.fr.Rose,eS.K.background).bgColor,textColor:(0,el.bM)(ew.fr.Rose,eS.K.text).textColor},[ew.wu.Unchanged]:{bgColor:(0,el.bM)(ew.fr.Orange,eS.K.background).bgColor,textColor:(0,el.bM)(ew.fr.Orange,eS.K.text).textColor}},eT={[ew.wu.Increase]:e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24"}),i.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),i.createElement("path",{fill:"currentColor",d:"M13 7.828V20h-2V7.828l-5.364 5.364-1.414-1.414L12 4l7.778 7.778-1.414 1.414L13 7.828z"}))},[ew.wu.ModerateIncrease]:e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24"}),i.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),i.createElement("path",{fill:"currentColor",d:"M16.004 9.414l-8.607 8.607-1.414-1.414L14.589 8H7.004V6h11v11h-2V9.414z"}))},[ew.wu.Decrease]:e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24"}),i.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),i.createElement("path",{fill:"currentColor",d:"M13 16.172l5.364-5.364 1.414 1.414L12 20l-7.778-7.778 1.414-1.414L11 16.172V4h2v12.172z"}))},[ew.wu.ModerateDecrease]:e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24"}),i.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),i.createElement("path",{fill:"currentColor",d:"M14.59 16.004L5.982 7.397l1.414-1.414 8.607 8.606V7.004h2v11h-11v-2z"}))},[ew.wu.Unchanged]:e=>{var t=(0,a._T)(e,[]);return i.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24"}),i.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),i.createElement("path",{fill:"currentColor",d:"M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"}))}},eA=(0,el.fn)("BadgeDelta");i.forwardRef((e,t)=>{let{deltaType:n=ew.wu.Increase,isIncreasePositive:r=!0,size:o=ew.u8.SM,tooltip:l,children:s,className:c}=e,u=(0,a._T)(e,["deltaType","isIncreasePositive","size","tooltip","children","className"]),d=eT[n],p=(0,el.Fo)(n,r),f=s?eO:ex,{tooltipProps:m,getReferenceProps:g}=(0,eE.l)();return i.createElement("span",Object.assign({ref:(0,el.lq)([t,m.refs.setReference]),className:(0,q.q)(eA("root"),"w-max flex-shrink-0 inline-flex justify-center items-center cursor-default rounded-tremor-full bg-opacity-20 dark:bg-opacity-25",eC[p].bgColor,eC[p].textColor,f[o].paddingX,f[o].paddingY,f[o].fontSize,c)},g,u),i.createElement(eE.Z,Object.assign({text:l},m)),i.createElement(d,{className:(0,q.q)(eA("icon"),"shrink-0",s?(0,q.q)("-ml-1 mr-1.5"):ek[o].height,ek[o].width)}),s?i.createElement("p",{className:(0,q.q)(eA("text"),"text-sm whitespace-nowrap")},s):null)}).displayName="BadgeDelta";var eN=n(61244);let eI=e=>{var{onClick:t,icon:n}=e,r=(0,a._T)(e,["onClick","icon"]);return i.createElement("button",Object.assign({type:"button",className:(0,q.q)("flex items-center justify-center p-1 h-7 w-7 outline-none focus:ring-2 transition duration-100 border border-tremor-border dark:border-dark-tremor-border hover:bg-tremor-background-muted dark:hover:bg-dark-tremor-background-muted rounded-tremor-small focus:border-tremor-brand-subtle select-none dark:focus:border-dark-tremor-brand-subtle focus:ring-tremor-brand-muted dark:focus:ring-dark-tremor-brand-muted text-tremor-content-subtle dark:text-dark-tremor-content-subtle hover:text-tremor-content dark:hover:text-dark-tremor-content")},r),i.createElement(eN.Z,{onClick:t,icon:n,variant:"simple",color:"slate",size:"xs"}))};function eR(e){var{mode:t,defaultMonth:n,selected:r,onSelect:o,locale:l,disabled:s,enableYearNavigation:c,classNames:u,weekStartsOn:d=0}=e,p=(0,a._T)(e,["mode","defaultMonth","selected","onSelect","locale","disabled","enableYearNavigation","classNames","weekStartsOn"]);return i.createElement(ef._W,Object.assign({showOutsideDays:!0,mode:t,defaultMonth:n,selected:r,onSelect:o,locale:l,disabled:s,weekStartsOn:d,classNames:Object.assign({months:"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",month:"space-y-4",caption:"flex justify-center pt-2 relative items-center",caption_label:"text-tremor-default text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis font-medium",nav:"space-x-1 flex items-center",nav_button:"flex items-center justify-center p-1 h-7 w-7 outline-none focus:ring-2 transition duration-100 border border-tremor-border dark:border-dark-tremor-border hover:bg-tremor-background-muted dark:hover:bg-dark-tremor-background-muted rounded-tremor-small focus:border-tremor-brand-subtle dark:focus:border-dark-tremor-brand-subtle focus:ring-tremor-brand-muted dark:focus:ring-dark-tremor-brand-muted text-tremor-content-subtle dark:text-dark-tremor-content-subtle hover:text-tremor-content dark:hover:text-dark-tremor-content",nav_button_previous:"absolute left-1",nav_button_next:"absolute right-1",table:"w-full border-collapse space-y-1",head_row:"flex",head_cell:"w-9 font-normal text-center text-tremor-content-subtle dark:text-dark-tremor-content-subtle",row:"flex w-full mt-0.5",cell:"text-center p-0 relative focus-within:relative text-tremor-default text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis",day:"h-9 w-9 p-0 hover:bg-tremor-background-subtle dark:hover:bg-dark-tremor-background-subtle outline-tremor-brand dark:outline-dark-tremor-brand rounded-tremor-default",day_today:"font-bold",day_selected:"aria-selected:bg-tremor-background-emphasis aria-selected:text-tremor-content-inverted dark:aria-selected:bg-dark-tremor-background-emphasis dark:aria-selected:text-dark-tremor-content-inverted ",day_disabled:"text-tremor-content-subtle dark:text-dark-tremor-content-subtle disabled:hover:bg-transparent",day_outside:"text-tremor-content-subtle dark:text-dark-tremor-content-subtle"},u),components:{IconLeft:e=>{var t=(0,a._T)(e,[]);return i.createElement(em,Object.assign({className:"h-4 w-4"},t))},IconRight:e=>{var t=(0,a._T)(e,[]);return i.createElement(eg,Object.assign({className:"h-4 w-4"},t))},Caption:e=>{var t=(0,a._T)(e,[]);let{goToMonth:n,nextMonth:r,previousMonth:o,currentMonth:s}=(0,ef.HJ)();return i.createElement("div",{className:"flex justify-between items-center"},i.createElement("div",{className:"flex items-center space-x-1"},c&&i.createElement(eI,{onClick:()=>s&&n((0,ev.Z)(s,-1)),icon:eh}),i.createElement(eI,{onClick:()=>o&&n(o),icon:em})),i.createElement(ey.Z,{className:"text-tremor-default tabular-nums capitalize text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis font-medium"},(0,ea.Z)(t.displayMonth,"LLLL yyy",{locale:l})),i.createElement("div",{className:"flex items-center space-x-1"},i.createElement(eI,{onClick:()=>r&&n(r),icon:eg}),c&&i.createElement(eI,{onClick:()=>s&&n((0,ev.Z)(s,1)),icon:eb})))}}},p))}eR.displayName="DateRangePicker",n(95093);var e_=n(27166),eP=n(82985),eM=n(46457);let eL=$(),eD=i.forwardRef((e,t)=>{var n,r;let{value:o,defaultValue:l,onValueChange:s,enableSelect:c=!0,minDate:u,maxDate:d,placeholder:p="Select range",selectPlaceholder:f="Select range",disabled:m=!1,locale:g=eP.Z,enableClear:h=!0,displayFormat:b,children:v,className:y,enableYearNavigation:E=!1,weekStartsOn:w=0,disabledDates:S}=e,x=(0,a._T)(e,["value","defaultValue","onValueChange","enableSelect","minDate","maxDate","placeholder","selectPlaceholder","disabled","locale","enableClear","displayFormat","children","className","enableYearNavigation","weekStartsOn","disabledDates"]),[O,k]=(0,eM.Z)(l,o),[C,T]=(0,i.useState)(!1),[A,N]=(0,i.useState)(!1),I=(0,i.useMemo)(()=>{let e=[];return u&&e.push({before:u}),d&&e.push({after:d}),[...e,...null!=S?S:[]]},[u,d,S]),R=(0,i.useMemo)(()=>{let e=new Map;return v?i.Children.forEach(v,t=>{var n;e.set(t.props.value,{text:null!==(n=(0,Y.qg)(t))&&void 0!==n?n:t.props.value,from:t.props.from,to:t.props.to})}):ed.forEach(t=>{e.set(t.value,{text:t.text,from:t.from,to:eL})}),e},[v]),_=(0,i.useMemo)(()=>{if(v)return(0,Y.sl)(v);let e=new Map;return ed.forEach(t=>e.set(t.value,t.text)),e},[v]),P=(null==O?void 0:O.selectValue)||"",M=ec(null==O?void 0:O.from,u,P,R),L=eu(null==O?void 0:O.to,d,P,R),D=M||L?ep(M,L,g,b):p,j=(0,V.Z)(null!==(r=null!==(n=null!=L?L:M)&&void 0!==n?n:d)&&void 0!==r?r:eL),F=h&&!m;return i.createElement("div",Object.assign({ref:t,className:(0,q.q)("w-full min-w-[10rem] relative flex justify-between text-tremor-default max-w-sm shadow-tremor-input dark:shadow-dark-tremor-input rounded-tremor-default",y)},x),i.createElement(Z,{as:"div",className:(0,q.q)("w-full",c?"rounded-l-tremor-default":"rounded-tremor-default",C&&"ring-2 ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted z-10")},i.createElement("div",{className:"relative w-full"},i.createElement(Z.Button,{onFocus:()=>T(!0),onBlur:()=>T(!1),disabled:m,className:(0,q.q)("w-full outline-none text-left whitespace-nowrap truncate focus:ring-2 transition duration-100 rounded-l-tremor-default flex flex-nowrap border pl-3 py-2","rounded-l-tremor-default border-tremor-border text-tremor-content-emphasis focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:text-dark-tremor-content-emphasis dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",c?"rounded-l-tremor-default":"rounded-tremor-default",F?"pr-8":"pr-4",(0,Y.um)((0,Y.Uh)(M||L),m))},i.createElement(H,{className:(0,q.q)(es("calendarIcon"),"flex-none shrink-0 h-5 w-5 -ml-0.5 mr-2","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle"),"aria-hidden":"true"}),i.createElement("p",{className:"truncate"},D)),F&&M?i.createElement("button",{type:"button",className:(0,q.q)("absolute outline-none inset-y-0 right-0 flex items-center transition duration-100 mr-4"),onClick:e=>{e.preventDefault(),null==s||s({}),k({})}},i.createElement(G.Z,{className:(0,q.q)(es("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null),i.createElement(U.u,{className:"absolute z-10 min-w-min left-0",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},i.createElement(Z.Panel,{focus:!0,className:(0,q.q)("divide-y overflow-y-auto outline-none rounded-tremor-default p-3 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},i.createElement(eR,Object.assign({mode:"range",showOutsideDays:!0,defaultMonth:j,selected:{from:M,to:L},onSelect:e=>{null==s||s({from:null==e?void 0:e.from,to:null==e?void 0:e.to}),k({from:null==e?void 0:e.from,to:null==e?void 0:e.to})},locale:g,disabled:I,enableYearNavigation:E,classNames:{day_range_middle:(0,q.q)("!rounded-none aria-selected:!bg-tremor-background-subtle aria-selected:dark:!bg-dark-tremor-background-subtle aria-selected:!text-tremor-content aria-selected:dark:!bg-dark-tremor-background-subtle"),day_range_start:"rounded-r-none rounded-l-tremor-small aria-selected:text-tremor-brand-inverted dark:aria-selected:text-dark-tremor-brand-inverted",day_range_end:"rounded-l-none rounded-r-tremor-small aria-selected:text-tremor-brand-inverted dark:aria-selected:text-dark-tremor-brand-inverted"},weekStartsOn:w},e))))),c&&i.createElement(z.R,{as:"div",className:(0,q.q)("w-48 -ml-px rounded-r-tremor-default",A&&"ring-2 ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted z-10"),value:P,onChange:e=>{let{from:t,to:n}=R.get(e),r=null!=n?n:eL;null==s||s({from:t,to:r,selectValue:e}),k({from:t,to:r,selectValue:e})},disabled:m},e=>{var t;let{value:n}=e;return i.createElement(i.Fragment,null,i.createElement(z.R.Button,{onFocus:()=>N(!0),onBlur:()=>N(!1),className:(0,q.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-r-tremor-default transition duration-100 border px-4 py-2","border-tremor-border shadow-tremor-input text-tremor-content-emphasis focus:border-tremor-brand-subtle","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:text-dark-tremor-content-emphasis dark:focus:border-dark-tremor-brand-subtle",(0,Y.um)((0,Y.Uh)(n),m))},n&&null!==(t=_.get(n))&&void 0!==t?t:f),i.createElement(U.u,{className:"absolute z-10 w-full inset-x-0 right-0",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},i.createElement(z.R.Options,{className:(0,q.q)("divide-y overflow-y-auto outline-none border my-1","shadow-tremor-dropdown bg-tremor-background border-tremor-border divide-tremor-border rounded-tremor-default","dark:shadow-dark-tremor-dropdown dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border")},null!=v?v:ed.map(e=>i.createElement(e_.Z,{key:e.value,value:e.value},e.text)))))}))});eD.displayName="DateRangePicker"},47047:function(e,t,n){n.d(t,{Z:function(){return b}});var r=n(69703),o=n(64090);n(50027),n(18174),n(21871);var a=n(41213),i=n(46457),l=n(54518);let s=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"}),o.createElement("path",{fillRule:"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z",clipRule:"evenodd"}))};var c=n(8903),u=n(25163),d=n(70129);let p=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},t),o.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),o.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))};var f=n(99250),m=n(65492),g=n(91753);let h=(0,m.fn)("MultiSelect"),b=o.forwardRef((e,t)=>{let{defaultValue:n,value:m,onValueChange:b,placeholder:v="Select...",placeholderSearch:y="Search",disabled:E=!1,icon:w,children:S,className:x}=e,O=(0,r._T)(e,["defaultValue","value","onValueChange","placeholder","placeholderSearch","disabled","icon","children","className"]),[k,C]=(0,i.Z)(n,m),{reactElementChildren:T,optionsAvailable:A}=(0,o.useMemo)(()=>{let e=o.Children.toArray(S).filter(o.isValidElement);return{reactElementChildren:e,optionsAvailable:(0,g.n0)("",e)}},[S]),[N,I]=(0,o.useState)(""),R=(null!=k?k:[]).length>0,_=(0,o.useMemo)(()=>N?(0,g.n0)(N,T):A,[N,T,A]),P=()=>{I("")};return o.createElement(u.R,Object.assign({as:"div",ref:t,defaultValue:k,value:k,onChange:e=>{null==b||b(e),C(e)},disabled:E,className:(0,f.q)("w-full min-w-[10rem] relative text-tremor-default",x)},O,{multiple:!0}),e=>{let{value:t}=e;return o.createElement(o.Fragment,null,o.createElement(u.R.Button,{className:(0,f.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 border pr-8 py-1.5","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",w?"p-10 -ml-0.5":"pl-3",(0,g.um)(t.length>0,E))},w&&o.createElement("span",{className:(0,f.q)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},o.createElement(w,{className:(0,f.q)(h("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement("div",{className:"h-6 flex items-center"},t.length>0?o.createElement("div",{className:"flex flex-nowrap overflow-x-scroll [&::-webkit-scrollbar]:hidden [scrollbar-width:none] gap-x-1 mr-5 -ml-1.5 relative"},A.filter(e=>t.includes(e.props.value)).map((e,n)=>{var r;return o.createElement("div",{key:n,className:(0,f.q)("max-w-[100px] lg:max-w-[200px] flex justify-center items-center pl-2 pr-1.5 py-1 font-medium","rounded-tremor-small","bg-tremor-background-muted dark:bg-dark-tremor-background-muted","bg-tremor-background-subtle dark:bg-dark-tremor-background-subtle","text-tremor-content-default dark:text-dark-tremor-content-default","text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis")},o.createElement("div",{className:"text-xs truncate "},null!==(r=e.props.children)&&void 0!==r?r:e.props.value),o.createElement("div",{onClick:n=>{n.preventDefault();let r=t.filter(t=>t!==e.props.value);null==b||b(r),C(r)}},o.createElement(p,{className:(0,f.q)(h("clearIconItem"),"cursor-pointer rounded-tremor-full w-3.5 h-3.5 ml-2","text-tremor-content-subtle hover:text-tremor-content","dark:text-dark-tremor-content-subtle dark:hover:text-tremor-content")})))})):o.createElement("span",null,v)),o.createElement("span",{className:(0,f.q)("absolute inset-y-0 right-0 flex items-center mr-2.5")},o.createElement(l.Z,{className:(0,f.q)(h("arrowDownIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),R&&!E?o.createElement("button",{type:"button",className:(0,f.q)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),C([]),null==b||b([])}},o.createElement(c.Z,{className:(0,f.q)(h("clearIconAllItems"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,o.createElement(d.u,{className:"absolute z-10 w-full",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},o.createElement(u.R.Options,{className:(0,f.q)("divide-y overflow-y-auto outline-none rounded-tremor-default max-h-[228px] left-0 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},o.createElement("div",{className:(0,f.q)("flex items-center w-full px-2.5","bg-tremor-background-muted","dark:bg-dark-tremor-background-muted")},o.createElement("span",null,o.createElement(s,{className:(0,f.q)("flex-none w-4 h-4 mr-2","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement("input",{name:"search",type:"input",autoComplete:"off",placeholder:y,className:(0,f.q)("w-full focus:outline-none focus:ring-none bg-transparent text-tremor-default py-2","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis"),onKeyDown:e=>{"Space"===e.code&&""!==e.target.value&&e.stopPropagation()},onChange:e=>I(e.target.value),value:N})),o.createElement(a.Z.Provider,Object.assign({},{onBlur:{handleResetSearch:P}},{value:{selectedValue:t}}),_))))})});b.displayName="MultiSelect"},76628:function(e,t,n){n.d(t,{Z:function(){return u}});var r=n(69703);n(50027),n(18174),n(21871);var o=n(41213),a=n(64090),i=n(99250),l=n(65492),s=n(25163);let c=(0,l.fn)("MultiSelectItem"),u=a.forwardRef((e,t)=>{let{value:n,className:u,children:d}=e,p=(0,r._T)(e,["value","className","children"]),{selectedValue:f}=(0,a.useContext)(o.Z),m=(0,l.NZ)(n,f);return a.createElement(s.R.Option,Object.assign({className:(0,i.q)(c("root"),"flex justify-start items-center cursor-default text-tremor-default p-2.5","ui-active:bg-tremor-background-muted ui-active:text-tremor-content-strong ui-selected:text-tremor-content-strong text-tremor-content-emphasis","dark:ui-active:bg-dark-tremor-background-muted dark:ui-active:text-dark-tremor-content-strong dark:ui-selected:text-dark-tremor-content-strong dark:ui-selected:bg-dark-tremor-background-muted dark:text-dark-tremor-content-emphasis",u),ref:t,key:n,value:n},p),a.createElement("input",{type:"checkbox",className:(0,i.q)(c("checkbox"),"flex-none focus:ring-none focus:outline-none cursor-pointer mr-2.5","accent-tremor-brand","dark:accent-dark-tremor-brand"),checked:m,readOnly:!0}),a.createElement("span",{className:"whitespace-nowrap truncate"},null!=d?d:n))});u.displayName="MultiSelectItem"},95093:function(e,t,n){n.d(t,{Z:function(){return m}});var r=n(69703),o=n(64090),a=n(54518),i=n(8903),l=n(99250),s=n(65492),c=n(91753),u=n(25163),d=n(70129),p=n(46457);let f=(0,s.fn)("Select"),m=o.forwardRef((e,t)=>{let{defaultValue:n,value:s,onValueChange:m,placeholder:g="Select...",disabled:h=!1,icon:b,enableClear:v=!0,children:y,className:E}=e,w=(0,r._T)(e,["defaultValue","value","onValueChange","placeholder","disabled","icon","enableClear","children","className"]),[S,x]=(0,p.Z)(n,s),O=(0,o.useMemo)(()=>{let e=o.Children.toArray(y).filter(o.isValidElement);return(0,c.sl)(e)},[y]);return o.createElement(u.R,Object.assign({as:"div",ref:t,defaultValue:S,value:S,onChange:e=>{null==m||m(e),x(e)},disabled:h,className:(0,l.q)("w-full min-w-[10rem] relative text-tremor-default",E)},w),e=>{var t;let{value:n}=e;return o.createElement(o.Fragment,null,o.createElement(u.R.Button,{className:(0,l.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 border pr-8 py-2","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",b?"p-10 -ml-0.5":"pl-3",(0,c.um)((0,c.Uh)(n),h))},b&&o.createElement("span",{className:(0,l.q)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},o.createElement(b,{className:(0,l.q)(f("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement("span",{className:"w-[90%] block truncate"},n&&null!==(t=O.get(n))&&void 0!==t?t:g),o.createElement("span",{className:(0,l.q)("absolute inset-y-0 right-0 flex items-center mr-3")},o.createElement(a.Z,{className:(0,l.q)(f("arrowDownIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),v&&S?o.createElement("button",{type:"button",className:(0,l.q)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),x(""),null==m||m("")}},o.createElement(i.Z,{className:(0,l.q)(f("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,o.createElement(d.u,{className:"absolute z-10 w-full",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},o.createElement(u.R.Options,{className:(0,l.q)("divide-y overflow-y-auto outline-none rounded-tremor-default max-h-[228px] left-0 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},y)))})});m.displayName="Select"},27166:function(e,t,n){n.d(t,{Z:function(){return s}});var r=n(69703),o=n(64090),a=n(25163),i=n(99250);let l=(0,n(65492).fn)("SelectItem"),s=o.forwardRef((e,t)=>{let{value:n,icon:s,className:c,children:u}=e,d=(0,r._T)(e,["value","icon","className","children"]);return o.createElement(a.R.Option,Object.assign({className:(0,i.q)(l("root"),"flex justify-start items-center cursor-default text-tremor-default px-2.5 py-2.5","ui-active:bg-tremor-background-muted ui-active:text-tremor-content-strong ui-selected:text-tremor-content-strong ui-selected:bg-tremor-background-muted text-tremor-content-emphasis","dark:ui-active:bg-dark-tremor-background-muted dark:ui-active:text-dark-tremor-content-strong dark:ui-selected:text-dark-tremor-content-strong dark:ui-selected:bg-dark-tremor-background-muted dark:text-dark-tremor-content-emphasis",c),ref:t,key:n,value:n},d),s&&o.createElement(s,{className:(0,i.q)(l("icon"),"flex-none w-5 h-5 mr-1.5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}),o.createElement("span",{className:"whitespace-nowrap truncate"},null!=u?u:n))});s.displayName="SelectItem"},12224:function(e,t,n){n.d(t,{Z:function(){return N}});var r=n(69703),o=n(64090),a=n(83891),i=n(20044),l=n(10641),s=n(92381),c=n(71454),u=n(36601),d=n(37700),p=n(84152),f=n(34797),m=n(18318),g=n(71014),h=n(67409),b=n(39790);let v=(0,o.createContext)(null),y=Object.assign((0,m.yV)(function(e,t){let n=(0,s.M)(),{id:r="headlessui-label-".concat(n),passive:a=!1,...i}=e,l=function e(){let t=(0,o.useContext)(v);if(null===t){let t=Error("You used a
here - - - - Tag - Spend - Requests - - - - {topTagsData.map((tag) => ( - - {tag.name} - {tag.value} - {tag.log_count} - - ))} - -
- {/* */} + Spend Per Tag + Get Started Tracking cost per tag here + + + From fa4dcbd37c65dd7ae66e0c0cb3e5f1607e8d2469 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 17:31:29 -0700 Subject: [PATCH 232/378] ui - round up spend per tag --- enterprise/utils.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/enterprise/utils.py b/enterprise/utils.py index 481e663be75..1b5036e96ad 100644 --- a/enterprise/utils.py +++ b/enterprise/utils.py @@ -32,7 +32,8 @@ async def ui_get_spend_by_tags(start_date: str, end_date: str, prisma_client): DATE(s."startTime") >= $1::date AND DATE(s."startTime") <= $2::date GROUP BY individual_request_tag, spend_date - ORDER BY spend_date; + ORDER BY spend_date + LIMIT 100; """ response = await prisma_client.db.query_raw( sql_query, @@ -56,15 +57,18 @@ async def ui_get_spend_by_tags(start_date: str, end_date: str, prisma_client): # convert to ui format ui_tags = [] for tag in sorted_tags: + current_spend = tag[1] + if current_spend is not None and isinstance(current_spend, float): + current_spend = round(current_spend, 4) ui_tags.append( { "name": tag[0], - "value": tag[1], + "spend": current_spend, "log_count": total_requests_per_tag[tag[0]], } ) - return {"top_10_tags": ui_tags} + return {"spend_per_tag": ui_tags} async def view_spend_logs_from_clickhouse( From f19e6724ee2802caf9e3e63257aa563f6bb42c09 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 17:48:24 -0700 Subject: [PATCH 233/378] ui - new build --- litellm/proxy/_experimental/out/404.html | 2 +- .../out/_next/static/chunks/app/layout-8181e99a391baed0.js | 1 - .../out/_next/static/chunks/app/layout-a756276e228ca058.js | 1 + .../out/_next/static/chunks/app/page-6a39771cacf75ea6.js | 1 + .../out/_next/static/chunks/app/page-de58db2e54247c7a.js | 1 - .../out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js | 2 +- .../_experimental/out/_next/static/css/f04e46b02318b660.css | 4 +++- .../_buildManifest.js | 0 .../_ssgManifest.js | 0 litellm/proxy/_experimental/out/index.html | 2 +- litellm/proxy/_experimental/out/index.txt | 4 ++-- ui/litellm-dashboard/out/404.html | 2 +- .../out/_next/static/chunks/app/layout-8181e99a391baed0.js | 1 - .../out/_next/static/chunks/app/layout-a756276e228ca058.js | 1 + .../out/_next/static/chunks/app/page-6a39771cacf75ea6.js | 1 + .../out/_next/static/chunks/app/page-de58db2e54247c7a.js | 1 - .../out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js | 2 +- .../out/_next/static/css/f04e46b02318b660.css | 4 +++- .../_buildManifest.js | 0 .../_ssgManifest.js | 0 ui/litellm-dashboard/out/index.html | 2 +- ui/litellm-dashboard/out/index.txt | 4 ++-- 22 files changed, 20 insertions(+), 16 deletions(-) delete mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/layout-8181e99a391baed0.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/layout-a756276e228ca058.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js delete mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/page-de58db2e54247c7a.js rename ui/litellm-dashboard/out/_next/static/chunks/webpack-bd14a14e35b37798.js => litellm/proxy/_experimental/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js (98%) rename ui/litellm-dashboard/out/_next/static/css/8c755b71ba117fd6.css => litellm/proxy/_experimental/out/_next/static/css/f04e46b02318b660.css (99%) rename litellm/proxy/_experimental/out/_next/static/{6ZCXBZB2XEIoV3uj74ZuB => obp5wqVSVDMiDTC414cR8}/_buildManifest.js (100%) rename litellm/proxy/_experimental/out/_next/static/{6ZCXBZB2XEIoV3uj74ZuB => obp5wqVSVDMiDTC414cR8}/_ssgManifest.js (100%) delete mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/layout-8181e99a391baed0.js create mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/layout-a756276e228ca058.js create mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js delete mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/page-de58db2e54247c7a.js rename litellm/proxy/_experimental/out/_next/static/chunks/webpack-bd14a14e35b37798.js => ui/litellm-dashboard/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js (98%) rename litellm/proxy/_experimental/out/_next/static/css/8c755b71ba117fd6.css => ui/litellm-dashboard/out/_next/static/css/f04e46b02318b660.css (99%) rename ui/litellm-dashboard/out/_next/static/{6ZCXBZB2XEIoV3uj74ZuB => obp5wqVSVDMiDTC414cR8}/_buildManifest.js (100%) rename ui/litellm-dashboard/out/_next/static/{6ZCXBZB2XEIoV3uj74ZuB => obp5wqVSVDMiDTC414cR8}/_ssgManifest.js (100%) diff --git a/litellm/proxy/_experimental/out/404.html b/litellm/proxy/_experimental/out/404.html index 929a28f6670..b70559084d4 100644 --- a/litellm/proxy/_experimental/out/404.html +++ b/litellm/proxy/_experimental/out/404.html @@ -1 +1 @@ -404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/app/layout-8181e99a391baed0.js b/litellm/proxy/_experimental/out/_next/static/chunks/app/layout-8181e99a391baed0.js deleted file mode 100644 index 6c12a4b6647..00000000000 --- a/litellm/proxy/_experimental/out/_next/static/chunks/app/layout-8181e99a391baed0.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{13993:function(n,e,t){Promise.resolve().then(t.t.bind(t,63385,23)),Promise.resolve().then(t.t.bind(t,99646,23))},63385:function(){},99646:function(n){n.exports={style:{fontFamily:"'__Inter_c23dc8', '__Inter_Fallback_c23dc8'",fontStyle:"normal"},className:"__className_c23dc8"}}},function(n){n.O(0,[971,69,744],function(){return n(n.s=13993)}),_N_E=n.O()}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/app/layout-a756276e228ca058.js b/litellm/proxy/_experimental/out/_next/static/chunks/app/layout-a756276e228ca058.js new file mode 100644 index 00000000000..e261adc0520 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/app/layout-a756276e228ca058.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{87421:function(n,e,t){Promise.resolve().then(t.t.bind(t,99646,23)),Promise.resolve().then(t.t.bind(t,63385,23))},63385:function(){},99646:function(n){n.exports={style:{fontFamily:"'__Inter_c23dc8', '__Inter_Fallback_c23dc8'",fontStyle:"normal"},className:"__className_c23dc8"}}},function(n){n.O(0,[971,69,744],function(){return n(n.s=87421)}),_N_E=n.O()}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js b/litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js new file mode 100644 index 00000000000..7d08a80c96f --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,7926))},7926:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lb}});var s,a,r=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:a}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",a);let n=[{key:"1",label:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{children:["Role: ",t]}),(0,r.jsxs)("p",{children:["ID: ",l]})]})}];return(0,r.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,r.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,r.jsx)("div",{className:"flex flex-col items-center",children:(0,r.jsx)(i.default,{href:"/",children:(0,r.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,r.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,r.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[a?(0,r.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,r.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,r.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,r.jsx)(c.Z,{menu:{items:n},children:(0,r.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&r&&null!=a&&void 0!=a&&(n="".concat(n,"?view_all=true&page=").concat(a,"&page_size=").concat(r));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,a,r)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l,t)=>{try{let s="/global/spend/tags";l&&t&&(s="".concat(s,"?start_date=").concat(l,"&end_date=").concat(t)),console.log("in tagsSpendLogsCall:",s);let a=await fetch("".concat(s),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,a,r)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(a,"&end_date=").concat(r):"".concat(l,"?start_date=").concat(a,"&end_date=").concat(r);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let a="";a=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let r={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};r.body=a;let n=await fetch("/global/spend/end_users",r);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let a=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!a.ok){let e=await a.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let a=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),a}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},G=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var Y=t(10384),W=t(46453),J=t(16450),H=t(52273),$=t(26780),X=t(15595),Q=t(6698),ee=t(71801),el=t(42440),et=t(42308),es=t(50670),ea=t(81583),er=t(99129),en=t(44839),eo=t(88707),ei=t(1861);let{Option:ec}=es.default;var ed=e=>{let{userID:l,team:t,userRole:s,accessToken:a,data:o,setData:i}=e,[c]=ea.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,f]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==a){let e=(await N(a,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),f(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,s]);let k=async e=>{try{var t,s,r;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(r=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==r?r:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(a,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?y:t.models:y)},[t,y]),(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,r.jsx)(er.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,r.jsxs)(ea.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,r.jsx)(ec,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,r.jsx)(ec,{value:e,children:e},e))]})}),(0,r.jsxs)($.Z,{className:"mt-20 mb-8",children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)("b",{children:"Optional Settings"})}),(0,r.jsxs)(X.Z,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,r.jsxs)(es.default,{defaultValue:null,placeholder:"n/a",children:[(0,r.jsx)(es.default.Option,{value:"24h",children:"daily"}),(0,r.jsx)(es.default.Option,{value:"30d",children:"monthly"})]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,r.jsx)(er.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Save your Key"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,r.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:null!=h?(0,r.jsxs)("div",{children:[(0,r.jsx)(ee.Z,{className:"mt-3",children:"API Key:"}),(0,r.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,r.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,r.jsx)(et.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,r.jsx)(J.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,r.jsx)(ee.Z,{children:"Key being created, this might take 30s"})})]})})]})},em=t(9454),eu=t(98941),eh=t(33393),ex=t(5),ep=t(13810),ej=t(61244),eg=t(10827),ey=t(3851),ef=t(2044),eZ=t(64167),e_=t(74480),ew=t(7178),eb=t(95093),ek=t(27166);let{Option:ev}=es.default;var eS=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:a,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,r.jsxs)("div",{children:[(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,r.jsxs)(eg.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Key Alias"}),(0,r.jsx)(e_.Z,{children:"Secret Key"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"})]})}),(0,r.jsx)(ey.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(a){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(a.team_id)),(null!=a.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=a.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,r.jsx)(ee.Z,{children:e.key_alias}):(0,r.jsx)(ee.Z,{children:"Not Set"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.key_name})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,r.jsx)(ef.Z,{children:null!=e.max_budget?(0,r.jsx)(ee.Z,{children:e.max_budget}):(0,r.jsx)(ee.Z,{children:"Unlimited"})}),(0,r.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(r.Fragment,{children:a&&a.models&&a.models.length>0?a.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{onClick:()=>{I(e),A(!0)},icon:em.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:S,onCancel:()=>{A(!1),I(null)},footer:null,width:800,children:E&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,r.jsx)(r.Fragment,{children:E.max_budget}):(0,r.jsx)(r.Fragment,{children:"Unlimited"})})})]},e.name),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,r.jsx)(r.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,r.jsx)(r.Fragment,{children:"Never"})})})]},e.name)]}),(0,r.jsxs)(ep.Z,{className:"my-4",children:[(0,r.jsx)(el.Z,{children:"Token Name"}),(0,r.jsx)(ee.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,r.jsx)(el.Z,{children:"Token ID"}),(0,r.jsx)(ee.Z,{className:"my-1 text-[12px]",children:E.token}),(0,r.jsx)(el.Z,{children:"Metadata"}),(0,r.jsx)(ee.Z,{className:"my-1",children:(0,r.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,r.jsx)(J.Z,{className:"mx-auto flex items-center",onClick:()=>{A(!1),I(null)},children:"Close"})]})}),(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>R(e)}),(0,r.jsx)(ej.Z,{onClick:()=>U(e),icon:eh.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=ea.Z.useForm(),[d,m]=(0,n.useState)(a),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,r.jsx)(er.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(ev,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):d.models.map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):C.map(e=>(0,r.jsx)(ev,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"token",name:"token",hidden:!0}),(0,r.jsx)(ea.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,r.jsx)(eb.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,r.jsx)(ek.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eN=t(76032),eA=t(35152),eE=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:a,selectedTeam:o}=e;console.log("userSpend: ".concat(a));let[i,c]=(0,n.useState)(null!==a?a:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==a)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==a&&c(a)},[a]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,r.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,r.jsx)("div",{className:"ml-auto",children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Team Models"})}),(0,r.jsx)(X.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,r.jsx)(eN.Z,{children:x.map(e=>(0,r.jsx)(eA.Z,{children:(0,r.jsx)(ee.Z,{children:e})},e))})})]})})]})},eI=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:a}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==a){let e=(await N(a,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"mb-5",children:(0,r.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eC=e=>{let l,{teams:t,setSelectedTeam:s,userRole:a}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===a?t:t?[...t,o]:[o],"App User"===a)?null:(0,r.jsxs)("div",{className:"mt-5 mb-5",children:[(0,r.jsx)(el.Z,{children:"Select Team"}),(0,r.jsx)(ee.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,r.jsxs)(ee.Z,{className:"mt-3 mb-3",children:[(0,r.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,r.jsxs)(ee.Z,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]})},eP=t(37963),eT=t(36083);console.log("isLocal:",!1);var eO=e=>{let{userID:l,userRole:t,teams:s,keys:a,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[f,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,A]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eP.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!a&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),A(s[0])):A(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let a=(await N(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",a),k(a),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(a))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,a,t]),(0,n.useEffect)(()=>{if(null!==a&&null!=S){let e=0;for(let l of a)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==a){let e=0;for(let l of a)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(f)),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsx)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(eI,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,r.jsx)(eE,{userID:l,userRole:t,accessToken:g,userSpend:f,selectedTeam:S||null}),(0,r.jsx)(eS,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:a,setData:u,teams:s}),(0,r.jsx)(ed,{userID:l,team:S||null,userRole:t,accessToken:g,data:a,setData:u},S?S.team_id:null),(0,r.jsx)(eC,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eF=t(35087),eR=t(92836),eM=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),eK=t(47047),eB=t(76628),ez=t(57750),eq=t(44041),eV=t(38302),eG=t(28683),eY=t(1460),eW=t(78578),eJ=t(63954),eH=t(90252),e$=t(7905),eX=e=>{let{modelID:l,accessToken:t}=e,[s,a]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),a(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),a(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(ej.Z,{onClick:()=>a(!0),icon:eh.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>a(!1),children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Delete Model"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Model ID: ",(0,r.jsx)("b",{children:l})]})})]})})]})},eQ=t(97766),e0=t(46495);let{Title:e1,Link:e2}=eT.default;(s=a||(a={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e4={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e8={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e5=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},a={};s.model=t;let r="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)r+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)a[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:r,litellm_params:s,model_info:a},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e3=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=ea.Z.useForm(),[y,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,N]=(0,n.useState)([]),A=Object.values(a).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[Y,et]=(0,n.useState)([]),[es,en]=(0,n.useState)([]),[ec,ed]=(0,n.useState)([]),[em,eh]=(0,n.useState)([]),[ev,eS]=(0,n.useState)([]),[eN,eA]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eO,e3]=(0,n.useState)(0),e6=e=>{R(e),O(!0)},e7=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,a]of Object.entries(e))"model_id"!==s?l[s]=a:t=a;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await V(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,a,r;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),et(h.data),en(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),ed(p.data),eh(p.exception_types);let j=await v(o,d,c,u,null===(a=eE.from)||void 0===a?void 0:a.toISOString(),null===(r=eE.to)||void 0===r?void 0:r.toISOString());console.log("slowResponses:",j),eA(j);let g=(await q(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let y=g.model_group_retry_policy,f=g.num_retries;console.log("model_group_retry_policy:",y),console.log("default_retries:",f),eP(y),e3(f)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==y&&l(),e9()},[o,i,c,d,y,Z]),!m||!o||!i||!c||!d)return(0,r.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(y)),null!=y&&"object"==typeof y&&e in y)?y[e].litellm_provider:"openai";if(a){let e=a.split("/"),l=e[0];n=1===e.length?u(a):l}else n="openai";r&&(o=null==r?void 0:r.input_cost_per_token,i=null==r?void 0:r.output_cost_per_token,c=null==r?void 0:r.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(a).find(l=>a[l]===e);if(l){let e=e4[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof y&&Object.entries(y).forEach(l=>{let[s,a]=l;null!==a&&"object"==typeof a&&"litellm_provider"in a&&(a.litellm_provider===e||a.litellm_provider.includes(e))&&t.push(s)}),N(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await G(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},la=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),et(s.data),en(s.all_api_bases);let a=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",a),ed(a.data),eh(a.exception_types);let r=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",r),eA(r)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,r.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(eR.Z,{children:"All Models"}),(0,r.jsx)(eR.Z,{children:"Add Model"}),(0,r.jsx)(eR.Z,{children:(0,r.jsx)("pre",{children:"/health Models"})}),(0,r.jsx)(eR.Z,{children:"Model Analytics"}),(0,r.jsx)(eR.Z,{children:"Model Retry Settings"})]}),(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,r.jsxs)(ee.Z,{children:["Last Refreshed: ",Z]}),(0,r.jsx)(ej.Z,{icon:eJ.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsxs)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,r.jsx)(ek.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Public Model Name "}),(0,r.jsx)(e_.Z,{children:"Provider"}),"Admin"===c&&(0,r.jsx)(e_.Z,{children:"API Base"}),(0,r.jsx)(e_.Z,{children:"Extra litellm Params"}),(0,r.jsx)(e_.Z,{children:"Input Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Output Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Max Tokens"}),(0,r.jsx)(e_.Z,{children:"Status"})]})}),(0,r.jsx)(ey.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.model_name})}),(0,r.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Litellm params"})}),(0,r.jsx)(X.Z,{children:(0,r.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,r.jsx)(ef.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.max_tokens}),(0,r.jsx)(ef.Z,{children:e.model_info.db_model?(0,r.jsx)(ex.Z,{icon:eH.Z,className:"text-white",children:"DB Model"}):(0,r.jsx)(ex.Z,{icon:e$.Z,className:"text-black",children:"Config Model"})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>e6(e)}),(0,r.jsx)(eX,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,r.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:a}=e,[n]=ea.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,r.jsx)(er.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:e7,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"max_retries",name:"max_retries",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:e7})]}),(0,r.jsxs)(eU.Z,{className:"h-full",children:[(0,r.jsx)(e1,{level:2,children:"Add new model"}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(ea.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e5(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:E.toString(),children:A.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,r.jsx)(H.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,r.jsx)(H.Z,{placeholder:"Enter model name"}):w.length>0?(0,r.jsx)(eK.Z,{value:w,children:w.map((e,l)=>(0,r.jsx)(eB.Z,{value:e,children:e},l))}):(0,r.jsx)(H.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,r.jsx)(H.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,r.jsx)(ea.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,r.jsx)(H.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,r.jsx)(H.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,r.jsx)(e0.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,r.jsx)(ei.ZP,{icon:(0,r.jsx)(eQ.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,r.jsx)(H.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,r.jsx)(H.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,r.jsxs)(ea.Z.Item,{label:"Base Model",name:"base_model",children:[(0,r.jsx)(H.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,r.jsxs)(ee.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,r.jsx)(e2,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),(0,r.jsx)(ea.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,r.jsx)(eW.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,r.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Model"})}),(0,r.jsx)(eY.Z,{title:"Get help on our github",children:(0,r.jsx)(eT.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(ee.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,r.jsx)(J.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,r.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{numItems:2,className:"mt-2",children:[(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),la(U,e.from,e.to)}})]}),(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Model Group"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>la(e,eE.from,eE.to),children:e},l))})]})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsx)(eG.Z,{children:(0,r.jsxs)(ep.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,r.jsx)(el.Z,{children:"Avg Latency per Token"}),(0,r.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,r.jsx)(ee.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),Y&&es&&(0,r.jsx)(ez.Z,{title:"Model Latency",className:"h-72",data:Y,showLegend:!1,index:"date",categories:es,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:a}=e;if(!a||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,r.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,r.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,r.jsxs)("div",{className:"flex justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,r.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,r.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,r.jsx)(eG.Z,{children:(0,r.jsx)(ep.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Deployment"}),(0,r.jsx)(e_.Z,{children:"Success Responses"}),(0,r.jsxs)(e_.Z,{children:["Slow Responses ",(0,r.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,r.jsx)(ey.Z,{children:eN.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:e.total_count}),(0,r.jsx)(ef.Z,{children:e.slow_count})]},l))})]})})})]}),(0,r.jsxs)(ep.Z,{className:"mt-4",children:[(0,r.jsx)(el.Z,{children:"Exceptions per Model"}),(0,r.jsx)(eq.Z,{className:"h-72",data:ec,index:"model",categories:em,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,r.jsxs)(el.Z,{children:["Retry Policy for ",U]}),(0,r.jsx)(ee.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e8&&(0,r.jsx)("table",{children:(0,r.jsx)("tbody",{children:Object.entries(e8).map((e,l)=>{var t;let[s,a]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[a];return null==n&&(n=eO),(0,r.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,r.jsx)("td",{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)("td",{children:(0,r.jsx)(eo.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[a]:e}}})}})})]},l)})})}),(0,r.jsx)(J.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:e6}=es.default;var e7=e=>{let{userID:l,accessToken:t,teams:s}=e,[a]=ea.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await N(t,l,"any"),s=[];for(let l=0;l{i(!1),a.resetFields()},p=()=>{i(!1),d(null),a.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),a.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,r.jsxs)(er.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,r.jsx)(ee.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,r.jsx)(ee.Z,{className:"mb-6",children:(0,r.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,r.jsxs)(ea.Z,{form:a,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsx)(ea.Z.Item,{label:"User Email",name:"user_email",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",children:(0,r.jsx)(es.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,r.jsx)(e6,{value:e.team_id,children:e.team_alias},e.team_id)):(0,r.jsx)(e6,{value:null,children:"Default Team"},"default")})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,r.jsxs)(er.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,r.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,r.jsx)("br",{}),(0,r.jsx)("p",{children:(0,r.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e9=e=>{let{accessToken:l,token:t,keys:s,userRole:a,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,f]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!a||!o)return;let e=async()=>{try{let e=await Z(l,null,a,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&a&&o&&e()},[l,t,a,o,x]),d&&l&&t&&a&&o)?(0,r.jsx)("div",{style:{width:"100%"},children:(0,r.jsxs)(W.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,r.jsx)(e7,{userID:o,accessToken:l,teams:i}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,r.jsx)("div",{className:"mb-4 mt-1",children:(0,r.jsx)(ee.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,r.jsx)(eM.Z,{children:(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"User ID"}),(0,r.jsx)(e_.Z,{children:"User Email"}),(0,r.jsx)(e_.Z,{children:"User Models"}),(0,r.jsx)(e_.Z,{children:"User Spend ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User Max Budget ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User API Key Aliases"})]})}),(0,r.jsx)(ey.Z,{children:d.map(e=>{var l;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_id}),(0,r.jsx)(ef.Z,{children:e.user_email}),(0,r.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,r.jsx)(ef.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,r.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(W.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,r.jsx)(ex.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,r.jsx)(ex.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,r.jsxs)("div",{className:"flex justify-between items-center",children:[(0,r.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,r.jsx)("div",{children:"Loading..."})},le=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:a,userID:o,userRole:i}=e,[c]=ea.Z.useForm(),[d]=ea.Z.useForm(),{Title:m,Paragraph:h}=eT.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let r=await U(s,e);l&&a(l.map(e=>e.team_id===t?r.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await f(s,C);let e=l.filter(e=>e.team_id!==C);a(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let a=l[t].team_id,r=await _(s,a);console.log("teamInfo response:",r),null!==r&&(e={...e,[a]:r})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await N(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let r=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(r))throw Error("Team alias ".concat(r," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?a([...l,n]):a([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},r=await K(s,y.team_id,t);console.log("response for team create call: ".concat(r.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(r.data.team_id)),e.team_id===r.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=r.data,a(e),Z(r.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"All Teams"}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Team Name"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"}),(0,r.jsx)(e_.Z,{children:"Info"})]})}),(0,r.jsx)(ey.Z,{children:l&&l.length>0?l.map(e=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,r.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>F(e)}),(0,r.jsx)(ej.Z,{onClick:()=>L(e.team_id),icon:eh.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,r.jsx)(er.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"Team Members"}),(0,r.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,r.jsxs)(h,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:y?y.members_with_roles.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:a}=e,[n]=ea.Z.useForm();return(0,r.jsx)(er.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:y,onSubmit:R})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,r.jsx)(er.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},ll=t(18190),lt=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:a}=e,[o]=ea.Z.useForm(),[i]=ea.Z.useForm(),{Title:c,Paragraph:d}=eT.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},N=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let A=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:l,children:N.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t,disabled:!0})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),f(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,r.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,r.jsx)(c,{level:4,children:"Admin Access "}),(0,r.jsxs)(d,{children:[a&&(0,r.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:x?x.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.user_role}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>_(!0)}),(0,r.jsx)(er.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:A,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("div",{className:"flex justify-start",children:[(0,r.jsx)(J.Z,{className:"mr-4 mb-5",onClick:()=>f(!0),children:"+ Add admin"}),(0,r.jsx)(er.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{f(!1),i.resetFields()},onCancel:()=>{f(!1),i.resetFields()},children:I(O)}),(0,r.jsx)(J.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,r.jsx)(er.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,r.jsxs)(W.Z,{children:[(0,r.jsx)(c,{level:4,children:"Add SSO"}),(0,r.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,r.jsx)(J.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,r.jsx)(er.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,r.jsx)(en.Z.Password,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,r.jsx)(en.Z.Password,{})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,r.jsxs)(er.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,r.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{onClick:S,children:"Done"})})]})]}),(0,r.jsxs)(ll.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,r.jsxs)("a",{href:l,target:"_blank",children:[(0,r.jsx)("b",{children:l})," "]})]})]})]})},ls=t(42556);let la=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var lr=e=>{let{accessToken:l,userRole:t,userID:s}=e,[a,o]=(0,n.useState)(la),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=ea.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[y,f]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e);let l=la;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),f(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),N=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{V(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},A=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),V(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(a?[...a,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(a)),(0,r.jsxs)("div",{className:"w-full mx-4",children:[(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(ll.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"Logging Callbacks"}),(0,r.jsx)(eR.Z,{value:"2",children:"Alerting"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Callback"}),(0,r.jsx)(e_.Z,{children:"Callback Env Vars"})]})}),(0,r.jsx)(ey.Z,{children:a.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ex.Z,{color:"emerald",children:e.name})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,r.jsxs)("li",{children:[(0,r.jsx)(ee.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,r.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,r.jsx)("div",{}),(0,r.jsx)(H.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>N(e),children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(ee.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,r.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{children:"Slack Webhook URL"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ls.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:y})})]},l)})})]}),(0,r.jsx)(J.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,a=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",a);let r=(null==a?void 0:a.value)||"";console.log("newWebhookValue",r),e[t]=r}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{V(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,r.jsx)(er.Z,{title:"Add Callback",visible:d,onOk:A,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,r.jsxs)(ea.Z,{form:h,layout:"vertical",onFinish:A,children:[(0,r.jsx)(ea.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,r.jsxs)(es.default,{onChange:e=>{p(e)},children:[(0,r.jsx)(es.default.Option,{value:"langfuse",children:"langfuse"}),(0,r.jsx)(es.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,r.jsx)(H.Z,{type:"password"})}),(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,r.jsx)(H.Z,{type:"password"})})]}),"openmeter"==x&&(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(ea.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,r.jsx)(H.Z,{type:"password"})})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:ln}=es.default;var lo=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:a}=e,[o]=ea.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,r.jsx)(er.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:r}=e,n=[...s.fallbacks||[],{[l]:r}],i={...s,fallbacks:n};console.log(i);try{V(t,{router_settings:i}),a(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,r.jsx)(eb.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsx)(eK.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,r.jsx)(eB.Z,{value:e,children:e},e))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},li=t(12968);async function lc(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new li.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,r.jsxs)("span",{children:["Test model=",(0,r.jsx)("strong",{children:e}),", received model=",(0,r.jsx)("strong",{children:l.model}),". See ",(0,r.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let ld={ttl:3600,lowest_latency_buffer:0},lm=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,r.jsx)(X.Z,{children:"latency-based-routing"==l?(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,r.jsx)(ee.Z,{children:"No specific settings"})})]})};var lu=e=>{let{accessToken:l,userRole:t,userID:s,modelData:a}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)(!1),[m]=ea.Z.useForm(),[h,x]=(0,n.useState)(null),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),f={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)})},[l,t,s]);let Z=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await V(l,{router_settings:o}),i({...o}),j(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},_=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,p];if("routing_strategy_args"==l&&"latency-based-routing"==p){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"General Settings"}),(0,r.jsx)(eR.Z,{value:"2",children:"Fallbacks"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(el.Z,{children:"Router Settings"}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:f[l]})]}),(0,r.jsx)(ef.Z,{children:"routing_strategy"==l?(0,r.jsxs)(eb.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:j,children:[(0,r.jsx)(ek.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,r.jsx)(ek.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,r.jsx)(ek.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,r.jsx)(lm,{selectedStrategy:p,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:ld,paramExplanation:f})]}),(0,r.jsx)(Y.Z,{children:(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>_(o),children:"Save Changes"})})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Model Name"}),(0,r.jsx)(e_.Z,{children:"Fallbacks"})]})}),(0,r.jsx)(ey.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,a]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:s}),(0,r.jsx)(ef.Z,{children:Array.isArray(a)?a.join(", "):a}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(J.Z,{onClick:()=>lc(s,l),children:"Test Fallback"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ej.Z,{icon:eh.Z,size:"sm",onClick:()=>Z(s)})})]},t.toString()+s)}))})]}),(0,r.jsx)(lo,{models:(null==a?void 0:a.data)?a.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]})]})]})}):null},lh=t(67951),lx=e=>{let{}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsxs)("div",{className:"mb-5",children:[(0,r.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,r.jsx)(ee.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{children:[(0,r.jsx)(eR.Z,{children:"OpenAI Python SDK"}),(0,r.jsx)(eR.Z,{children:"LlamaIndex"}),(0,r.jsx)(eR.Z,{children:"Langchain Py"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lp(e,l,t,s){console.log("isLocal:",!1);let a=window.location.origin,r=new li.ZP.OpenAI({apiKey:s,baseURL:a,dangerouslyAllowBrowser:!0});try{for await(let s of(await r.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var lj=e=>{let{accessToken:l,token:t,userRole:s,userID:a}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{let e=await N(l,a,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,a,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&a){u(e=>[...e,{role:"user",content:c}]);try{h&&await lp(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,r.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eM.Z,{children:[(0,r.jsx)(eL.Z,{children:(0,r.jsx)(eR.Z,{children:"Chat"})}),(0,r.jsx)(eD.Z,{children:(0,r.jsxs)(eU.Z,{children:[(0,r.jsx)("div",{className:"sm:max-w-2xl",children:(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"API Key"}),(0,r.jsx)(H.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,r.jsxs)(Y.Z,{className:"mx-2",children:[(0,r.jsx)(ee.Z,{children:"Select Model:"}),(0,r.jsx)(es.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,r.jsxs)(eg.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{})})}),(0,r.jsx)(ey.Z,{children:m.map((e,l)=>(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,r.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(H.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,r.jsx)(J.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},lg=t(33509),ly=t(95781);let{Sider:lf}=lg.default;var lZ=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,r.jsx)(lf,{width:120,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,r.jsx)(lf,{width:145,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:(0,r.jsx)(ee.Z,{children:"API Keys"})},"1"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:(0,r.jsx)(ee.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:(0,r.jsx)(ee.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:(0,r.jsx)(ee.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("teams"),children:(0,r.jsx)(ee.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("users"),children:(0,r.jsx)(ee.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("settings"),children:(0,r.jsx)(ee.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("general-settings"),children:(0,r.jsx)(ee.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("admin-panel"),children:(0,r.jsx)(ee.Z,{children:"Admin"})},"7"):null,(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api_ref"),children:(0,r.jsx)(ee.Z,{children:"API Reference"})},"11")]})})})},l_=t(67989),lw=e=>{let{accessToken:l,token:t,userRole:s,userID:a,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,y]=(0,n.useState)([]),[f,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[N,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=z(M),D=z(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let a=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",a),j(a)},B=async(e,t)=>{e&&t&&l&&(Z((await E(l,e.toISOString(),t.toISOString())).spend_per_tag),console.log("Tag spend data updated successfully"))};function z(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){var e,r;let t=await C(l);d(t);let s=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(s);let a=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(a);let n=await A(l);console.log("teamSpend",n),y(n.daily_spend),w(n.teams);let o=n.total_spend_per_team;o=o.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(o);let i=await E(l,null===(e=N.from)||void 0===e?void 0:e.toISOString(),null===(r=N.to)||void 0===r?void 0:r.toISOString());Z(i.spend_per_tag);let c=await T(l,null,void 0,void 0);j(c),console.log("spend/user result",c)}else"App Owner"==s&&await I(l,t,s,a,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,a,U,D]),(0,r.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,r.jsx)(eE,{userID:a,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{className:"mt-2",children:[(0,r.jsx)(eR.Z,{children:"All Up"}),(0,r.jsx)(eR.Z,{children:"Team Based Usage"}),(0,r.jsx)(eR.Z,{children:"End User Usage"}),(0,r.jsx)(eR.Z,{children:"Tag Based Usage"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:2,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Monthly Spend"}),(0,r.jsx)(eq.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top API Keys"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top Models"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsxs)(ep.Z,{className:"mb-2",children:[(0,r.jsx)(el.Z,{children:"Total Spend Per Team"}),(0,r.jsx)(l_.Z,{data:b})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Daily Spend Per Team"}),(0,r.jsx)(eq.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:N,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Key"}),(0,r.jsxs)(eb.Z,{defaultValue:"all-keys",children:[(0,r.jsx)(ek.Z,{value:"all-keys",onClick:()=>{K(N.from,N.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{K(N.from,N.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,r.jsx)(ep.Z,{className:"mt-4",children:(0,r.jsxs)(eg.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"End User"}),(0,r.jsx)(e_.Z,{children:"Spend"}),(0,r.jsx)(e_.Z,{children:"Total Events"})]})}),(0,r.jsx)(ey.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.end_user}),(0,r.jsx)(ef.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,r.jsx)(ef.Z,{children:e.total_count})]},l)})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsx)(eF.Z,{className:"mb-4",enableSelect:!0,value:N,onValueChange:e=>{R(e),B(e.from,e.to)}}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Spend Per Tag"}),(0,r.jsxs)(ee.Z,{children:["Get Started Tracking cost per tag ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,r.jsx)(eq.Z,{className:"h-72",data:f,index:"name",categories:["spend"],colors:["blue"]})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})})]})]})]})},lb=()=>{let{Title:e,Paragraph:l}=eT.default,[t,s]=(0,n.useState)(""),[a,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,y]=(0,n.useState)({data:[]}),f=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eP.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{children:"Loading..."}),children:(0,r.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,r.jsx)(m,{userID:f,userRole:t,userEmail:a,showSSOBanner:x}),(0,r.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,r.jsx)("div",{className:"mt-8",children:(0,r.jsx)(lZ,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,r.jsx)(eO,{userID:f,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:a,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,r.jsx)(e3,{userID:f,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:y}):"llm-playground"==_?(0,r.jsx)(lj,{userID:f,userRole:t,token:Z,accessToken:b}):"users"==_?(0,r.jsx)(e9,{userID:f,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,r.jsx)(le,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:f,userRole:t}):"admin-panel"==_?(0,r.jsx)(lt,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,r.jsx)(lx,{}):"settings"==_?(0,r.jsx)(lr,{userID:f,userRole:t,accessToken:b}):"general-settings"==_?(0,r.jsx)(lu,{userID:f,userRole:t,accessToken:b,modelData:g}):(0,r.jsx)(lw,{userID:f,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/app/page-de58db2e54247c7a.js b/litellm/proxy/_experimental/out/_next/static/chunks/app/page-de58db2e54247c7a.js deleted file mode 100644 index f73470d9994..00000000000 --- a/litellm/proxy/_experimental/out/_next/static/chunks/app/page-de58db2e54247c7a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,7926))},7926:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lb}});var s,r,a=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:r}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",r);let n=[{key:"1",label:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{children:["Role: ",t]}),(0,a.jsxs)("p",{children:["ID: ",l]})]})}];return(0,a.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,a.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,a.jsx)("div",{className:"flex flex-col items-center",children:(0,a.jsx)(i.default,{href:"/",children:(0,a.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,a.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,a.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[r?(0,a.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,a.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,a.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,a.jsx)(c.Z,{menu:{items:n},children:(0,a.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&a&&null!=r&&void 0!=r&&(n="".concat(n,"?view_all=true&page=").concat(r,"&page_size=").concat(a));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,r,a)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async e=>{try{let l="/global/spend/tags";console.log("in tagsSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,r,a)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(r,"&end_date=").concat(a):"".concat(l,"?start_date=").concat(r,"&end_date=").concat(a);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let r="";r=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let a={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};a.body=r;let n=await fetch("/global/spend/end_users",a);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let r=await s.json();return console.log(r),r}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let r=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!r.ok){let e=await r.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await r.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let r=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),r}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},G=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var Y=t(10384),W=t(46453),J=t(16450),H=t(52273),$=t(26780),X=t(15595),Q=t(6698),ee=t(71801),el=t(42440),et=t(42308),es=t(50670),er=t(81583),ea=t(99129),en=t(44839),eo=t(88707),ei=t(1861);let{Option:ec}=es.default;var ed=e=>{let{userID:l,team:t,userRole:s,accessToken:r,data:o,setData:i}=e,[c]=er.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,f]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==r){let e=(await A(r,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),f(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,s]);let k=async e=>{try{var t,s,a;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(a=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==a?a:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(r,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?y:t.models:y)},[t,y]),(0,a.jsxs)("div",{children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,a.jsx)(ea.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,a.jsxs)(er.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,a.jsx)(en.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,a.jsx)(ec,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,a.jsx)(ec,{value:e,children:e},e))]})}),(0,a.jsxs)($.Z,{className:"mt-20 mb-8",children:[(0,a.jsx)(Q.Z,{children:(0,a.jsx)("b",{children:"Optional Settings"})}),(0,a.jsxs)(X.Z,{children:[(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,a.jsxs)(es.default,{defaultValue:null,placeholder:"n/a",children:[(0,a.jsx)(es.default.Option,{value:"24h",children:"daily"}),(0,a.jsx)(es.default.Option,{value:"30d",children:"monthly"})]})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,a.jsx)(ea.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(el.Z,{children:"Save your Key"}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,a.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:null!=h?(0,a.jsxs)("div",{children:[(0,a.jsx)(ee.Z,{className:"mt-3",children:"API Key:"}),(0,a.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,a.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,a.jsx)(et.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,a.jsx)(J.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,a.jsx)(ee.Z,{children:"Key being created, this might take 30s"})})]})})]})},em=t(9454),eu=t(98941),eh=t(33393),ex=t(5),ep=t(13810),ej=t(61244),eg=t(10827),ey=t(3851),ef=t(2044),eZ=t(64167),e_=t(74480),ew=t(7178),eb=t(95093),ek=t(27166);let{Option:ev}=es.default;var eS=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:r,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,N]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await A(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,a.jsxs)("div",{children:[(0,a.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,a.jsxs)(eg.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Key Alias"}),(0,a.jsx)(e_.Z,{children:"Secret Key"}),(0,a.jsx)(e_.Z,{children:"Spend (USD)"}),(0,a.jsx)(e_.Z,{children:"Budget (USD)"}),(0,a.jsx)(e_.Z,{children:"Models"}),(0,a.jsx)(e_.Z,{children:"TPM / RPM Limits"})]})}),(0,a.jsx)(ey.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(r){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(r.team_id)),(null!=r.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=r.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,a.jsx)(ee.Z,{children:e.key_alias}):(0,a.jsx)(ee.Z,{children:"Not Set"})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:e.key_name})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,a.jsx)(ef.Z,{children:null!=e.max_budget?(0,a.jsx)(ee.Z,{children:e.max_budget}):(0,a.jsx)(ee.Z,{children:"Unlimited"})}),(0,a.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(a.Fragment,{children:r&&r.models&&r.models.length>0?r.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Team Models"})},l):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Team Models"})},l):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{onClick:()=>{I(e),N(!0)},icon:em.Z,size:"sm"}),(0,a.jsx)(ea.Z,{open:S,onCancel:()=>{N(!1),I(null)},footer:null,width:800,children:E&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,a.jsx)(a.Fragment,{children:E.max_budget}):(0,a.jsx)(a.Fragment,{children:"Unlimited"})})})]},e.name),(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,a.jsx)(a.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,a.jsx)(a.Fragment,{children:"Never"})})})]},e.name)]}),(0,a.jsxs)(ep.Z,{className:"my-4",children:[(0,a.jsx)(el.Z,{children:"Token Name"}),(0,a.jsx)(ee.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,a.jsx)(el.Z,{children:"Token ID"}),(0,a.jsx)(ee.Z,{className:"my-1 text-[12px]",children:E.token}),(0,a.jsx)(el.Z,{children:"Metadata"}),(0,a.jsx)(ee.Z,{className:"my-1",children:(0,a.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,a.jsx)(J.Z,{className:"mx-auto flex items-center",onClick:()=>{N(!1),I(null)},children:"Close"})]})}),(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>R(e)}),(0,a.jsx)(ej.Z,{onClick:()=>U(e),icon:eh.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(J.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=er.Z.useForm(),[d,m]=(0,n.useState)(r),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,a.jsx)(ea.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(er.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(ev,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,a.jsx)(ev,{value:e,children:e},e)):d.models.map(e=>(0,a.jsx)(ev,{value:e,children:e},e)):C.map(e=>(0,a.jsx)(ev,{value:e,children:e},e))]})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{label:"token",name:"token",hidden:!0}),(0,a.jsx)(er.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,a.jsx)(eb.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,a.jsx)(ek.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eA=t(76032),eN=t(35152),eE=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:r,selectedTeam:o}=e;console.log("userSpend: ".concat(r));let[i,c]=(0,n.useState)(null!==r?r:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==r)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await A(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==r&&c(r)},[r]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,a.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,a.jsx)("div",{className:"ml-auto",children:(0,a.jsxs)($.Z,{children:[(0,a.jsx)(Q.Z,{children:(0,a.jsx)(ee.Z,{children:"Team Models"})}),(0,a.jsx)(X.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,a.jsx)(eA.Z,{children:x.map(e=>(0,a.jsx)(eN.Z,{children:(0,a.jsx)(ee.Z,{children:e})},e))})})]})})]})},eI=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:r}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==r){let e=(await A(r,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("div",{className:"mb-5",children:(0,a.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eC=e=>{let l,{teams:t,setSelectedTeam:s,userRole:r}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===r?t:t?[...t,o]:[o],"App User"===r)?null:(0,a.jsxs)("div",{className:"mt-5 mb-5",children:[(0,a.jsx)(el.Z,{children:"Select Team"}),(0,a.jsx)(ee.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,a.jsxs)(ee.Z,{className:"mt-3 mb-3",children:[(0,a.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,a.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(ek.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,a.jsxs)(ee.Z,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]})},eP=t(37963),eT=t(36083);console.log("isLocal:",!1);var eO=e=>{let{userID:l,userRole:t,teams:s,keys:r,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[f,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,N]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eP.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!r&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),N(s[0])):N(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let r=(await A(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",r),k(r),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(r))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,r,t]),(0,n.useEffect)(()=>{if(null!==r&&null!=S){let e=0;for(let l of r)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==r){let e=0;for(let l of r)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eT.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(f)),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsx)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(eI,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,a.jsx)(eE,{userID:l,userRole:t,accessToken:g,userSpend:f,selectedTeam:S||null}),(0,a.jsx)(eS,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:r,setData:u,teams:s}),(0,a.jsx)(ed,{userID:l,team:S||null,userRole:t,accessToken:g,data:r,setData:u},S?S.team_id:null),(0,a.jsx)(eC,{teams:s,setSelectedTeam:N,userRole:t})]})})})},eF=t(35087),eR=t(92836),eM=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),eK=t(47047),eB=t(76628),ez=t(57750),eq=t(44041),eV=t(38302),eG=t(28683),eY=t(1460),eW=t(78578),eJ=t(63954),eH=t(90252),e$=t(7905),eX=e=>{let{modelID:l,accessToken:t}=e,[s,r]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),r(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),r(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(ej.Z,{onClick:()=>r(!0),icon:eh.Z,size:"sm"}),(0,a.jsx)(ea.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>r(!1),children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(el.Z,{children:"Delete Model"}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Model ID: ",(0,a.jsx)("b",{children:l})]})})]})})]})},eQ=t(97766),e0=t(46495);let{Title:e1,Link:e2}=eT.default;(s=r||(r={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e4={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e8={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e5=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},r={};s.model=t;let a="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)a+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)r[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:a,litellm_params:s,model_info:r},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e3=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=er.Z.useForm(),[y,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,A]=(0,n.useState)([]),N=Object.values(r).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[Y,et]=(0,n.useState)([]),[es,en]=(0,n.useState)([]),[ec,ed]=(0,n.useState)([]),[em,eh]=(0,n.useState)([]),[ev,eS]=(0,n.useState)([]),[eA,eN]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eO,e3]=(0,n.useState)(0),e6=e=>{R(e),O(!0)},e7=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,r]of Object.entries(e))"model_id"!==s?l[s]=r:t=r;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await V(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,r,a;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),et(h.data),en(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),ed(p.data),eh(p.exception_types);let j=await v(o,d,c,u,null===(r=eE.from)||void 0===r?void 0:r.toISOString(),null===(a=eE.to)||void 0===a?void 0:a.toISOString());console.log("slowResponses:",j),eN(j);let g=(await q(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let y=g.model_group_retry_policy,f=g.num_retries;console.log("model_group_retry_policy:",y),console.log("default_retries:",f),eP(y),e3(f)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==y&&l(),e9()},[o,i,c,d,y,Z]),!m||!o||!i||!c||!d)return(0,a.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(y)),null!=y&&"object"==typeof y&&e in y)?y[e].litellm_provider:"openai";if(r){let e=r.split("/"),l=e[0];n=1===e.length?u(r):l}else n="openai";a&&(o=null==a?void 0:a.input_cost_per_token,i=null==a?void 0:a.output_cost_per_token,c=null==a?void 0:a.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eT.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(r).find(l=>r[l]===e);if(l){let e=e4[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof y&&Object.entries(y).forEach(l=>{let[s,r]=l;null!==r&&"object"==typeof r&&"litellm_provider"in r&&(r.litellm_provider===e||r.litellm_provider.includes(e))&&t.push(s)}),A(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await G(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},lr=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),et(s.data),en(s.all_api_bases);let r=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",r),ed(r.data),eh(r.exception_types);let a=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",a),eN(a)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,a.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,a.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eL.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(eR.Z,{children:"All Models"}),(0,a.jsx)(eR.Z,{children:"Add Model"}),(0,a.jsx)(eR.Z,{children:(0,a.jsx)("pre",{children:"/health Models"})}),(0,a.jsx)(eR.Z,{children:"Model Analytics"}),(0,a.jsx)(eR.Z,{children:"Model Retry Settings"})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,a.jsxs)(ee.Z,{children:["Last Refreshed: ",Z]}),(0,a.jsx)(ej.Z,{icon:eJ.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)(W.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,a.jsxs)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,a.jsx)(ek.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eg.Z,{className:"mt-5",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Public Model Name "}),(0,a.jsx)(e_.Z,{children:"Provider"}),"Admin"===c&&(0,a.jsx)(e_.Z,{children:"API Base"}),(0,a.jsx)(e_.Z,{children:"Extra litellm Params"}),(0,a.jsx)(e_.Z,{children:"Input Price per token ($)"}),(0,a.jsx)(e_.Z,{children:"Output Price per token ($)"}),(0,a.jsx)(e_.Z,{children:"Max Tokens"}),(0,a.jsx)(e_.Z,{children:"Status"})]})}),(0,a.jsx)(ey.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:e.model_name})}),(0,a.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,a.jsx)(ef.Z,{children:e.api_base}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)($.Z,{children:[(0,a.jsx)(Q.Z,{children:(0,a.jsx)(ee.Z,{children:"Litellm params"})}),(0,a.jsx)(X.Z,{children:(0,a.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,a.jsx)(ef.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,a.jsx)(ef.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,a.jsx)(ef.Z,{children:e.max_tokens}),(0,a.jsx)(ef.Z,{children:e.model_info.db_model?(0,a.jsx)(ex.Z,{icon:eH.Z,className:"text-white",children:"DB Model"}):(0,a.jsx)(ex.Z,{icon:e$.Z,className:"text-black",children:"Config Model"})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>e6(e)}),(0,a.jsx)(eX,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,a.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:r}=e,[n]=er.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,a.jsx)(ea.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(er.Z,{form:n,onFinish:e7,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,a.jsx)(H.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"max_retries",name:"max_retries",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,a.jsx)(eo.Z,{min:0,step:1e-4})}),(0,a.jsx)(er.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,a.jsx)(eo.Z,{min:0,step:1e-4})}),(0,a.jsx)(er.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:e7})]}),(0,a.jsxs)(eU.Z,{className:"h-full",children:[(0,a.jsx)(e1,{level:2,children:"Add new model"}),(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(er.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e5(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eb.Z,{value:E.toString(),children:N.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,a.jsx)(H.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,a.jsx)(H.Z,{placeholder:"Enter model name"}):w.length>0?(0,a.jsx)(eK.Z,{value:w,children:w.map((e,l)=>(0,a.jsx)(eB.Z,{value:e,children:e},l))}):(0,a.jsx)(H.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,a.jsx)(e2,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,a.jsx)(e2,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,a.jsx)(H.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,a.jsx)(er.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,a.jsx)(H.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,a.jsx)(H.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,a.jsx)(H.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,a.jsx)(e0.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,a.jsx)(ei.ZP,{icon:(0,a.jsx)(eQ.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,a.jsx)(H.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,a.jsx)(H.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,a.jsxs)(er.Z.Item,{label:"Base Model",name:"base_model",children:[(0,a.jsx)(H.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,a.jsxs)(ee.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,a.jsx)(e2,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(H.Z,{placeholder:"us-east-1"})}),(0,a.jsx)(er.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,a.jsx)(eW.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,a.jsx)(e2,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,a.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add Model"})}),(0,a.jsx)(eY.Z,{title:"Get help on our github",children:(0,a.jsx)(eT.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(ee.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,a.jsx)(J.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,a.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)(W.Z,{numItems:2,className:"mt-2",children:[(0,a.jsxs)(eG.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Time Range"}),(0,a.jsx)(eF.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),lr(U,e.from,e.to)}})]}),(0,a.jsxs)(eG.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Model Group"}),(0,a.jsx)(eb.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>lr(e,eE.from,eE.to),children:e},l))})]})]}),(0,a.jsxs)(W.Z,{numItems:2,children:[(0,a.jsx)(eG.Z,{children:(0,a.jsxs)(ep.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,a.jsx)(el.Z,{children:"Avg Latency per Token"}),(0,a.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,a.jsx)(ee.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),Y&&es&&(0,a.jsx)(ez.Z,{title:"Model Latency",className:"h-72",data:Y,showLegend:!1,index:"date",categories:es,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:r}=e;if(!r||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,a.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,a.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,a.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,a.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,a.jsx)(eG.Z,{children:(0,a.jsx)(ep.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Deployment"}),(0,a.jsx)(e_.Z,{children:"Success Responses"}),(0,a.jsxs)(e_.Z,{children:["Slow Responses ",(0,a.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,a.jsx)(ey.Z,{children:eA.map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.api_base}),(0,a.jsx)(ef.Z,{children:e.total_count}),(0,a.jsx)(ef.Z,{children:e.slow_count})]},l))})]})})})]}),(0,a.jsxs)(ep.Z,{className:"mt-4",children:[(0,a.jsx)(el.Z,{children:"Exceptions per Model"}),(0,a.jsx)(eq.Z,{className:"h-72",data:ec,index:"model",categories:em,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,a.jsx)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,a.jsxs)(el.Z,{children:["Retry Policy for ",U]}),(0,a.jsx)(ee.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e8&&(0,a.jsx)("table",{children:(0,a.jsx)("tbody",{children:Object.entries(e8).map((e,l)=>{var t;let[s,r]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[r];return null==n&&(n=eO),(0,a.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,a.jsx)("td",{children:(0,a.jsx)(ee.Z,{children:s})}),(0,a.jsx)("td",{children:(0,a.jsx)(eo.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[r]:e}}})}})})]},l)})})}),(0,a.jsx)(J.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:e6}=es.default;var e7=e=>{let{userID:l,accessToken:t,teams:s}=e,[r]=er.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await A(t,l,"any"),s=[];for(let l=0;l{i(!1),r.resetFields()},p=()=>{i(!1),d(null),r.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),r.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,a.jsxs)(ea.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,a.jsx)(ee.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,a.jsx)(ee.Z,{className:"mb-6",children:(0,a.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,a.jsxs)(er.Z,{form:r,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsx)(er.Z.Item,{label:"User Email",name:"user_email",children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Team ID",name:"team_id",children:(0,a.jsx)(es.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,a.jsx)(e6,{value:e.team_id,children:e.team_alias},e.team_id)):(0,a.jsx)(e6,{value:null,children:"Default Team"},"default")})}),(0,a.jsx)(er.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,a.jsxs)(ea.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,a.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,a.jsx)("br",{}),(0,a.jsx)("p",{children:(0,a.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e9=e=>{let{accessToken:l,token:t,keys:s,userRole:r,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,f]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!r||!o)return;let e=async()=>{try{let e=await Z(l,null,r,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&r&&o&&e()},[l,t,r,o,x]),d&&l&&t&&r&&o)?(0,a.jsx)("div",{style:{width:"100%"},children:(0,a.jsxs)(W.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,a.jsx)(e7,{userID:o,accessToken:l,teams:i}),(0,a.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,a.jsx)("div",{className:"mb-4 mt-1",children:(0,a.jsx)(ee.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,a.jsx)(eM.Z,{children:(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(eg.Z,{className:"mt-5",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"User ID"}),(0,a.jsx)(e_.Z,{children:"User Email"}),(0,a.jsx)(e_.Z,{children:"User Models"}),(0,a.jsx)(e_.Z,{children:"User Spend ($ USD)"}),(0,a.jsx)(e_.Z,{children:"User Max Budget ($ USD)"}),(0,a.jsx)(e_.Z,{children:"User API Key Aliases"})]})}),(0,a.jsx)(ey.Z,{children:d.map(e=>{var l;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.user_id}),(0,a.jsx)(ef.Z,{children:e.user_email}),(0,a.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,a.jsx)(ef.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,a.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(W.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,a.jsx)(ex.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,a.jsx)(ex.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("div",{className:"flex-1"}),(0,a.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,a.jsxs)("div",{className:"flex justify-between items-center",children:[(0,a.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,a.jsx)("div",{children:"Loading..."})},le=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:r,userID:o,userRole:i}=e,[c]=er.Z.useForm(),[d]=er.Z.useForm(),{Title:m,Paragraph:h}=eT.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,N]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let a=await U(s,e);l&&r(l.map(e=>e.team_id===t?a.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await f(s,C);let e=l.filter(e=>e.team_id!==C);r(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let r=l[t].team_id,a=await _(s,r);console.log("teamInfo response:",a),null!==a&&(e={...e,[r]:a})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await A(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),N(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let a=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(a))throw Error("Team alias ".concat(a," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?r([...l,n]):r([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},a=await K(s,y.team_id,t);console.log("response for team create call: ".concat(a.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(a.data.team_id)),e.team_id===a.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=a.data,r(e),Z(a.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"All Teams"}),(0,a.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Team Name"}),(0,a.jsx)(e_.Z,{children:"Spend (USD)"}),(0,a.jsx)(e_.Z,{children:"Budget (USD)"}),(0,a.jsx)(e_.Z,{children:"Models"}),(0,a.jsx)(e_.Z,{children:"TPM / RPM Limits"}),(0,a.jsx)(e_.Z,{children:"Info"})]})}),(0,a.jsx)(ey.Z,{children:l&&l.length>0?l.map(e=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,a.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})},l):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,a.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,a.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>F(e)}),(0,a.jsx)(ej.Z,{onClick:()=>L(e.team_id),icon:eh.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(J.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,a.jsx)(ea.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,a.jsxs)(er.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,a.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(er.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"Team Members"}),(0,a.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,a.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(ek.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,a.jsxs)(h,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Member Name"}),(0,a.jsx)(e_.Z,{children:"Role"})]})}),(0,a.jsx)(ey.Z,{children:y?y.members_with_roles.map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:r}=e,[n]=er.Z.useForm();return(0,a.jsx)(ea.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(er.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,a.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(er.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:y,onSubmit:R})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(J.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,a.jsx)(ea.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,a.jsxs)(er.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(er.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},ll=t(18190),lt=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:r}=e,[o]=er.Z.useForm(),[i]=er.Z.useForm(),{Title:c,Paragraph:d}=eT.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},A=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let N=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,a.jsxs)(er.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(er.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,a.jsxs)(er.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eb.Z,{value:l,children:A.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,children:e},l))})}),(0,a.jsx)(er.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,a.jsx)(en.Z,{value:t,disabled:!0})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),f(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,a.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,a.jsx)(c,{level:4,children:"Admin Access "}),(0,a.jsxs)(d,{children:[r&&(0,a.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Member Name"}),(0,a.jsx)(e_.Z,{children:"Role"})]})}),(0,a.jsx)(ey.Z,{children:x?x.map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ef.Z,{children:e.user_role}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>_(!0)}),(0,a.jsx)(ea.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:N,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)("div",{className:"flex justify-start",children:[(0,a.jsx)(J.Z,{className:"mr-4 mb-5",onClick:()=>f(!0),children:"+ Add admin"}),(0,a.jsx)(ea.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{f(!1),i.resetFields()},onCancel:()=>{f(!1),i.resetFields()},children:I(O)}),(0,a.jsx)(J.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,a.jsx)(ea.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,a.jsxs)(W.Z,{children:[(0,a.jsx)(c,{level:4,children:"Add SSO"}),(0,a.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,a.jsx)(J.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,a.jsx)(ea.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,a.jsxs)(er.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,a.jsx)(en.Z.Password,{})}),(0,a.jsx)(er.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,a.jsx)(en.Z.Password,{})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,a.jsxs)(ea.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,a.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{onClick:S,children:"Done"})})]})]}),(0,a.jsxs)(ll.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,a.jsxs)("a",{href:l,target:"_blank",children:[(0,a.jsx)("b",{children:l})," "]})]})]})]})},ls=t(42556);let lr=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var la=e=>{let{accessToken:l,userRole:t,userID:s}=e,[r,o]=(0,n.useState)(lr),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=er.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[y,f]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e);let l=lr;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),f(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),A=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{V(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},N=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),V(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(r?[...r,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(r)),(0,a.jsxs)("div",{className:"w-full mx-4",children:[(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(ll.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,a.jsxs)(eM.Z,{children:[(0,a.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eR.Z,{value:"1",children:"Logging Callbacks"}),(0,a.jsx)(eR.Z,{value:"2",children:"Alerting"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Callback"}),(0,a.jsx)(e_.Z,{children:"Callback Env Vars"})]})}),(0,a.jsx)(ey.Z,{children:r.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ex.Z,{color:"emerald",children:e.name})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,a.jsxs)("li",{children:[(0,a.jsx)(ee.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,a.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,a.jsx)("div",{}),(0,a.jsx)(H.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,a.jsx)(J.Z,{className:"mt-2",onClick:()=>A(e),children:"Save Changes"}),(0,a.jsx)(J.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsxs)(ee.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,a.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{}),(0,a.jsx)(e_.Z,{}),(0,a.jsx)(e_.Z,{children:"Slack Webhook URL"})]})}),(0,a.jsx)(ey.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ls.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:s})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(H.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:y})})]},l)})})]}),(0,a.jsx)(J.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,r=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",r);let a=(null==r?void 0:r.value)||"";console.log("newWebhookValue",a),e[t]=a}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{V(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,a.jsx)(J.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,a.jsx)(ea.Z,{title:"Add Callback",visible:d,onOk:N,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,a.jsxs)(er.Z,{form:h,layout:"vertical",onFinish:N,children:[(0,a.jsx)(er.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,a.jsxs)(es.default,{onChange:e=>{p(e)},children:[(0,a.jsx)(es.default.Option,{value:"langfuse",children:"langfuse"}),(0,a.jsx)(es.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,a.jsx)(H.Z,{type:"password"})}),(0,a.jsx)(er.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,a.jsx)(H.Z,{type:"password"})})]}),"openmeter"==x&&(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(er.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,a.jsx)(H.Z,{type:"password"})})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:ln}=es.default;var lo=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:r}=e,[o]=er.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,a.jsxs)("div",{children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,a.jsx)(ea.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,a.jsxs)(er.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:a}=e,n=[...s.fallbacks||[],{[l]:a}],i={...s,fallbacks:n};console.log(i);try{V(t,{router_settings:i}),r(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,a.jsx)(eb.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,a.jsx)(er.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsx)(eK.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,a.jsx)(eB.Z,{value:e,children:e},e))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},li=t(12968);async function lc(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new li.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,a.jsxs)("span",{children:["Test model=",(0,a.jsx)("strong",{children:e}),", received model=",(0,a.jsx)("strong",{children:l.model}),". See ",(0,a.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let ld={ttl:3600,lowest_latency_buffer:0},lm=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,a.jsxs)($.Z,{children:[(0,a.jsx)(Q.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,a.jsx)(X.Z,{children:"latency-based-routing"==l?(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Setting"}),(0,a.jsx)(e_.Z,{children:"Value"})]})}),(0,a.jsx)(ey.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ee.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,a.jsx)(ee.Z,{children:"No specific settings"})})]})};var lu=e=>{let{accessToken:l,userRole:t,userID:s,modelData:r}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)(!1),[m]=er.Z.useForm(),[h,x]=(0,n.useState)(null),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),f={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)})},[l,t,s]);let Z=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await V(l,{router_settings:o}),i({...o}),j(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},_=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,p];if("routing_strategy_args"==l&&"latency-based-routing"==p){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eR.Z,{value:"1",children:"General Settings"}),(0,a.jsx)(eR.Z,{value:"2",children:"Fallbacks"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(el.Z,{children:"Router Settings"}),(0,a.jsxs)(ep.Z,{children:[(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Setting"}),(0,a.jsx)(e_.Z,{children:"Value"})]})}),(0,a.jsx)(ey.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ee.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:f[l]})]}),(0,a.jsx)(ef.Z,{children:"routing_strategy"==l?(0,a.jsxs)(eb.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:j,children:[(0,a.jsx)(ek.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,a.jsx)(ek.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,a.jsx)(ek.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,a.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,a.jsx)(lm,{selectedStrategy:p,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:ld,paramExplanation:f})]}),(0,a.jsx)(Y.Z,{children:(0,a.jsx)(J.Z,{className:"mt-2",onClick:()=>_(o),children:"Save Changes"})})]})}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Model Name"}),(0,a.jsx)(e_.Z,{children:"Fallbacks"})]})}),(0,a.jsx)(ey.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,r]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:s}),(0,a.jsx)(ef.Z,{children:Array.isArray(r)?r.join(", "):r}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(J.Z,{onClick:()=>lc(s,l),children:"Test Fallback"})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ej.Z,{icon:eh.Z,size:"sm",onClick:()=>Z(s)})})]},t.toString()+s)}))})]}),(0,a.jsx)(lo,{models:(null==r?void 0:r.data)?r.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]})]})]})}):null},lh=t(67951),lx=e=>{let{}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsxs)("div",{className:"mb-5",children:[(0,a.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,a.jsx)(ee.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,a.jsxs)(eM.Z,{children:[(0,a.jsxs)(eL.Z,{children:[(0,a.jsx)(eR.Z,{children:"OpenAI Python SDK"}),(0,a.jsx)(eR.Z,{children:"LlamaIndex"}),(0,a.jsx)(eR.Z,{children:"Langchain Py"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsx)(lh.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,a.jsx)(eU.Z,{children:(0,a.jsx)(lh.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,a.jsx)(eU.Z,{children:(0,a.jsx)(lh.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lp(e,l,t,s){console.log("isLocal:",!1);let r=window.location.origin,a=new li.ZP.OpenAI({apiKey:s,baseURL:r,dangerouslyAllowBrowser:!0});try{for await(let s of(await a.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var lj=e=>{let{accessToken:l,token:t,userRole:s,userID:r}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{let e=await A(l,r,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,r,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&r){u(e=>[...e,{role:"user",content:c}]);try{h&&await lp(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eT.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,a.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,a.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eM.Z,{children:[(0,a.jsx)(eL.Z,{children:(0,a.jsx)(eR.Z,{children:"Chat"})}),(0,a.jsx)(eD.Z,{children:(0,a.jsxs)(eU.Z,{children:[(0,a.jsx)("div",{className:"sm:max-w-2xl",children:(0,a.jsxs)(W.Z,{numItems:2,children:[(0,a.jsxs)(Y.Z,{children:[(0,a.jsx)(ee.Z,{children:"API Key"}),(0,a.jsx)(H.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,a.jsxs)(Y.Z,{className:"mx-2",children:[(0,a.jsx)(ee.Z,{children:"Select Model:"}),(0,a.jsx)(es.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,a.jsxs)(eg.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ef.Z,{})})}),(0,a.jsx)(ey.Z,{children:m.map((e,l)=>(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,a.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(H.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,a.jsx)(J.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},lg=t(33509),ly=t(95781);let{Sider:lf}=lg.default;var lZ=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,a.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,a.jsx)(lf,{width:120,children:(0,a.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,a.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,a.jsx)(lf,{width:145,children:(0,a.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:(0,a.jsx)(ee.Z,{children:"API Keys"})},"1"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:(0,a.jsx)(ee.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:(0,a.jsx)(ee.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:(0,a.jsx)(ee.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("teams"),children:(0,a.jsx)(ee.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("users"),children:(0,a.jsx)(ee.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("settings"),children:(0,a.jsx)(ee.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("general-settings"),children:(0,a.jsx)(ee.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("admin-panel"),children:(0,a.jsx)(ee.Z,{children:"Admin"})},"7"):null,(0,a.jsx)(ly.Z.Item,{onClick:()=>l("api_ref"),children:(0,a.jsx)(ee.Z,{children:"API Reference"})},"11")]})})})},l_=t(67989),lw=e=>{let{accessToken:l,token:t,userRole:s,userID:r,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,y]=(0,n.useState)([]),[f,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[A,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=B(M),D=B(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let r=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",r),j(r)};function B(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){let e=await C(l);d(e);let t=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(t);let s=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(s);let r=await N(l);console.log("teamSpend",r),y(r.daily_spend),w(r.teams);let a=r.total_spend_per_team;a=a.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(a);let n=await E(l);Z(n.top_10_tags);let o=await T(l,null,void 0,void 0);j(o),console.log("spend/user result",o)}else"App Owner"==s&&await I(l,t,s,r,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,r,U,D]),(0,a.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,a.jsx)(eE,{userID:r,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,a.jsxs)(eM.Z,{children:[(0,a.jsxs)(eL.Z,{className:"mt-2",children:[(0,a.jsx)(eR.Z,{children:"All Up"}),(0,a.jsx)(eR.Z,{children:"Team Based Usage"}),(0,a.jsx)(eR.Z,{children:"End User Usage"}),(0,a.jsx)(eR.Z,{children:"Tag Based Usage"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsx)(Y.Z,{numColSpan:2,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Monthly Spend"}),(0,a.jsx)(eq.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Top API Keys"}),(0,a.jsx)(eq.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Top Models"}),(0,a.jsx)(eq.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(Y.Z,{numColSpan:1})]})}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsxs)(Y.Z,{numColSpan:2,children:[(0,a.jsxs)(ep.Z,{className:"mb-2",children:[(0,a.jsx)(el.Z,{children:"Total Spend Per Team"}),(0,a.jsx)(l_.Z,{data:b})]}),(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Daily Spend Per Team"}),(0,a.jsx)(eq.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,a.jsx)(Y.Z,{numColSpan:2})]})}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,a.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,a.jsxs)(W.Z,{numItems:2,children:[(0,a.jsxs)(Y.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Time Range"}),(0,a.jsx)(eF.Z,{enableSelect:!0,value:A,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,a.jsxs)(Y.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Key"}),(0,a.jsxs)(eb.Z,{defaultValue:"all-keys",children:[(0,a.jsx)(ek.Z,{value:"all-keys",onClick:()=>{K(A.from,A.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,a.jsx)(ek.Z,{value:String(l),onClick:()=>{K(A.from,A.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,a.jsx)(ep.Z,{className:"mt-4",children:(0,a.jsxs)(eg.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"End User"}),(0,a.jsx)(e_.Z,{children:"Spend"}),(0,a.jsx)(e_.Z,{children:"Total Events"})]})}),(0,a.jsx)(ey.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.end_user}),(0,a.jsx)(ef.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,a.jsx)(ef.Z,{children:e.total_count})]},l)})})]})})]}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,a.jsx)(Y.Z,{numColSpan:2,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Spend Per Tag - Last 30 Days"}),(0,a.jsxs)(ee.Z,{children:["Get Started Tracking cost per tag ",(0,a.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Tag"}),(0,a.jsx)(e_.Z,{children:"Spend"}),(0,a.jsx)(e_.Z,{children:"Requests"})]})}),(0,a.jsx)(ey.Z,{children:f.map(e=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.name}),(0,a.jsx)(ef.Z,{children:e.value}),(0,a.jsx)(ef.Z,{children:e.log_count})]},e.name))})]})]})}),(0,a.jsx)(Y.Z,{numColSpan:2})]})})]})]})]})},lb=()=>{let{Title:e,Paragraph:l}=eT.default,[t,s]=(0,n.useState)(""),[r,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,y]=(0,n.useState)({data:[]}),f=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eP.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{children:"Loading..."}),children:(0,a.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,a.jsx)(m,{userID:f,userRole:t,userEmail:r,showSSOBanner:x}),(0,a.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,a.jsx)("div",{className:"mt-8",children:(0,a.jsx)(lZ,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,a.jsx)(eO,{userID:f,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:r,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,a.jsx)(e3,{userID:f,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:y}):"llm-playground"==_?(0,a.jsx)(lj,{userID:f,userRole:t,token:Z,accessToken:b}):"users"==_?(0,a.jsx)(e9,{userID:f,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,a.jsx)(le,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:f,userRole:t}):"admin-panel"==_?(0,a.jsx)(lt,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,a.jsx)(lx,{}):"settings"==_?(0,a.jsx)(la,{userID:f,userRole:t,accessToken:b}):"general-settings"==_?(0,a.jsx)(lu,{userID:f,userRole:t,accessToken:b,modelData:g}):(0,a.jsx)(lw,{userID:f,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/webpack-bd14a14e35b37798.js b/litellm/proxy/_experimental/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js similarity index 98% rename from ui/litellm-dashboard/out/_next/static/chunks/webpack-bd14a14e35b37798.js rename to litellm/proxy/_experimental/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js index 54c5420044c..8a5c2162ca0 100644 --- a/ui/litellm-dashboard/out/_next/static/chunks/webpack-bd14a14e35b37798.js +++ b/litellm/proxy/_experimental/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js @@ -1 +1 @@ -!function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={id:e,loaded:!1,exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete l[e]}return n.loaded=!0,n.exports}d.m=a,e=[],d.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.125rem * var(--tw-space-x-reverse));margin-left:calc(.125rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.375rem * var(--tw-space-x-reverse));margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.625rem * var(--tw-space-x-reverse));margin-left:calc(.625rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-tremor-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[1px\]{border-radius:1px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-tremor-default{border-radius:.5rem}.rounded-tremor-full{border-radius:9999px}.rounded-tremor-small{border-radius:.375rem}.rounded-b-tremor-default{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-l-tremor-default{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-tremor-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-tremor-small{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-r-tremor-default{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-r-tremor-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-r-tremor-small{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-tremor-default{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-r-4{border-right-width:4px}.border-t-4{border-top-width:4px}.border-t-\[1px\]{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.border-dark-tremor-background{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-dark-tremor-border{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-dark-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-dark-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-dark-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-dark-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-tremor-background{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.bg-dark-tremor-background{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-dark-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-dark-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-dark-tremor-brand-emphasis{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-dark-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}.bg-dark-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-dark-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-tremor-background-emphasis{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-tremor-border{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.bg-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(134 136 239/var(--tw-bg-opacity))}.bg-tremor-brand-muted\/50{background-color:rgba(134,136,239,.5)}.bg-tremor-brand-subtle{--tw-bg-opacity:1;background-color:rgb(142 145 235/var(--tw-bg-opacity))}.bg-tremor-content{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-20{--tw-bg-opacity:0.2}.bg-opacity-30{--tw-bg-opacity:0.3}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.fill-amber-100{fill:#fef3c7}.fill-amber-200{fill:#fde68a}.fill-amber-300{fill:#fcd34d}.fill-amber-400{fill:#fbbf24}.fill-amber-50{fill:#fffbeb}.fill-amber-500{fill:#f59e0b}.fill-amber-600{fill:#d97706}.fill-amber-700{fill:#b45309}.fill-amber-800{fill:#92400e}.fill-amber-900{fill:#78350f}.fill-amber-950{fill:#451a03}.fill-blue-100{fill:#dbeafe}.fill-blue-200{fill:#bfdbfe}.fill-blue-300{fill:#93c5fd}.fill-blue-400{fill:#60a5fa}.fill-blue-50{fill:#eff6ff}.fill-blue-500{fill:#3b82f6}.fill-blue-600{fill:#2563eb}.fill-blue-700{fill:#1d4ed8}.fill-blue-800{fill:#1e40af}.fill-blue-900{fill:#1e3a8a}.fill-blue-950{fill:#172554}.fill-cyan-100{fill:#cffafe}.fill-cyan-200{fill:#a5f3fc}.fill-cyan-300{fill:#67e8f9}.fill-cyan-400{fill:#22d3ee}.fill-cyan-50{fill:#ecfeff}.fill-cyan-500{fill:#06b6d4}.fill-cyan-600{fill:#0891b2}.fill-cyan-700{fill:#0e7490}.fill-cyan-800{fill:#155e75}.fill-cyan-900{fill:#164e63}.fill-cyan-950{fill:#083344}.fill-emerald-100{fill:#d1fae5}.fill-emerald-200{fill:#a7f3d0}.fill-emerald-300{fill:#6ee7b7}.fill-emerald-400{fill:#34d399}.fill-emerald-50{fill:#ecfdf5}.fill-emerald-500{fill:#10b981}.fill-emerald-600{fill:#059669}.fill-emerald-700{fill:#047857}.fill-emerald-800{fill:#065f46}.fill-emerald-900{fill:#064e3b}.fill-emerald-950{fill:#022c22}.fill-fuchsia-100{fill:#fae8ff}.fill-fuchsia-200{fill:#f5d0fe}.fill-fuchsia-300{fill:#f0abfc}.fill-fuchsia-400{fill:#e879f9}.fill-fuchsia-50{fill:#fdf4ff}.fill-fuchsia-500{fill:#d946ef}.fill-fuchsia-600{fill:#c026d3}.fill-fuchsia-700{fill:#a21caf}.fill-fuchsia-800{fill:#86198f}.fill-fuchsia-900{fill:#701a75}.fill-fuchsia-950{fill:#4a044e}.fill-gray-100{fill:#f3f4f6}.fill-gray-200{fill:#e5e7eb}.fill-gray-300{fill:#d1d5db}.fill-gray-400{fill:#9ca3af}.fill-gray-50{fill:#f9fafb}.fill-gray-500{fill:#6b7280}.fill-gray-600{fill:#4b5563}.fill-gray-700{fill:#374151}.fill-gray-800{fill:#1f2937}.fill-gray-900{fill:#111827}.fill-gray-950{fill:#030712}.fill-green-100{fill:#dcfce7}.fill-green-200{fill:#bbf7d0}.fill-green-300{fill:#86efac}.fill-green-400{fill:#4ade80}.fill-green-50{fill:#f0fdf4}.fill-green-500{fill:#22c55e}.fill-green-600{fill:#16a34a}.fill-green-700{fill:#15803d}.fill-green-800{fill:#166534}.fill-green-900{fill:#14532d}.fill-green-950{fill:#052e16}.fill-indigo-100{fill:#e0e7ff}.fill-indigo-200{fill:#c7d2fe}.fill-indigo-300{fill:#a5b4fc}.fill-indigo-400{fill:#818cf8}.fill-indigo-50{fill:#eef2ff}.fill-indigo-500{fill:#6366f1}.fill-indigo-600{fill:#4f46e5}.fill-indigo-700{fill:#4338ca}.fill-indigo-800{fill:#3730a3}.fill-indigo-900{fill:#312e81}.fill-indigo-950{fill:#1e1b4b}.fill-lime-100{fill:#ecfccb}.fill-lime-200{fill:#d9f99d}.fill-lime-300{fill:#bef264}.fill-lime-400{fill:#a3e635}.fill-lime-50{fill:#f7fee7}.fill-lime-500{fill:#84cc16}.fill-lime-600{fill:#65a30d}.fill-lime-700{fill:#4d7c0f}.fill-lime-800{fill:#3f6212}.fill-lime-900{fill:#365314}.fill-lime-950{fill:#1a2e05}.fill-neutral-100{fill:#f5f5f5}.fill-neutral-200{fill:#e5e5e5}.fill-neutral-300{fill:#d4d4d4}.fill-neutral-400{fill:#a3a3a3}.fill-neutral-50{fill:#fafafa}.fill-neutral-500{fill:#737373}.fill-neutral-600{fill:#525252}.fill-neutral-700{fill:#404040}.fill-neutral-800{fill:#262626}.fill-neutral-900{fill:#171717}.fill-neutral-950{fill:#0a0a0a}.fill-orange-100{fill:#ffedd5}.fill-orange-200{fill:#fed7aa}.fill-orange-300{fill:#fdba74}.fill-orange-400{fill:#fb923c}.fill-orange-50{fill:#fff7ed}.fill-orange-500{fill:#f97316}.fill-orange-600{fill:#ea580c}.fill-orange-700{fill:#c2410c}.fill-orange-800{fill:#9a3412}.fill-orange-900{fill:#7c2d12}.fill-orange-950{fill:#431407}.fill-pink-100{fill:#fce7f3}.fill-pink-200{fill:#fbcfe8}.fill-pink-300{fill:#f9a8d4}.fill-pink-400{fill:#f472b6}.fill-pink-50{fill:#fdf2f8}.fill-pink-500{fill:#ec4899}.fill-pink-600{fill:#db2777}.fill-pink-700{fill:#be185d}.fill-pink-800{fill:#9d174d}.fill-pink-900{fill:#831843}.fill-pink-950{fill:#500724}.fill-purple-100{fill:#f3e8ff}.fill-purple-200{fill:#e9d5ff}.fill-purple-300{fill:#d8b4fe}.fill-purple-400{fill:#c084fc}.fill-purple-50{fill:#faf5ff}.fill-purple-500{fill:#a855f7}.fill-purple-600{fill:#9333ea}.fill-purple-700{fill:#7e22ce}.fill-purple-800{fill:#6b21a8}.fill-purple-900{fill:#581c87}.fill-purple-950{fill:#3b0764}.fill-red-100{fill:#fee2e2}.fill-red-200{fill:#fecaca}.fill-red-300{fill:#fca5a5}.fill-red-400{fill:#f87171}.fill-red-50{fill:#fef2f2}.fill-red-500{fill:#ef4444}.fill-red-600{fill:#dc2626}.fill-red-700{fill:#b91c1c}.fill-red-800{fill:#991b1b}.fill-red-900{fill:#7f1d1d}.fill-red-950{fill:#450a0a}.fill-rose-100{fill:#ffe4e6}.fill-rose-200{fill:#fecdd3}.fill-rose-300{fill:#fda4af}.fill-rose-400{fill:#fb7185}.fill-rose-50{fill:#fff1f2}.fill-rose-500{fill:#f43f5e}.fill-rose-600{fill:#e11d48}.fill-rose-700{fill:#be123c}.fill-rose-800{fill:#9f1239}.fill-rose-900{fill:#881337}.fill-rose-950{fill:#4c0519}.fill-sky-100{fill:#e0f2fe}.fill-sky-200{fill:#bae6fd}.fill-sky-300{fill:#7dd3fc}.fill-sky-400{fill:#38bdf8}.fill-sky-50{fill:#f0f9ff}.fill-sky-500{fill:#0ea5e9}.fill-sky-600{fill:#0284c7}.fill-sky-700{fill:#0369a1}.fill-sky-800{fill:#075985}.fill-sky-900{fill:#0c4a6e}.fill-sky-950{fill:#082f49}.fill-slate-100{fill:#f1f5f9}.fill-slate-200{fill:#e2e8f0}.fill-slate-300{fill:#cbd5e1}.fill-slate-400{fill:#94a3b8}.fill-slate-50{fill:#f8fafc}.fill-slate-500{fill:#64748b}.fill-slate-600{fill:#475569}.fill-slate-700{fill:#334155}.fill-slate-800{fill:#1e293b}.fill-slate-900{fill:#0f172a}.fill-slate-950{fill:#020617}.fill-stone-100{fill:#f5f5f4}.fill-stone-200{fill:#e7e5e4}.fill-stone-300{fill:#d6d3d1}.fill-stone-400{fill:#a8a29e}.fill-stone-50{fill:#fafaf9}.fill-stone-500{fill:#78716c}.fill-stone-600{fill:#57534e}.fill-stone-700{fill:#44403c}.fill-stone-800{fill:#292524}.fill-stone-900{fill:#1c1917}.fill-stone-950{fill:#0c0a09}.fill-teal-100{fill:#ccfbf1}.fill-teal-200{fill:#99f6e4}.fill-teal-300{fill:#5eead4}.fill-teal-400{fill:#2dd4bf}.fill-teal-50{fill:#f0fdfa}.fill-teal-500{fill:#14b8a6}.fill-teal-600{fill:#0d9488}.fill-teal-700{fill:#0f766e}.fill-teal-800{fill:#115e59}.fill-teal-900{fill:#134e4a}.fill-teal-950{fill:#042f2e}.fill-tremor-content{fill:#6b7280}.fill-tremor-content-emphasis{fill:#374151}.fill-violet-100{fill:#ede9fe}.fill-violet-200{fill:#ddd6fe}.fill-violet-300{fill:#c4b5fd}.fill-violet-400{fill:#a78bfa}.fill-violet-50{fill:#f5f3ff}.fill-violet-500{fill:#8b5cf6}.fill-violet-600{fill:#7c3aed}.fill-violet-700{fill:#6d28d9}.fill-violet-800{fill:#5b21b6}.fill-violet-900{fill:#4c1d95}.fill-violet-950{fill:#2e1065}.fill-yellow-100{fill:#fef9c3}.fill-yellow-200{fill:#fef08a}.fill-yellow-300{fill:#fde047}.fill-yellow-400{fill:#facc15}.fill-yellow-50{fill:#fefce8}.fill-yellow-500{fill:#eab308}.fill-yellow-600{fill:#ca8a04}.fill-yellow-700{fill:#a16207}.fill-yellow-800{fill:#854d0e}.fill-yellow-900{fill:#713f12}.fill-yellow-950{fill:#422006}.fill-zinc-100{fill:#f4f4f5}.fill-zinc-200{fill:#e4e4e7}.fill-zinc-300{fill:#d4d4d8}.fill-zinc-400{fill:#a1a1aa}.fill-zinc-50{fill:#fafafa}.fill-zinc-500{fill:#71717a}.fill-zinc-600{fill:#52525b}.fill-zinc-700{fill:#3f3f46}.fill-zinc-800{fill:#27272a}.fill-zinc-900{fill:#18181b}.fill-zinc-950{fill:#09090b}.stroke-amber-100{stroke:#fef3c7}.stroke-amber-200{stroke:#fde68a}.stroke-amber-300{stroke:#fcd34d}.stroke-amber-400{stroke:#fbbf24}.stroke-amber-50{stroke:#fffbeb}.stroke-amber-500{stroke:#f59e0b}.stroke-amber-600{stroke:#d97706}.stroke-amber-700{stroke:#b45309}.stroke-amber-800{stroke:#92400e}.stroke-amber-900{stroke:#78350f}.stroke-amber-950{stroke:#451a03}.stroke-blue-100{stroke:#dbeafe}.stroke-blue-200{stroke:#bfdbfe}.stroke-blue-300{stroke:#93c5fd}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-50{stroke:#eff6ff}.stroke-blue-500{stroke:#3b82f6}.stroke-blue-600{stroke:#2563eb}.stroke-blue-700{stroke:#1d4ed8}.stroke-blue-800{stroke:#1e40af}.stroke-blue-900{stroke:#1e3a8a}.stroke-blue-950{stroke:#172554}.stroke-cyan-100{stroke:#cffafe}.stroke-cyan-200{stroke:#a5f3fc}.stroke-cyan-300{stroke:#67e8f9}.stroke-cyan-400{stroke:#22d3ee}.stroke-cyan-50{stroke:#ecfeff}.stroke-cyan-500{stroke:#06b6d4}.stroke-cyan-600{stroke:#0891b2}.stroke-cyan-700{stroke:#0e7490}.stroke-cyan-800{stroke:#155e75}.stroke-cyan-900{stroke:#164e63}.stroke-cyan-950{stroke:#083344}.stroke-dark-tremor-background{stroke:#111827}.stroke-dark-tremor-border{stroke:#374151}.stroke-emerald-100{stroke:#d1fae5}.stroke-emerald-200{stroke:#a7f3d0}.stroke-emerald-300{stroke:#6ee7b7}.stroke-emerald-400{stroke:#34d399}.stroke-emerald-50{stroke:#ecfdf5}.stroke-emerald-500{stroke:#10b981}.stroke-emerald-600{stroke:#059669}.stroke-emerald-700{stroke:#047857}.stroke-emerald-800{stroke:#065f46}.stroke-emerald-900{stroke:#064e3b}.stroke-emerald-950{stroke:#022c22}.stroke-fuchsia-100{stroke:#fae8ff}.stroke-fuchsia-200{stroke:#f5d0fe}.stroke-fuchsia-300{stroke:#f0abfc}.stroke-fuchsia-400{stroke:#e879f9}.stroke-fuchsia-50{stroke:#fdf4ff}.stroke-fuchsia-500{stroke:#d946ef}.stroke-fuchsia-600{stroke:#c026d3}.stroke-fuchsia-700{stroke:#a21caf}.stroke-fuchsia-800{stroke:#86198f}.stroke-fuchsia-900{stroke:#701a75}.stroke-fuchsia-950{stroke:#4a044e}.stroke-gray-100{stroke:#f3f4f6}.stroke-gray-200{stroke:#e5e7eb}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-400{stroke:#9ca3af}.stroke-gray-50{stroke:#f9fafb}.stroke-gray-500{stroke:#6b7280}.stroke-gray-600{stroke:#4b5563}.stroke-gray-700{stroke:#374151}.stroke-gray-800{stroke:#1f2937}.stroke-gray-900{stroke:#111827}.stroke-gray-950{stroke:#030712}.stroke-green-100{stroke:#dcfce7}.stroke-green-200{stroke:#bbf7d0}.stroke-green-300{stroke:#86efac}.stroke-green-400{stroke:#4ade80}.stroke-green-50{stroke:#f0fdf4}.stroke-green-500{stroke:#22c55e}.stroke-green-600{stroke:#16a34a}.stroke-green-700{stroke:#15803d}.stroke-green-800{stroke:#166534}.stroke-green-900{stroke:#14532d}.stroke-green-950{stroke:#052e16}.stroke-indigo-100{stroke:#e0e7ff}.stroke-indigo-200{stroke:#c7d2fe}.stroke-indigo-300{stroke:#a5b4fc}.stroke-indigo-400{stroke:#818cf8}.stroke-indigo-50{stroke:#eef2ff}.stroke-indigo-500{stroke:#6366f1}.stroke-indigo-600{stroke:#4f46e5}.stroke-indigo-700{stroke:#4338ca}.stroke-indigo-800{stroke:#3730a3}.stroke-indigo-900{stroke:#312e81}.stroke-indigo-950{stroke:#1e1b4b}.stroke-lime-100{stroke:#ecfccb}.stroke-lime-200{stroke:#d9f99d}.stroke-lime-300{stroke:#bef264}.stroke-lime-400{stroke:#a3e635}.stroke-lime-50{stroke:#f7fee7}.stroke-lime-500{stroke:#84cc16}.stroke-lime-600{stroke:#65a30d}.stroke-lime-700{stroke:#4d7c0f}.stroke-lime-800{stroke:#3f6212}.stroke-lime-900{stroke:#365314}.stroke-lime-950{stroke:#1a2e05}.stroke-neutral-100{stroke:#f5f5f5}.stroke-neutral-200{stroke:#e5e5e5}.stroke-neutral-300{stroke:#d4d4d4}.stroke-neutral-400{stroke:#a3a3a3}.stroke-neutral-50{stroke:#fafafa}.stroke-neutral-500{stroke:#737373}.stroke-neutral-600{stroke:#525252}.stroke-neutral-700{stroke:#404040}.stroke-neutral-800{stroke:#262626}.stroke-neutral-900{stroke:#171717}.stroke-neutral-950{stroke:#0a0a0a}.stroke-orange-100{stroke:#ffedd5}.stroke-orange-200{stroke:#fed7aa}.stroke-orange-300{stroke:#fdba74}.stroke-orange-400{stroke:#fb923c}.stroke-orange-50{stroke:#fff7ed}.stroke-orange-500{stroke:#f97316}.stroke-orange-600{stroke:#ea580c}.stroke-orange-700{stroke:#c2410c}.stroke-orange-800{stroke:#9a3412}.stroke-orange-900{stroke:#7c2d12}.stroke-orange-950{stroke:#431407}.stroke-pink-100{stroke:#fce7f3}.stroke-pink-200{stroke:#fbcfe8}.stroke-pink-300{stroke:#f9a8d4}.stroke-pink-400{stroke:#f472b6}.stroke-pink-50{stroke:#fdf2f8}.stroke-pink-500{stroke:#ec4899}.stroke-pink-600{stroke:#db2777}.stroke-pink-700{stroke:#be185d}.stroke-pink-800{stroke:#9d174d}.stroke-pink-900{stroke:#831843}.stroke-pink-950{stroke:#500724}.stroke-purple-100{stroke:#f3e8ff}.stroke-purple-200{stroke:#e9d5ff}.stroke-purple-300{stroke:#d8b4fe}.stroke-purple-400{stroke:#c084fc}.stroke-purple-50{stroke:#faf5ff}.stroke-purple-500{stroke:#a855f7}.stroke-purple-600{stroke:#9333ea}.stroke-purple-700{stroke:#7e22ce}.stroke-purple-800{stroke:#6b21a8}.stroke-purple-900{stroke:#581c87}.stroke-purple-950{stroke:#3b0764}.stroke-red-100{stroke:#fee2e2}.stroke-red-200{stroke:#fecaca}.stroke-red-300{stroke:#fca5a5}.stroke-red-400{stroke:#f87171}.stroke-red-50{stroke:#fef2f2}.stroke-red-500{stroke:#ef4444}.stroke-red-600{stroke:#dc2626}.stroke-red-700{stroke:#b91c1c}.stroke-red-800{stroke:#991b1b}.stroke-red-900{stroke:#7f1d1d}.stroke-red-950{stroke:#450a0a}.stroke-rose-100{stroke:#ffe4e6}.stroke-rose-200{stroke:#fecdd3}.stroke-rose-300{stroke:#fda4af}.stroke-rose-400{stroke:#fb7185}.stroke-rose-50{stroke:#fff1f2}.stroke-rose-500{stroke:#f43f5e}.stroke-rose-600{stroke:#e11d48}.stroke-rose-700{stroke:#be123c}.stroke-rose-800{stroke:#9f1239}.stroke-rose-900{stroke:#881337}.stroke-rose-950{stroke:#4c0519}.stroke-sky-100{stroke:#e0f2fe}.stroke-sky-200{stroke:#bae6fd}.stroke-sky-300{stroke:#7dd3fc}.stroke-sky-400{stroke:#38bdf8}.stroke-sky-50{stroke:#f0f9ff}.stroke-sky-500{stroke:#0ea5e9}.stroke-sky-600{stroke:#0284c7}.stroke-sky-700{stroke:#0369a1}.stroke-sky-800{stroke:#075985}.stroke-sky-900{stroke:#0c4a6e}.stroke-sky-950{stroke:#082f49}.stroke-slate-100{stroke:#f1f5f9}.stroke-slate-200{stroke:#e2e8f0}.stroke-slate-300{stroke:#cbd5e1}.stroke-slate-400{stroke:#94a3b8}.stroke-slate-50{stroke:#f8fafc}.stroke-slate-500{stroke:#64748b}.stroke-slate-600{stroke:#475569}.stroke-slate-700{stroke:#334155}.stroke-slate-800{stroke:#1e293b}.stroke-slate-900{stroke:#0f172a}.stroke-slate-950{stroke:#020617}.stroke-stone-100{stroke:#f5f5f4}.stroke-stone-200{stroke:#e7e5e4}.stroke-stone-300{stroke:#d6d3d1}.stroke-stone-400{stroke:#a8a29e}.stroke-stone-50{stroke:#fafaf9}.stroke-stone-500{stroke:#78716c}.stroke-stone-600{stroke:#57534e}.stroke-stone-700{stroke:#44403c}.stroke-stone-800{stroke:#292524}.stroke-stone-900{stroke:#1c1917}.stroke-stone-950{stroke:#0c0a09}.stroke-teal-100{stroke:#ccfbf1}.stroke-teal-200{stroke:#99f6e4}.stroke-teal-300{stroke:#5eead4}.stroke-teal-400{stroke:#2dd4bf}.stroke-teal-50{stroke:#f0fdfa}.stroke-teal-500{stroke:#14b8a6}.stroke-teal-600{stroke:#0d9488}.stroke-teal-700{stroke:#0f766e}.stroke-teal-800{stroke:#115e59}.stroke-teal-900{stroke:#134e4a}.stroke-teal-950{stroke:#042f2e}.stroke-tremor-background{stroke:#fff}.stroke-tremor-border{stroke:#e5e7eb}.stroke-tremor-brand{stroke:#6366f1}.stroke-tremor-brand-muted\/50{stroke:rgba(134,136,239,.5)}.stroke-violet-100{stroke:#ede9fe}.stroke-violet-200{stroke:#ddd6fe}.stroke-violet-300{stroke:#c4b5fd}.stroke-violet-400{stroke:#a78bfa}.stroke-violet-50{stroke:#f5f3ff}.stroke-violet-500{stroke:#8b5cf6}.stroke-violet-600{stroke:#7c3aed}.stroke-violet-700{stroke:#6d28d9}.stroke-violet-800{stroke:#5b21b6}.stroke-violet-900{stroke:#4c1d95}.stroke-violet-950{stroke:#2e1065}.stroke-yellow-100{stroke:#fef9c3}.stroke-yellow-200{stroke:#fef08a}.stroke-yellow-300{stroke:#fde047}.stroke-yellow-400{stroke:#facc15}.stroke-yellow-50{stroke:#fefce8}.stroke-yellow-500{stroke:#eab308}.stroke-yellow-600{stroke:#ca8a04}.stroke-yellow-700{stroke:#a16207}.stroke-yellow-800{stroke:#854d0e}.stroke-yellow-900{stroke:#713f12}.stroke-yellow-950{stroke:#422006}.stroke-zinc-100{stroke:#f4f4f5}.stroke-zinc-200{stroke:#e4e4e7}.stroke-zinc-300{stroke:#d4d4d8}.stroke-zinc-400{stroke:#a1a1aa}.stroke-zinc-50{stroke:#fafafa}.stroke-zinc-500{stroke:#71717a}.stroke-zinc-600{stroke:#52525b}.stroke-zinc-700{stroke:#3f3f46}.stroke-zinc-800{stroke:#27272a}.stroke-zinc-900{stroke:#18181b}.stroke-zinc-950{stroke:#09090b}.stroke-1{stroke-width:1}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-1{padding-right:.25rem}.pr-1\.5{padding-right:.375rem}.pr-12{padding-right:3rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[12px\]{font-size:12px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-tremor-default{font-size:.775rem;line-height:1.15rem}.text-tremor-label{font-size:.75rem;line-height:.3rem}.text-tremor-metric{font-size:1.675rem;line-height:2.15rem}.text-tremor-title{font-size:1.025rem;line-height:1.65rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-dark-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-dark-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-dark-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-dark-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-dark-tremor-content-subtle{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-tremor-content-subtle{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.accent-dark-tremor-brand,.accent-tremor-brand{accent-color:#6366f1}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow,.shadow-dark-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-dark-tremor-card,.shadow-dark-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-dark-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-tremor-card{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-tremor-dropdown{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-tremor-dropdown,.shadow-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-tremor-brand{outline-color:#6366f1}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-amber-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 243 199/var(--tw-ring-opacity))}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity))}.ring-amber-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 251 235/var(--tw-ring-opacity))}.ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.ring-amber-600{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity))}.ring-amber-700{--tw-ring-opacity:1;--tw-ring-color:rgb(180 83 9/var(--tw-ring-opacity))}.ring-amber-800{--tw-ring-opacity:1;--tw-ring-color:rgb(146 64 14/var(--tw-ring-opacity))}.ring-amber-900{--tw-ring-opacity:1;--tw-ring-color:rgb(120 53 15/var(--tw-ring-opacity))}.ring-amber-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 26 3/var(--tw-ring-opacity))}.ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity))}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity))}.ring-blue-50{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-blue-600{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity))}.ring-blue-700{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity))}.ring-blue-900{--tw-ring-opacity:1;--tw-ring-color:rgb(30 58 138/var(--tw-ring-opacity))}.ring-blue-950{--tw-ring-opacity:1;--tw-ring-color:rgb(23 37 84/var(--tw-ring-opacity))}.ring-cyan-100{--tw-ring-opacity:1;--tw-ring-color:rgb(207 250 254/var(--tw-ring-opacity))}.ring-cyan-200{--tw-ring-opacity:1;--tw-ring-color:rgb(165 243 252/var(--tw-ring-opacity))}.ring-cyan-300{--tw-ring-opacity:1;--tw-ring-color:rgb(103 232 249/var(--tw-ring-opacity))}.ring-cyan-400{--tw-ring-opacity:1;--tw-ring-color:rgb(34 211 238/var(--tw-ring-opacity))}.ring-cyan-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 254 255/var(--tw-ring-opacity))}.ring-cyan-500{--tw-ring-opacity:1;--tw-ring-color:rgb(6 182 212/var(--tw-ring-opacity))}.ring-cyan-600{--tw-ring-opacity:1;--tw-ring-color:rgb(8 145 178/var(--tw-ring-opacity))}.ring-cyan-700{--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}.ring-cyan-800{--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}.ring-cyan-900{--tw-ring-opacity:1;--tw-ring-color:rgb(22 78 99/var(--tw-ring-opacity))}.ring-cyan-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 51 68/var(--tw-ring-opacity))}.ring-dark-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-emerald-100{--tw-ring-opacity:1;--tw-ring-color:rgb(209 250 229/var(--tw-ring-opacity))}.ring-emerald-200{--tw-ring-opacity:1;--tw-ring-color:rgb(167 243 208/var(--tw-ring-opacity))}.ring-emerald-300{--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.ring-emerald-400{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity))}.ring-emerald-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 253 245/var(--tw-ring-opacity))}.ring-emerald-500{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity))}.ring-emerald-600{--tw-ring-opacity:1;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity))}.ring-emerald-700{--tw-ring-opacity:1;--tw-ring-color:rgb(4 120 87/var(--tw-ring-opacity))}.ring-emerald-800{--tw-ring-opacity:1;--tw-ring-color:rgb(6 95 70/var(--tw-ring-opacity))}.ring-emerald-900{--tw-ring-opacity:1;--tw-ring-color:rgb(6 78 59/var(--tw-ring-opacity))}.ring-emerald-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 44 34/var(--tw-ring-opacity))}.ring-fuchsia-100{--tw-ring-opacity:1;--tw-ring-color:rgb(250 232 255/var(--tw-ring-opacity))}.ring-fuchsia-200{--tw-ring-opacity:1;--tw-ring-color:rgb(245 208 254/var(--tw-ring-opacity))}.ring-fuchsia-300{--tw-ring-opacity:1;--tw-ring-color:rgb(240 171 252/var(--tw-ring-opacity))}.ring-fuchsia-400{--tw-ring-opacity:1;--tw-ring-color:rgb(232 121 249/var(--tw-ring-opacity))}.ring-fuchsia-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 244 255/var(--tw-ring-opacity))}.ring-fuchsia-500{--tw-ring-opacity:1;--tw-ring-color:rgb(217 70 239/var(--tw-ring-opacity))}.ring-fuchsia-600{--tw-ring-opacity:1;--tw-ring-color:rgb(192 38 211/var(--tw-ring-opacity))}.ring-fuchsia-700{--tw-ring-opacity:1;--tw-ring-color:rgb(162 28 175/var(--tw-ring-opacity))}.ring-fuchsia-800{--tw-ring-opacity:1;--tw-ring-color:rgb(134 25 143/var(--tw-ring-opacity))}.ring-fuchsia-900{--tw-ring-opacity:1;--tw-ring-color:rgb(112 26 117/var(--tw-ring-opacity))}.ring-fuchsia-950{--tw-ring-opacity:1;--tw-ring-color:rgb(74 4 78/var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}.ring-gray-950{--tw-ring-opacity:1;--tw-ring-color:rgb(3 7 18/var(--tw-ring-opacity))}.ring-green-100{--tw-ring-opacity:1;--tw-ring-color:rgb(220 252 231/var(--tw-ring-opacity))}.ring-green-200{--tw-ring-opacity:1;--tw-ring-color:rgb(187 247 208/var(--tw-ring-opacity))}.ring-green-300{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity))}.ring-green-400{--tw-ring-opacity:1;--tw-ring-color:rgb(74 222 128/var(--tw-ring-opacity))}.ring-green-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 244/var(--tw-ring-opacity))}.ring-green-500{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.ring-green-600{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity))}.ring-green-700{--tw-ring-opacity:1;--tw-ring-color:rgb(21 128 61/var(--tw-ring-opacity))}.ring-green-800{--tw-ring-opacity:1;--tw-ring-color:rgb(22 101 52/var(--tw-ring-opacity))}.ring-green-900{--tw-ring-opacity:1;--tw-ring-color:rgb(20 83 45/var(--tw-ring-opacity))}.ring-green-950{--tw-ring-opacity:1;--tw-ring-color:rgb(5 46 22/var(--tw-ring-opacity))}.ring-indigo-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 231 255/var(--tw-ring-opacity))}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity))}.ring-indigo-300{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity))}.ring-indigo-400{--tw-ring-opacity:1;--tw-ring-color:rgb(129 140 248/var(--tw-ring-opacity))}.ring-indigo-50{--tw-ring-opacity:1;--tw-ring-color:rgb(238 242 255/var(--tw-ring-opacity))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.ring-indigo-700{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity))}.ring-indigo-800{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity))}.ring-indigo-900{--tw-ring-opacity:1;--tw-ring-color:rgb(49 46 129/var(--tw-ring-opacity))}.ring-indigo-950{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}.ring-lime-100{--tw-ring-opacity:1;--tw-ring-color:rgb(236 252 203/var(--tw-ring-opacity))}.ring-lime-200{--tw-ring-opacity:1;--tw-ring-color:rgb(217 249 157/var(--tw-ring-opacity))}.ring-lime-300{--tw-ring-opacity:1;--tw-ring-color:rgb(190 242 100/var(--tw-ring-opacity))}.ring-lime-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 230 53/var(--tw-ring-opacity))}.ring-lime-50{--tw-ring-opacity:1;--tw-ring-color:rgb(247 254 231/var(--tw-ring-opacity))}.ring-lime-500{--tw-ring-opacity:1;--tw-ring-color:rgb(132 204 22/var(--tw-ring-opacity))}.ring-lime-600{--tw-ring-opacity:1;--tw-ring-color:rgb(101 163 13/var(--tw-ring-opacity))}.ring-lime-700{--tw-ring-opacity:1;--tw-ring-color:rgb(77 124 15/var(--tw-ring-opacity))}.ring-lime-800{--tw-ring-opacity:1;--tw-ring-color:rgb(63 98 18/var(--tw-ring-opacity))}.ring-lime-900{--tw-ring-opacity:1;--tw-ring-color:rgb(54 83 20/var(--tw-ring-opacity))}.ring-lime-950{--tw-ring-opacity:1;--tw-ring-color:rgb(26 46 5/var(--tw-ring-opacity))}.ring-neutral-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 245/var(--tw-ring-opacity))}.ring-neutral-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 229 229/var(--tw-ring-opacity))}.ring-neutral-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 212/var(--tw-ring-opacity))}.ring-neutral-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 163 163/var(--tw-ring-opacity))}.ring-neutral-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-neutral-500{--tw-ring-opacity:1;--tw-ring-color:rgb(115 115 115/var(--tw-ring-opacity))}.ring-neutral-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 82/var(--tw-ring-opacity))}.ring-neutral-700{--tw-ring-opacity:1;--tw-ring-color:rgb(64 64 64/var(--tw-ring-opacity))}.ring-neutral-800{--tw-ring-opacity:1;--tw-ring-color:rgb(38 38 38/var(--tw-ring-opacity))}.ring-neutral-900{--tw-ring-opacity:1;--tw-ring-color:rgb(23 23 23/var(--tw-ring-opacity))}.ring-neutral-950{--tw-ring-opacity:1;--tw-ring-color:rgb(10 10 10/var(--tw-ring-opacity))}.ring-orange-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 237 213/var(--tw-ring-opacity))}.ring-orange-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 215 170/var(--tw-ring-opacity))}.ring-orange-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 186 116/var(--tw-ring-opacity))}.ring-orange-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 146 60/var(--tw-ring-opacity))}.ring-orange-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 247 237/var(--tw-ring-opacity))}.ring-orange-500{--tw-ring-opacity:1;--tw-ring-color:rgb(249 115 22/var(--tw-ring-opacity))}.ring-orange-600{--tw-ring-opacity:1;--tw-ring-color:rgb(234 88 12/var(--tw-ring-opacity))}.ring-orange-700{--tw-ring-opacity:1;--tw-ring-color:rgb(194 65 12/var(--tw-ring-opacity))}.ring-orange-800{--tw-ring-opacity:1;--tw-ring-color:rgb(154 52 18/var(--tw-ring-opacity))}.ring-orange-900{--tw-ring-opacity:1;--tw-ring-color:rgb(124 45 18/var(--tw-ring-opacity))}.ring-orange-950{--tw-ring-opacity:1;--tw-ring-color:rgb(67 20 7/var(--tw-ring-opacity))}.ring-pink-100{--tw-ring-opacity:1;--tw-ring-color:rgb(252 231 243/var(--tw-ring-opacity))}.ring-pink-200{--tw-ring-opacity:1;--tw-ring-color:rgb(251 207 232/var(--tw-ring-opacity))}.ring-pink-300{--tw-ring-opacity:1;--tw-ring-color:rgb(249 168 212/var(--tw-ring-opacity))}.ring-pink-400{--tw-ring-opacity:1;--tw-ring-color:rgb(244 114 182/var(--tw-ring-opacity))}.ring-pink-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 242 248/var(--tw-ring-opacity))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity))}.ring-pink-600{--tw-ring-opacity:1;--tw-ring-color:rgb(219 39 119/var(--tw-ring-opacity))}.ring-pink-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 24 93/var(--tw-ring-opacity))}.ring-pink-800{--tw-ring-opacity:1;--tw-ring-color:rgb(157 23 77/var(--tw-ring-opacity))}.ring-pink-900{--tw-ring-opacity:1;--tw-ring-color:rgb(131 24 67/var(--tw-ring-opacity))}.ring-pink-950{--tw-ring-opacity:1;--tw-ring-color:rgb(80 7 36/var(--tw-ring-opacity))}.ring-purple-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 232 255/var(--tw-ring-opacity))}.ring-purple-200{--tw-ring-opacity:1;--tw-ring-color:rgb(233 213 255/var(--tw-ring-opacity))}.ring-purple-300{--tw-ring-opacity:1;--tw-ring-color:rgb(216 180 254/var(--tw-ring-opacity))}.ring-purple-400{--tw-ring-opacity:1;--tw-ring-color:rgb(192 132 252/var(--tw-ring-opacity))}.ring-purple-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 245 255/var(--tw-ring-opacity))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity))}.ring-purple-600{--tw-ring-opacity:1;--tw-ring-color:rgb(147 51 234/var(--tw-ring-opacity))}.ring-purple-700{--tw-ring-opacity:1;--tw-ring-color:rgb(126 34 206/var(--tw-ring-opacity))}.ring-purple-800{--tw-ring-opacity:1;--tw-ring-color:rgb(107 33 168/var(--tw-ring-opacity))}.ring-purple-900{--tw-ring-opacity:1;--tw-ring-color:rgb(88 28 135/var(--tw-ring-opacity))}.ring-purple-950{--tw-ring-opacity:1;--tw-ring-color:rgb(59 7 100/var(--tw-ring-opacity))}.ring-red-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 226 226/var(--tw-ring-opacity))}.ring-red-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity))}.ring-red-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity))}.ring-red-400{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity))}.ring-red-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 242 242/var(--tw-ring-opacity))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.ring-red-600{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.ring-red-700{--tw-ring-opacity:1;--tw-ring-color:rgb(185 28 28/var(--tw-ring-opacity))}.ring-red-800{--tw-ring-opacity:1;--tw-ring-color:rgb(153 27 27/var(--tw-ring-opacity))}.ring-red-900{--tw-ring-opacity:1;--tw-ring-color:rgb(127 29 29/var(--tw-ring-opacity))}.ring-red-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 10 10/var(--tw-ring-opacity))}.ring-rose-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 228 230/var(--tw-ring-opacity))}.ring-rose-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 205 211/var(--tw-ring-opacity))}.ring-rose-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 164 175/var(--tw-ring-opacity))}.ring-rose-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 113 133/var(--tw-ring-opacity))}.ring-rose-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 241 242/var(--tw-ring-opacity))}.ring-rose-500{--tw-ring-opacity:1;--tw-ring-color:rgb(244 63 94/var(--tw-ring-opacity))}.ring-rose-600{--tw-ring-opacity:1;--tw-ring-color:rgb(225 29 72/var(--tw-ring-opacity))}.ring-rose-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 18 60/var(--tw-ring-opacity))}.ring-rose-800{--tw-ring-opacity:1;--tw-ring-color:rgb(159 18 57/var(--tw-ring-opacity))}.ring-rose-900{--tw-ring-opacity:1;--tw-ring-color:rgb(136 19 55/var(--tw-ring-opacity))}.ring-rose-950{--tw-ring-opacity:1;--tw-ring-color:rgb(76 5 25/var(--tw-ring-opacity))}.ring-sky-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 242 254/var(--tw-ring-opacity))}.ring-sky-200{--tw-ring-opacity:1;--tw-ring-color:rgb(186 230 253/var(--tw-ring-opacity))}.ring-sky-300{--tw-ring-opacity:1;--tw-ring-color:rgb(125 211 252/var(--tw-ring-opacity))}.ring-sky-400{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.ring-sky-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 249 255/var(--tw-ring-opacity))}.ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.ring-sky-600{--tw-ring-opacity:1;--tw-ring-color:rgb(2 132 199/var(--tw-ring-opacity))}.ring-sky-700{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.ring-sky-800{--tw-ring-opacity:1;--tw-ring-color:rgb(7 89 133/var(--tw-ring-opacity))}.ring-sky-900{--tw-ring-opacity:1;--tw-ring-color:rgb(12 74 110/var(--tw-ring-opacity))}.ring-sky-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 47 73/var(--tw-ring-opacity))}.ring-slate-100{--tw-ring-opacity:1;--tw-ring-color:rgb(241 245 249/var(--tw-ring-opacity))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-slate-300{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity))}.ring-slate-400{--tw-ring-opacity:1;--tw-ring-color:rgb(148 163 184/var(--tw-ring-opacity))}.ring-slate-50{--tw-ring-opacity:1;--tw-ring-color:rgb(248 250 252/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.ring-slate-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 41 59/var(--tw-ring-opacity))}.ring-slate-900{--tw-ring-opacity:1;--tw-ring-color:rgb(15 23 42/var(--tw-ring-opacity))}.ring-slate-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity))}.ring-stone-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 244/var(--tw-ring-opacity))}.ring-stone-200{--tw-ring-opacity:1;--tw-ring-color:rgb(231 229 228/var(--tw-ring-opacity))}.ring-stone-300{--tw-ring-opacity:1;--tw-ring-color:rgb(214 211 209/var(--tw-ring-opacity))}.ring-stone-400{--tw-ring-opacity:1;--tw-ring-color:rgb(168 162 158/var(--tw-ring-opacity))}.ring-stone-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 249/var(--tw-ring-opacity))}.ring-stone-500{--tw-ring-opacity:1;--tw-ring-color:rgb(120 113 108/var(--tw-ring-opacity))}.ring-stone-600{--tw-ring-opacity:1;--tw-ring-color:rgb(87 83 78/var(--tw-ring-opacity))}.ring-stone-700{--tw-ring-opacity:1;--tw-ring-color:rgb(68 64 60/var(--tw-ring-opacity))}.ring-stone-800{--tw-ring-opacity:1;--tw-ring-color:rgb(41 37 36/var(--tw-ring-opacity))}.ring-stone-900{--tw-ring-opacity:1;--tw-ring-color:rgb(28 25 23/var(--tw-ring-opacity))}.ring-stone-950{--tw-ring-opacity:1;--tw-ring-color:rgb(12 10 9/var(--tw-ring-opacity))}.ring-teal-100{--tw-ring-opacity:1;--tw-ring-color:rgb(204 251 241/var(--tw-ring-opacity))}.ring-teal-200{--tw-ring-opacity:1;--tw-ring-color:rgb(153 246 228/var(--tw-ring-opacity))}.ring-teal-300{--tw-ring-opacity:1;--tw-ring-color:rgb(94 234 212/var(--tw-ring-opacity))}.ring-teal-400{--tw-ring-opacity:1;--tw-ring-color:rgb(45 212 191/var(--tw-ring-opacity))}.ring-teal-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 250/var(--tw-ring-opacity))}.ring-teal-500{--tw-ring-opacity:1;--tw-ring-color:rgb(20 184 166/var(--tw-ring-opacity))}.ring-teal-600{--tw-ring-opacity:1;--tw-ring-color:rgb(13 148 136/var(--tw-ring-opacity))}.ring-teal-700{--tw-ring-opacity:1;--tw-ring-color:rgb(15 118 110/var(--tw-ring-opacity))}.ring-teal-800{--tw-ring-opacity:1;--tw-ring-color:rgb(17 94 89/var(--tw-ring-opacity))}.ring-teal-900{--tw-ring-opacity:1;--tw-ring-color:rgb(19 78 74/var(--tw-ring-opacity))}.ring-teal-950{--tw-ring-opacity:1;--tw-ring-color:rgb(4 47 46/var(--tw-ring-opacity))}.ring-tremor-brand-inverted{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-tremor-brand-muted{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.ring-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-violet-100{--tw-ring-opacity:1;--tw-ring-color:rgb(237 233 254/var(--tw-ring-opacity))}.ring-violet-200{--tw-ring-opacity:1;--tw-ring-color:rgb(221 214 254/var(--tw-ring-opacity))}.ring-violet-300{--tw-ring-opacity:1;--tw-ring-color:rgb(196 181 253/var(--tw-ring-opacity))}.ring-violet-400{--tw-ring-opacity:1;--tw-ring-color:rgb(167 139 250/var(--tw-ring-opacity))}.ring-violet-50{--tw-ring-opacity:1;--tw-ring-color:rgb(245 243 255/var(--tw-ring-opacity))}.ring-violet-500{--tw-ring-opacity:1;--tw-ring-color:rgb(139 92 246/var(--tw-ring-opacity))}.ring-violet-600{--tw-ring-opacity:1;--tw-ring-color:rgb(124 58 237/var(--tw-ring-opacity))}.ring-violet-700{--tw-ring-opacity:1;--tw-ring-color:rgb(109 40 217/var(--tw-ring-opacity))}.ring-violet-800{--tw-ring-opacity:1;--tw-ring-color:rgb(91 33 182/var(--tw-ring-opacity))}.ring-violet-900{--tw-ring-opacity:1;--tw-ring-color:rgb(76 29 149/var(--tw-ring-opacity))}.ring-violet-950{--tw-ring-opacity:1;--tw-ring-color:rgb(46 16 101/var(--tw-ring-opacity))}.ring-yellow-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 249 195/var(--tw-ring-opacity))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity))}.ring-yellow-400{--tw-ring-opacity:1;--tw-ring-color:rgb(250 204 21/var(--tw-ring-opacity))}.ring-yellow-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 252 232/var(--tw-ring-opacity))}.ring-yellow-500{--tw-ring-opacity:1;--tw-ring-color:rgb(234 179 8/var(--tw-ring-opacity))}.ring-yellow-600{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity))}.ring-yellow-700{--tw-ring-opacity:1;--tw-ring-color:rgb(161 98 7/var(--tw-ring-opacity))}.ring-yellow-800{--tw-ring-opacity:1;--tw-ring-color:rgb(133 77 14/var(--tw-ring-opacity))}.ring-yellow-900{--tw-ring-opacity:1;--tw-ring-color:rgb(113 63 18/var(--tw-ring-opacity))}.ring-yellow-950{--tw-ring-opacity:1;--tw-ring-color:rgb(66 32 6/var(--tw-ring-opacity))}.ring-zinc-100{--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity))}.ring-zinc-200{--tw-ring-opacity:1;--tw-ring-color:rgb(228 228 231/var(--tw-ring-opacity))}.ring-zinc-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity))}.ring-zinc-400{--tw-ring-opacity:1;--tw-ring-color:rgb(161 161 170/var(--tw-ring-opacity))}.ring-zinc-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-zinc-500{--tw-ring-opacity:1;--tw-ring-color:rgb(113 113 122/var(--tw-ring-opacity))}.ring-zinc-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 91/var(--tw-ring-opacity))}.ring-zinc-700{--tw-ring-opacity:1;--tw-ring-color:rgb(63 63 70/var(--tw-ring-opacity))}.ring-zinc-800{--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42/var(--tw-ring-opacity))}.ring-zinc-900{--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity))}.ring-zinc-950{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity))}.ring-opacity-40{--tw-ring-opacity:0.4}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.\[scrollbar-width\:none\]{scrollbar-width:none}:root{--foreground-rgb:0,0,0;--background-start-rgb:255,255,255;--background-end-rgb:255,255,255}body{color:rgb(var(--foreground-rgb));background:linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb))}.placeholder\:text-tremor-content::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.first\:rounded-l-\[4px\]:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.last\:rounded-r-\[4px\]:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.focus-within\:relative:focus-within{position:relative}.hover\:border-b-2:hover{border-bottom-width:2px}.hover\:border-amber-100:hover{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.hover\:border-amber-200:hover{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.hover\:border-amber-300:hover{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.hover\:border-amber-400:hover{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.hover\:border-amber-50:hover{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.hover\:border-amber-500:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.hover\:border-amber-600:hover{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.hover\:border-amber-700:hover{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.hover\:border-amber-800:hover{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.hover\:border-amber-900:hover{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.hover\:border-amber-950:hover{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.hover\:border-blue-100:hover{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.hover\:border-blue-200:hover{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.hover\:border-blue-50:hover{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.hover\:border-blue-500:hover{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.hover\:border-blue-700:hover{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.hover\:border-blue-800:hover{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.hover\:border-blue-900:hover{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.hover\:border-blue-950:hover{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.hover\:border-cyan-100:hover{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.hover\:border-cyan-200:hover{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.hover\:border-cyan-300:hover{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.hover\:border-cyan-400:hover{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.hover\:border-cyan-50:hover{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.hover\:border-cyan-500:hover{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.hover\:border-cyan-600:hover{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.hover\:border-cyan-700:hover{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.hover\:border-cyan-800:hover{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.hover\:border-cyan-900:hover{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.hover\:border-cyan-950:hover{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.hover\:border-emerald-100:hover{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.hover\:border-emerald-200:hover{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.hover\:border-emerald-300:hover{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.hover\:border-emerald-400:hover{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.hover\:border-emerald-50:hover{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.hover\:border-emerald-500:hover{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.hover\:border-emerald-600:hover{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.hover\:border-emerald-700:hover{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.hover\:border-emerald-800:hover{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.hover\:border-emerald-900:hover{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.hover\:border-emerald-950:hover{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.hover\:border-fuchsia-100:hover{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.hover\:border-fuchsia-200:hover{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.hover\:border-fuchsia-300:hover{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.hover\:border-fuchsia-400:hover{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.hover\:border-fuchsia-50:hover{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.hover\:border-fuchsia-500:hover{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.hover\:border-fuchsia-600:hover{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.hover\:border-fuchsia-700:hover{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.hover\:border-fuchsia-800:hover{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.hover\:border-fuchsia-900:hover{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.hover\:border-fuchsia-950:hover{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.hover\:border-gray-100:hover{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.hover\:border-gray-50:hover{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.hover\:border-gray-700:hover{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.hover\:border-gray-900:hover{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.hover\:border-gray-950:hover{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.hover\:border-green-100:hover{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.hover\:border-green-200:hover{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.hover\:border-green-300:hover{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.hover\:border-green-400:hover{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.hover\:border-green-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.hover\:border-green-500:hover{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.hover\:border-green-600:hover{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.hover\:border-green-700:hover{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.hover\:border-green-800:hover{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.hover\:border-green-900:hover{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.hover\:border-green-950:hover{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.hover\:border-indigo-100:hover{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.hover\:border-indigo-200:hover{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.hover\:border-indigo-300:hover{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.hover\:border-indigo-400:hover{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.hover\:border-indigo-50:hover{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.hover\:border-indigo-500:hover{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.hover\:border-indigo-600:hover{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.hover\:border-indigo-700:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-indigo-800:hover{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.hover\:border-indigo-900:hover{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.hover\:border-indigo-950:hover{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.hover\:border-lime-100:hover{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.hover\:border-lime-200:hover{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.hover\:border-lime-300:hover{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.hover\:border-lime-400:hover{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.hover\:border-lime-50:hover{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.hover\:border-lime-500:hover{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.hover\:border-lime-600:hover{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.hover\:border-lime-700:hover{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.hover\:border-lime-800:hover{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.hover\:border-lime-900:hover{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.hover\:border-lime-950:hover{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.hover\:border-neutral-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.hover\:border-neutral-200:hover{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.hover\:border-neutral-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.hover\:border-neutral-400:hover{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.hover\:border-neutral-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-neutral-500:hover{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.hover\:border-neutral-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.hover\:border-neutral-700:hover{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.hover\:border-neutral-800:hover{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.hover\:border-neutral-900:hover{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.hover\:border-neutral-950:hover{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.hover\:border-orange-100:hover{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.hover\:border-orange-200:hover{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.hover\:border-orange-300:hover{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.hover\:border-orange-400:hover{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.hover\:border-orange-50:hover{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.hover\:border-orange-500:hover{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.hover\:border-orange-600:hover{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.hover\:border-orange-700:hover{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.hover\:border-orange-800:hover{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.hover\:border-orange-900:hover{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.hover\:border-orange-950:hover{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.hover\:border-pink-100:hover{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.hover\:border-pink-200:hover{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.hover\:border-pink-300:hover{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.hover\:border-pink-400:hover{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.hover\:border-pink-50:hover{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.hover\:border-pink-500:hover{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.hover\:border-pink-600:hover{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.hover\:border-pink-700:hover{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.hover\:border-pink-800:hover{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.hover\:border-pink-900:hover{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.hover\:border-pink-950:hover{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.hover\:border-purple-100:hover{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.hover\:border-purple-200:hover{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.hover\:border-purple-300:hover{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.hover\:border-purple-400:hover{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.hover\:border-purple-50:hover{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.hover\:border-purple-500:hover{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.hover\:border-purple-600:hover{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.hover\:border-purple-700:hover{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.hover\:border-purple-800:hover{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.hover\:border-purple-900:hover{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.hover\:border-purple-950:hover{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.hover\:border-red-100:hover{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.hover\:border-red-200:hover{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.hover\:border-red-300:hover{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.hover\:border-red-400:hover{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.hover\:border-red-50:hover{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.hover\:border-red-600:hover{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.hover\:border-red-800:hover{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.hover\:border-red-900:hover{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.hover\:border-red-950:hover{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.hover\:border-rose-100:hover{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.hover\:border-rose-200:hover{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.hover\:border-rose-300:hover{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.hover\:border-rose-400:hover{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.hover\:border-rose-50:hover{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.hover\:border-rose-500:hover{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.hover\:border-rose-600:hover{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.hover\:border-rose-700:hover{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.hover\:border-rose-800:hover{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.hover\:border-rose-900:hover{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.hover\:border-rose-950:hover{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.hover\:border-sky-100:hover{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.hover\:border-sky-200:hover{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.hover\:border-sky-300:hover{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.hover\:border-sky-400:hover{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.hover\:border-sky-50:hover{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.hover\:border-sky-500:hover{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.hover\:border-sky-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-sky-700:hover{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.hover\:border-sky-800:hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.hover\:border-sky-900:hover{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.hover\:border-sky-950:hover{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.hover\:border-slate-100:hover{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.hover\:border-slate-200:hover{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.hover\:border-slate-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.hover\:border-slate-50:hover{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.hover\:border-slate-500:hover{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.hover\:border-slate-600:hover{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.hover\:border-slate-700:hover{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.hover\:border-slate-800:hover{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.hover\:border-slate-900:hover{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.hover\:border-slate-950:hover{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.hover\:border-stone-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.hover\:border-stone-200:hover{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.hover\:border-stone-300:hover{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.hover\:border-stone-400:hover{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.hover\:border-stone-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.hover\:border-stone-500:hover{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.hover\:border-stone-600:hover{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.hover\:border-stone-700:hover{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.hover\:border-stone-800:hover{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.hover\:border-stone-900:hover{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.hover\:border-stone-950:hover{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.hover\:border-teal-100:hover{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.hover\:border-teal-200:hover{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.hover\:border-teal-300:hover{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.hover\:border-teal-400:hover{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.hover\:border-teal-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.hover\:border-teal-500:hover{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.hover\:border-teal-600:hover{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.hover\:border-teal-700:hover{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.hover\:border-teal-800:hover{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.hover\:border-teal-900:hover{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.hover\:border-teal-950:hover{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.hover\:border-tremor-brand-emphasis:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-tremor-content:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-violet-100:hover{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.hover\:border-violet-200:hover{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.hover\:border-violet-300:hover{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.hover\:border-violet-400:hover{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.hover\:border-violet-50:hover{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.hover\:border-violet-500:hover{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.hover\:border-violet-600:hover{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.hover\:border-violet-700:hover{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.hover\:border-violet-800:hover{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.hover\:border-violet-900:hover{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.hover\:border-violet-950:hover{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.hover\:border-yellow-100:hover{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.hover\:border-yellow-200:hover{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.hover\:border-yellow-300:hover{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.hover\:border-yellow-400:hover{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.hover\:border-yellow-50:hover{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.hover\:border-yellow-500:hover{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.hover\:border-yellow-600:hover{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.hover\:border-yellow-700:hover{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.hover\:border-yellow-800:hover{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.hover\:border-yellow-900:hover{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.hover\:border-yellow-950:hover{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.hover\:border-zinc-100:hover{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.hover\:border-zinc-200:hover{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.hover\:border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:border-zinc-400:hover{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.hover\:border-zinc-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-zinc-500:hover{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.hover\:border-zinc-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-zinc-700:hover{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.hover\:border-zinc-800:hover{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.hover\:border-zinc-900:hover{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.hover\:border-zinc-950:hover{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.hover\:bg-amber-300:hover{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.hover\:bg-amber-400:hover{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.hover\:bg-amber-500:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.hover\:bg-amber-700:hover{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.hover\:bg-amber-800:hover{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.hover\:bg-amber-900:hover{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.hover\:bg-amber-950:hover{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.hover\:bg-blue-300:hover{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.hover\:bg-blue-900:hover{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.hover\:bg-blue-950:hover{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.hover\:bg-cyan-100:hover{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.hover\:bg-cyan-200:hover{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.hover\:bg-cyan-300:hover{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.hover\:bg-cyan-400:hover{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.hover\:bg-cyan-50:hover{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.hover\:bg-cyan-500:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.hover\:bg-cyan-600:hover{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.hover\:bg-cyan-700:hover{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.hover\:bg-cyan-800:hover{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.hover\:bg-cyan-900:hover{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.hover\:bg-cyan-950:hover{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.hover\:bg-emerald-100:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.hover\:bg-emerald-200:hover{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.hover\:bg-emerald-300:hover{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.hover\:bg-emerald-400:hover{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.hover\:bg-emerald-500:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.hover\:bg-emerald-800:hover{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.hover\:bg-emerald-900:hover{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.hover\:bg-emerald-950:hover{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.hover\:bg-fuchsia-100:hover{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-200:hover{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.hover\:bg-fuchsia-300:hover{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.hover\:bg-fuchsia-400:hover{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.hover\:bg-fuchsia-50:hover{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-500:hover{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.hover\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.hover\:bg-fuchsia-700:hover{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.hover\:bg-fuchsia-800:hover{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.hover\:bg-fuchsia-900:hover{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.hover\:bg-fuchsia-950:hover{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.hover\:bg-gray-950:hover{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.hover\:bg-green-200:hover{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.hover\:bg-green-300:hover{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.hover\:bg-green-400:hover{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.hover\:bg-green-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.hover\:bg-green-500:hover{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-green-800:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.hover\:bg-green-900:hover{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.hover\:bg-green-950:hover{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.hover\:bg-indigo-200:hover{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.hover\:bg-indigo-300:hover{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.hover\:bg-indigo-400:hover{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.hover\:bg-indigo-50:hover{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.hover\:bg-indigo-500:hover{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.hover\:bg-indigo-600:hover{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-indigo-800:hover{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.hover\:bg-indigo-900:hover{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.hover\:bg-indigo-950:hover{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.hover\:bg-lime-100:hover{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.hover\:bg-lime-200:hover{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.hover\:bg-lime-300:hover{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.hover\:bg-lime-400:hover{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.hover\:bg-lime-50:hover{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.hover\:bg-lime-500:hover{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.hover\:bg-lime-600:hover{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.hover\:bg-lime-700:hover{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.hover\:bg-lime-800:hover{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.hover\:bg-lime-900:hover{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.hover\:bg-lime-950:hover{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.hover\:bg-neutral-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.hover\:bg-neutral-200:hover{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.hover\:bg-neutral-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.hover\:bg-neutral-400:hover{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.hover\:bg-neutral-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-neutral-500:hover{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.hover\:bg-neutral-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.hover\:bg-neutral-700:hover{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.hover\:bg-neutral-800:hover{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.hover\:bg-neutral-900:hover{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.hover\:bg-neutral-950:hover{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.hover\:bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.hover\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.hover\:bg-orange-300:hover{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.hover\:bg-orange-400:hover{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.hover\:bg-orange-50:hover{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.hover\:bg-orange-500:hover{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.hover\:bg-orange-700:hover{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.hover\:bg-orange-800:hover{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.hover\:bg-orange-900:hover{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.hover\:bg-orange-950:hover{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.hover\:bg-pink-200:hover{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.hover\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.hover\:bg-pink-400:hover{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.hover\:bg-pink-50:hover{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-pink-600:hover{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.hover\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.hover\:bg-pink-800:hover{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.hover\:bg-pink-900:hover{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.hover\:bg-pink-950:hover{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.hover\:bg-purple-200:hover{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.hover\:bg-purple-300:hover{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.hover\:bg-purple-400:hover{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.hover\:bg-purple-50:hover{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.hover\:bg-purple-500:hover{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.hover\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.hover\:bg-purple-800:hover{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.hover\:bg-purple-900:hover{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.hover\:bg-purple-950:hover{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.hover\:bg-red-300:hover{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.hover\:bg-red-400:hover{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:bg-red-800:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.hover\:bg-red-950:hover{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.hover\:bg-rose-100:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.hover\:bg-rose-200:hover{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.hover\:bg-rose-300:hover{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.hover\:bg-rose-400:hover{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.hover\:bg-rose-500:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.hover\:bg-rose-600:hover{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.hover\:bg-rose-700:hover{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.hover\:bg-rose-800:hover{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.hover\:bg-rose-900:hover{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.hover\:bg-rose-950:hover{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.hover\:bg-sky-100:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.hover\:bg-sky-200:hover{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.hover\:bg-sky-300:hover{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.hover\:bg-sky-400:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.hover\:bg-sky-50:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.hover\:bg-sky-500:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.hover\:bg-sky-600:hover{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.hover\:bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:bg-sky-800:hover{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.hover\:bg-sky-900:hover{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.hover\:bg-sky-950:hover{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\:bg-slate-300:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.hover\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-slate-500:hover{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.hover\:bg-slate-600:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.hover\:bg-slate-900:hover{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.hover\:bg-slate-950:hover{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.hover\:bg-stone-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.hover\:bg-stone-200:hover{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.hover\:bg-stone-300:hover{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.hover\:bg-stone-400:hover{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.hover\:bg-stone-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.hover\:bg-stone-500:hover{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.hover\:bg-stone-600:hover{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.hover\:bg-stone-700:hover{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.hover\:bg-stone-800:hover{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.hover\:bg-stone-900:hover{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.hover\:bg-stone-950:hover{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.hover\:bg-teal-100:hover{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.hover\:bg-teal-200:hover{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.hover\:bg-teal-300:hover{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.hover\:bg-teal-400:hover{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.hover\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.hover\:bg-teal-500:hover{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.hover\:bg-teal-600:hover{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.hover\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.hover\:bg-teal-800:hover{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.hover\:bg-teal-900:hover{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.hover\:bg-teal-950:hover{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.hover\:bg-tremor-background-muted:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-tremor-background-subtle:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-emphasis:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-faint:hover{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.hover\:bg-violet-100:hover{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.hover\:bg-violet-200:hover{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.hover\:bg-violet-300:hover{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.hover\:bg-violet-400:hover{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.hover\:bg-violet-50:hover{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.hover\:bg-violet-500:hover{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.hover\:bg-violet-600:hover{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.hover\:bg-violet-800:hover{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.hover\:bg-violet-900:hover{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.hover\:bg-violet-950:hover{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-yellow-200:hover{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.hover\:bg-yellow-300:hover{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.hover\:bg-yellow-400:hover{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.hover\:bg-yellow-50:hover{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.hover\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.hover\:bg-yellow-700:hover{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.hover\:bg-yellow-800:hover{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.hover\:bg-yellow-900:hover{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.hover\:bg-yellow-950:hover{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.hover\:bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.hover\:bg-zinc-200:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.hover\:bg-zinc-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.hover\:bg-zinc-400:hover{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-zinc-500:hover{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.hover\:bg-zinc-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.hover\:bg-zinc-700:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.hover\:bg-zinc-800:hover{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.hover\:bg-zinc-900:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.hover\:bg-zinc-950:hover{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.hover\:bg-opacity-20:hover{--tw-bg-opacity:0.2}.hover\:text-amber-100:hover{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.hover\:text-amber-200:hover{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.hover\:text-amber-300:hover{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.hover\:text-amber-400:hover{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.hover\:text-amber-50:hover{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.hover\:text-amber-500:hover{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.hover\:text-amber-700:hover{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.hover\:text-amber-800:hover{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.hover\:text-amber-900:hover{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.hover\:text-amber-950:hover{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.hover\:text-blue-100:hover{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.hover\:text-blue-200:hover{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.hover\:text-blue-50:hover{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.hover\:text-blue-900:hover{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.hover\:text-blue-950:hover{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.hover\:text-cyan-100:hover{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.hover\:text-cyan-200:hover{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.hover\:text-cyan-300:hover{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.hover\:text-cyan-400:hover{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.hover\:text-cyan-50:hover{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.hover\:text-cyan-500:hover{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.hover\:text-cyan-600:hover{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.hover\:text-cyan-700:hover{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.hover\:text-cyan-800:hover{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.hover\:text-cyan-900:hover{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.hover\:text-cyan-950:hover{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.hover\:text-emerald-100:hover{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.hover\:text-emerald-200:hover{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.hover\:text-emerald-300:hover{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.hover\:text-emerald-400:hover{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.hover\:text-emerald-50:hover{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.hover\:text-emerald-500:hover{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.hover\:text-emerald-600:hover{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.hover\:text-emerald-700:hover{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.hover\:text-emerald-800:hover{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.hover\:text-emerald-900:hover{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.hover\:text-emerald-950:hover{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.hover\:text-fuchsia-100:hover{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.hover\:text-fuchsia-200:hover{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.hover\:text-fuchsia-300:hover{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.hover\:text-fuchsia-400:hover{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.hover\:text-fuchsia-50:hover{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.hover\:text-fuchsia-500:hover{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.hover\:text-fuchsia-600:hover{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.hover\:text-fuchsia-700:hover{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.hover\:text-fuchsia-800:hover{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.hover\:text-fuchsia-900:hover{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.hover\:text-fuchsia-950:hover{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.hover\:text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-gray-950:hover{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.hover\:text-green-100:hover{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.hover\:text-green-200:hover{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.hover\:text-green-300:hover{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.hover\:text-green-400:hover{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.hover\:text-green-50:hover{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.hover\:text-green-600:hover{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.hover\:text-green-700:hover{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.hover\:text-green-800:hover{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.hover\:text-green-900:hover{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.hover\:text-green-950:hover{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.hover\:text-indigo-100:hover{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.hover\:text-indigo-200:hover{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.hover\:text-indigo-300:hover{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.hover\:text-indigo-400:hover{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.hover\:text-indigo-50:hover{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.hover\:text-indigo-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-indigo-800:hover{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.hover\:text-indigo-950:hover{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.hover\:text-lime-100:hover{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.hover\:text-lime-200:hover{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.hover\:text-lime-300:hover{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.hover\:text-lime-400:hover{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.hover\:text-lime-50:hover{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.hover\:text-lime-500:hover{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.hover\:text-lime-600:hover{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.hover\:text-lime-700:hover{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.hover\:text-lime-800:hover{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.hover\:text-lime-900:hover{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.hover\:text-lime-950:hover{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.hover\:text-neutral-100:hover{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.hover\:text-neutral-200:hover{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.hover\:text-neutral-300:hover{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.hover\:text-neutral-400:hover{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.hover\:text-neutral-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-neutral-500:hover{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.hover\:text-neutral-600:hover{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.hover\:text-neutral-700:hover{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.hover\:text-neutral-900:hover{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.hover\:text-neutral-950:hover{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.hover\:text-orange-100:hover{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.hover\:text-orange-200:hover{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.hover\:text-orange-400:hover{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.hover\:text-orange-50:hover{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.hover\:text-orange-500:hover{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.hover\:text-orange-600:hover{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.hover\:text-orange-700:hover{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.hover\:text-orange-800:hover{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.hover\:text-orange-900:hover{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.hover\:text-orange-950:hover{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.hover\:text-pink-100:hover{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.hover\:text-pink-200:hover{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.hover\:text-pink-300:hover{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.hover\:text-pink-400:hover{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.hover\:text-pink-50:hover{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.hover\:text-pink-500:hover{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.hover\:text-pink-600:hover{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.hover\:text-pink-700:hover{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.hover\:text-pink-800:hover{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.hover\:text-pink-900:hover{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.hover\:text-pink-950:hover{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.hover\:text-purple-100:hover{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.hover\:text-purple-200:hover{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.hover\:text-purple-300:hover{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.hover\:text-purple-400:hover{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.hover\:text-purple-50:hover{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.hover\:text-purple-500:hover{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.hover\:text-purple-600:hover{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.hover\:text-purple-700:hover{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.hover\:text-purple-800:hover{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.hover\:text-purple-900:hover{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.hover\:text-purple-950:hover{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.hover\:text-red-100:hover{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.hover\:text-red-200:hover{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.hover\:text-red-800:hover{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.hover\:text-red-900:hover{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.hover\:text-red-950:hover{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.hover\:text-rose-100:hover{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.hover\:text-rose-200:hover{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.hover\:text-rose-300:hover{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.hover\:text-rose-400:hover{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.hover\:text-rose-50:hover{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.hover\:text-rose-600:hover{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.hover\:text-rose-700:hover{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.hover\:text-rose-800:hover{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.hover\:text-rose-900:hover{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.hover\:text-rose-950:hover{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.hover\:text-sky-100:hover{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.hover\:text-sky-200:hover{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.hover\:text-sky-300:hover{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.hover\:text-sky-400:hover{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.hover\:text-sky-50:hover{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.hover\:text-sky-500:hover{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.hover\:text-sky-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.hover\:text-sky-700:hover{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.hover\:text-sky-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-sky-900:hover{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.hover\:text-sky-950:hover{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.hover\:text-slate-100:hover{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.hover\:text-slate-200:hover{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.hover\:text-slate-300:hover{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.hover\:text-slate-400:hover{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:text-slate-50:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.hover\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-slate-950:hover{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.hover\:text-stone-100:hover{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.hover\:text-stone-200:hover{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.hover\:text-stone-300:hover{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.hover\:text-stone-400:hover{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.hover\:text-stone-50:hover{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.hover\:text-stone-500:hover{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.hover\:text-stone-600:hover{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.hover\:text-stone-700:hover{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.hover\:text-stone-800:hover{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.hover\:text-stone-900:hover{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.hover\:text-stone-950:hover{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.hover\:text-teal-100:hover{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.hover\:text-teal-200:hover{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.hover\:text-teal-300:hover{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.hover\:text-teal-400:hover{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.hover\:text-teal-50:hover{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.hover\:text-teal-500:hover{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.hover\:text-teal-600:hover{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.hover\:text-teal-700:hover{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.hover\:text-teal-800:hover{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.hover\:text-teal-900:hover{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.hover\:text-teal-950:hover{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.hover\:text-tremor-brand-emphasis:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-tremor-content:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-tremor-content-emphasis:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-violet-100:hover{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.hover\:text-violet-200:hover{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.hover\:text-violet-300:hover{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.hover\:text-violet-400:hover{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.hover\:text-violet-50:hover{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.hover\:text-violet-500:hover{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.hover\:text-violet-600:hover{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.hover\:text-violet-700:hover{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.hover\:text-violet-800:hover{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.hover\:text-violet-900:hover{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.hover\:text-violet-950:hover{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.hover\:text-yellow-100:hover{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.hover\:text-yellow-200:hover{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.hover\:text-yellow-300:hover{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.hover\:text-yellow-400:hover{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.hover\:text-yellow-50:hover{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.hover\:text-yellow-500:hover{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.hover\:text-yellow-600:hover{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.hover\:text-yellow-700:hover{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.hover\:text-yellow-800:hover{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.hover\:text-yellow-900:hover{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.hover\:text-yellow-950:hover{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.hover\:text-zinc-100:hover{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.hover\:text-zinc-200:hover{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.hover\:text-zinc-300:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.hover\:text-zinc-400:hover{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.hover\:text-zinc-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-zinc-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-zinc-600:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.hover\:text-zinc-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.hover\:text-zinc-800:hover{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.hover\:text-zinc-950:hover{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-tremor-brand-subtle:focus{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-tremor-brand-muted:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.group:hover .group-hover\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.group:active .group-active\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.aria-selected\:\!bg-tremor-background-subtle[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(243 244 246/var(--tw-bg-opacity))!important}.aria-selected\:bg-tremor-background-emphasis[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.aria-selected\:\!text-tremor-content[aria-selected=true]{--tw-text-opacity:1!important;color:rgb(107 114 128/var(--tw-text-opacity))!important}.aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.aria-selected\:text-tremor-brand-inverted[aria-selected=true],.aria-selected\:text-tremor-content-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.ui-open\:underline[data-headlessui-state~=open]{text-decoration-line:underline}:where([data-headlessui-state~=open]) .ui-open\:underline{text-decoration-line:underline}.ui-selected\:border-b-2[data-headlessui-state~=selected]{border-bottom-width:2px}.ui-selected\:border-amber-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.ui-selected\:border-amber-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.ui-selected\:border-amber-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.ui-selected\:border-amber-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.ui-selected\:border-amber-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.ui-selected\:border-amber-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.ui-selected\:border-amber-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.ui-selected\:border-amber-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.ui-selected\:border-amber-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.ui-selected\:border-amber-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.ui-selected\:border-amber-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.ui-selected\:border-blue-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.ui-selected\:border-blue-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.ui-selected\:border-blue-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.ui-selected\:border-blue-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.ui-selected\:border-blue-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.ui-selected\:border-blue-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.ui-selected\:border-blue-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.ui-selected\:border-blue-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.ui-selected\:border-blue-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.ui-selected\:border-blue-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.ui-selected\:border-blue-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.ui-selected\:border-cyan-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.ui-selected\:border-cyan-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.ui-selected\:border-cyan-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.ui-selected\:border-cyan-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.ui-selected\:border-cyan-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.ui-selected\:border-cyan-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.ui-selected\:border-cyan-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.ui-selected\:border-cyan-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.ui-selected\:border-cyan-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.ui-selected\:border-cyan-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.ui-selected\:border-cyan-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.ui-selected\:border-emerald-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.ui-selected\:border-emerald-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.ui-selected\:border-emerald-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.ui-selected\:border-emerald-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.ui-selected\:border-emerald-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.ui-selected\:border-emerald-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.ui-selected\:border-emerald-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.ui-selected\:border-emerald-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.ui-selected\:border-emerald-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.ui-selected\:border-emerald-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.ui-selected\:border-emerald-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.ui-selected\:border-gray-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.ui-selected\:border-gray-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-gray-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.ui-selected\:border-gray-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.ui-selected\:border-gray-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.ui-selected\:border-gray-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.ui-selected\:border-gray-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.ui-selected\:border-gray-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.ui-selected\:border-gray-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.ui-selected\:border-gray-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.ui-selected\:border-gray-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.ui-selected\:border-green-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.ui-selected\:border-green-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.ui-selected\:border-green-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.ui-selected\:border-green-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.ui-selected\:border-green-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.ui-selected\:border-green-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.ui-selected\:border-green-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.ui-selected\:border-green-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.ui-selected\:border-green-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.ui-selected\:border-green-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.ui-selected\:border-green-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.ui-selected\:border-indigo-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.ui-selected\:border-indigo-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.ui-selected\:border-indigo-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.ui-selected\:border-indigo-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-indigo-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.ui-selected\:border-indigo-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.ui-selected\:border-indigo-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.ui-selected\:border-indigo-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.ui-selected\:border-indigo-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.ui-selected\:border-lime-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.ui-selected\:border-lime-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.ui-selected\:border-lime-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.ui-selected\:border-lime-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.ui-selected\:border-lime-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.ui-selected\:border-lime-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.ui-selected\:border-lime-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.ui-selected\:border-lime-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.ui-selected\:border-lime-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.ui-selected\:border-lime-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.ui-selected\:border-lime-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.ui-selected\:border-neutral-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.ui-selected\:border-neutral-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.ui-selected\:border-neutral-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.ui-selected\:border-neutral-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.ui-selected\:border-neutral-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-neutral-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.ui-selected\:border-neutral-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.ui-selected\:border-neutral-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.ui-selected\:border-neutral-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.ui-selected\:border-neutral-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.ui-selected\:border-neutral-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.ui-selected\:border-orange-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.ui-selected\:border-orange-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.ui-selected\:border-orange-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.ui-selected\:border-orange-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.ui-selected\:border-orange-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.ui-selected\:border-orange-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.ui-selected\:border-orange-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.ui-selected\:border-orange-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.ui-selected\:border-orange-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.ui-selected\:border-orange-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.ui-selected\:border-orange-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.ui-selected\:border-pink-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.ui-selected\:border-pink-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.ui-selected\:border-pink-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.ui-selected\:border-pink-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.ui-selected\:border-pink-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.ui-selected\:border-pink-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.ui-selected\:border-pink-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.ui-selected\:border-pink-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.ui-selected\:border-pink-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.ui-selected\:border-pink-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.ui-selected\:border-pink-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.ui-selected\:border-purple-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.ui-selected\:border-purple-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.ui-selected\:border-purple-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.ui-selected\:border-purple-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.ui-selected\:border-purple-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.ui-selected\:border-purple-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.ui-selected\:border-purple-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.ui-selected\:border-purple-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.ui-selected\:border-purple-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.ui-selected\:border-purple-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.ui-selected\:border-purple-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.ui-selected\:border-red-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.ui-selected\:border-red-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.ui-selected\:border-red-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.ui-selected\:border-red-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.ui-selected\:border-red-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.ui-selected\:border-red-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.ui-selected\:border-red-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.ui-selected\:border-red-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.ui-selected\:border-red-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.ui-selected\:border-red-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.ui-selected\:border-red-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.ui-selected\:border-rose-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.ui-selected\:border-rose-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.ui-selected\:border-rose-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.ui-selected\:border-rose-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.ui-selected\:border-rose-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.ui-selected\:border-rose-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.ui-selected\:border-rose-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.ui-selected\:border-rose-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.ui-selected\:border-rose-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.ui-selected\:border-rose-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.ui-selected\:border-rose-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.ui-selected\:border-sky-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.ui-selected\:border-sky-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.ui-selected\:border-sky-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.ui-selected\:border-sky-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.ui-selected\:border-sky-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.ui-selected\:border-sky-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.ui-selected\:border-sky-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.ui-selected\:border-sky-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.ui-selected\:border-sky-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.ui-selected\:border-sky-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.ui-selected\:border-sky-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.ui-selected\:border-slate-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.ui-selected\:border-slate-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.ui-selected\:border-slate-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.ui-selected\:border-slate-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.ui-selected\:border-slate-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.ui-selected\:border-slate-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.ui-selected\:border-slate-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.ui-selected\:border-slate-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.ui-selected\:border-slate-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.ui-selected\:border-slate-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.ui-selected\:border-slate-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.ui-selected\:border-stone-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.ui-selected\:border-stone-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.ui-selected\:border-stone-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.ui-selected\:border-stone-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.ui-selected\:border-stone-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.ui-selected\:border-stone-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.ui-selected\:border-stone-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.ui-selected\:border-stone-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.ui-selected\:border-stone-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.ui-selected\:border-stone-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.ui-selected\:border-stone-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.ui-selected\:border-teal-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.ui-selected\:border-teal-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.ui-selected\:border-teal-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.ui-selected\:border-teal-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.ui-selected\:border-teal-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.ui-selected\:border-teal-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.ui-selected\:border-teal-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.ui-selected\:border-teal-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.ui-selected\:border-teal-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.ui-selected\:border-teal-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.ui-selected\:border-teal-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.ui-selected\:border-tremor-border[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-tremor-brand[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-violet-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.ui-selected\:border-violet-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.ui-selected\:border-violet-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.ui-selected\:border-violet-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.ui-selected\:border-violet-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.ui-selected\:border-violet-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.ui-selected\:border-violet-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.ui-selected\:border-violet-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.ui-selected\:border-violet-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.ui-selected\:border-violet-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.ui-selected\:border-violet-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.ui-selected\:border-yellow-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.ui-selected\:border-yellow-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.ui-selected\:border-yellow-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.ui-selected\:border-yellow-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.ui-selected\:border-yellow-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.ui-selected\:border-yellow-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.ui-selected\:border-yellow-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.ui-selected\:border-yellow-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.ui-selected\:border-yellow-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.ui-selected\:border-yellow-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.ui-selected\:border-yellow-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.ui-selected\:border-zinc-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.ui-selected\:border-zinc-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.ui-selected\:border-zinc-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.ui-selected\:border-zinc-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.ui-selected\:border-zinc-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-zinc-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.ui-selected\:border-zinc-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.ui-selected\:border-zinc-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.ui-selected\:border-zinc-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.ui-selected\:border-zinc-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.ui-selected\:border-zinc-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.ui-selected\:bg-amber-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.ui-selected\:bg-amber-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.ui-selected\:bg-amber-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.ui-selected\:bg-amber-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.ui-selected\:bg-amber-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.ui-selected\:bg-amber-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.ui-selected\:bg-amber-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.ui-selected\:bg-amber-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.ui-selected\:bg-amber-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.ui-selected\:bg-amber-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.ui-selected\:bg-amber-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.ui-selected\:bg-blue-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.ui-selected\:bg-blue-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.ui-selected\:bg-blue-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.ui-selected\:bg-blue-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.ui-selected\:bg-blue-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.ui-selected\:bg-blue-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.ui-selected\:bg-blue-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.ui-selected\:bg-blue-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.ui-selected\:bg-blue-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.ui-selected\:bg-gray-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.ui-selected\:bg-gray-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.ui-selected\:bg-gray-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.ui-selected\:bg-gray-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.ui-selected\:bg-gray-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-gray-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.ui-selected\:bg-gray-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.ui-selected\:bg-gray-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.ui-selected\:bg-gray-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.ui-selected\:bg-gray-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.ui-selected\:bg-gray-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.ui-selected\:bg-green-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.ui-selected\:bg-green-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.ui-selected\:bg-green-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.ui-selected\:bg-green-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.ui-selected\:bg-green-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.ui-selected\:bg-green-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.ui-selected\:bg-green-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.ui-selected\:bg-green-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.ui-selected\:bg-green-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.ui-selected\:bg-green-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.ui-selected\:bg-green-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.ui-selected\:bg-lime-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.ui-selected\:bg-lime-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.ui-selected\:bg-lime-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.ui-selected\:bg-lime-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.ui-selected\:bg-lime-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.ui-selected\:bg-lime-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.ui-selected\:bg-lime-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.ui-selected\:bg-lime-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.ui-selected\:bg-lime-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.ui-selected\:bg-lime-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.ui-selected\:bg-lime-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-orange-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.ui-selected\:bg-orange-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.ui-selected\:bg-orange-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.ui-selected\:bg-orange-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.ui-selected\:bg-orange-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.ui-selected\:bg-orange-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.ui-selected\:bg-orange-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.ui-selected\:bg-pink-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.ui-selected\:bg-pink-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.ui-selected\:bg-pink-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.ui-selected\:bg-pink-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.ui-selected\:bg-pink-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.ui-selected\:bg-pink-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.ui-selected\:bg-pink-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.ui-selected\:bg-pink-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.ui-selected\:bg-pink-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.ui-selected\:bg-pink-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.ui-selected\:bg-pink-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.ui-selected\:bg-purple-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.ui-selected\:bg-purple-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.ui-selected\:bg-purple-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.ui-selected\:bg-purple-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.ui-selected\:bg-purple-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.ui-selected\:bg-purple-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.ui-selected\:bg-purple-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.ui-selected\:bg-purple-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.ui-selected\:bg-red-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.ui-selected\:bg-red-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.ui-selected\:bg-red-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.ui-selected\:bg-red-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.ui-selected\:bg-red-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.ui-selected\:bg-red-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.ui-selected\:bg-red-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-red-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.ui-selected\:bg-red-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.ui-selected\:bg-red-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.ui-selected\:bg-red-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-rose-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.ui-selected\:bg-rose-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.ui-selected\:bg-rose-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.ui-selected\:bg-rose-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.ui-selected\:bg-rose-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.ui-selected\:bg-rose-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.ui-selected\:bg-rose-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.ui-selected\:bg-rose-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.ui-selected\:bg-rose-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.ui-selected\:bg-rose-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.ui-selected\:bg-rose-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.ui-selected\:bg-sky-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.ui-selected\:bg-sky-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.ui-selected\:bg-sky-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.ui-selected\:bg-sky-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.ui-selected\:bg-sky-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.ui-selected\:bg-sky-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.ui-selected\:bg-sky-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.ui-selected\:bg-sky-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.ui-selected\:bg-sky-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.ui-selected\:bg-sky-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.ui-selected\:bg-sky-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.ui-selected\:bg-slate-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.ui-selected\:bg-slate-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.ui-selected\:bg-slate-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.ui-selected\:bg-slate-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.ui-selected\:bg-slate-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.ui-selected\:bg-slate-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.ui-selected\:bg-slate-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.ui-selected\:bg-slate-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.ui-selected\:bg-slate-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.ui-selected\:bg-slate-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.ui-selected\:bg-slate-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.ui-selected\:bg-stone-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.ui-selected\:bg-stone-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.ui-selected\:bg-stone-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.ui-selected\:bg-stone-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.ui-selected\:bg-stone-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.ui-selected\:bg-stone-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.ui-selected\:bg-stone-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.ui-selected\:bg-stone-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.ui-selected\:bg-stone-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.ui-selected\:bg-teal-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.ui-selected\:bg-teal-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.ui-selected\:bg-teal-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.ui-selected\:bg-teal-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.ui-selected\:bg-teal-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.ui-selected\:bg-teal-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.ui-selected\:bg-teal-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.ui-selected\:bg-teal-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.ui-selected\:bg-teal-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.ui-selected\:bg-teal-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.ui-selected\:bg-teal-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background-muted[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-violet-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.ui-selected\:bg-violet-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.ui-selected\:bg-violet-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.ui-selected\:bg-violet-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.ui-selected\:bg-violet-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.ui-selected\:bg-violet-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.ui-selected\:bg-violet-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.ui-selected\:bg-violet-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.ui-selected\:bg-violet-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.ui-selected\:text-amber-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.ui-selected\:text-amber-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.ui-selected\:text-amber-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.ui-selected\:text-amber-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.ui-selected\:text-amber-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.ui-selected\:text-amber-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.ui-selected\:text-amber-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.ui-selected\:text-amber-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.ui-selected\:text-amber-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.ui-selected\:text-amber-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.ui-selected\:text-amber-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.ui-selected\:text-blue-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.ui-selected\:text-blue-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.ui-selected\:text-blue-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.ui-selected\:text-blue-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.ui-selected\:text-blue-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.ui-selected\:text-blue-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.ui-selected\:text-blue-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.ui-selected\:text-blue-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.ui-selected\:text-blue-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.ui-selected\:text-blue-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.ui-selected\:text-blue-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.ui-selected\:text-cyan-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.ui-selected\:text-cyan-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.ui-selected\:text-cyan-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.ui-selected\:text-cyan-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.ui-selected\:text-cyan-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.ui-selected\:text-cyan-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.ui-selected\:text-cyan-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.ui-selected\:text-cyan-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.ui-selected\:text-cyan-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.ui-selected\:text-cyan-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.ui-selected\:text-cyan-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-emerald-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.ui-selected\:text-emerald-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.ui-selected\:text-emerald-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.ui-selected\:text-emerald-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.ui-selected\:text-emerald-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.ui-selected\:text-emerald-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.ui-selected\:text-emerald-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.ui-selected\:text-emerald-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.ui-selected\:text-emerald-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.ui-selected\:text-emerald-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.ui-selected\:text-emerald-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.ui-selected\:text-gray-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.ui-selected\:text-gray-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.ui-selected\:text-gray-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.ui-selected\:text-gray-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.ui-selected\:text-gray-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.ui-selected\:text-gray-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.ui-selected\:text-gray-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.ui-selected\:text-gray-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-gray-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.ui-selected\:text-gray-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-gray-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.ui-selected\:text-green-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.ui-selected\:text-green-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.ui-selected\:text-green-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.ui-selected\:text-green-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.ui-selected\:text-green-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.ui-selected\:text-green-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.ui-selected\:text-green-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.ui-selected\:text-green-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.ui-selected\:text-green-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.ui-selected\:text-green-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.ui-selected\:text-green-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.ui-selected\:text-indigo-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.ui-selected\:text-indigo-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.ui-selected\:text-indigo-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.ui-selected\:text-indigo-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-indigo-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.ui-selected\:text-indigo-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.ui-selected\:text-indigo-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.ui-selected\:text-indigo-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.ui-selected\:text-indigo-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.ui-selected\:text-lime-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.ui-selected\:text-lime-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.ui-selected\:text-lime-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.ui-selected\:text-lime-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.ui-selected\:text-lime-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.ui-selected\:text-lime-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.ui-selected\:text-lime-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.ui-selected\:text-lime-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.ui-selected\:text-lime-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.ui-selected\:text-lime-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.ui-selected\:text-lime-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.ui-selected\:text-neutral-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.ui-selected\:text-neutral-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.ui-selected\:text-neutral-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.ui-selected\:text-neutral-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.ui-selected\:text-neutral-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-neutral-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.ui-selected\:text-neutral-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.ui-selected\:text-neutral-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.ui-selected\:text-neutral-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.ui-selected\:text-neutral-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.ui-selected\:text-neutral-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.ui-selected\:text-orange-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.ui-selected\:text-orange-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.ui-selected\:text-orange-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.ui-selected\:text-orange-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.ui-selected\:text-orange-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.ui-selected\:text-orange-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.ui-selected\:text-orange-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.ui-selected\:text-orange-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.ui-selected\:text-orange-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.ui-selected\:text-orange-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.ui-selected\:text-orange-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.ui-selected\:text-pink-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.ui-selected\:text-pink-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.ui-selected\:text-pink-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.ui-selected\:text-pink-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.ui-selected\:text-pink-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.ui-selected\:text-pink-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.ui-selected\:text-pink-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.ui-selected\:text-pink-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.ui-selected\:text-pink-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.ui-selected\:text-pink-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.ui-selected\:text-pink-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.ui-selected\:text-purple-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.ui-selected\:text-purple-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.ui-selected\:text-purple-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.ui-selected\:text-purple-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.ui-selected\:text-purple-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.ui-selected\:text-purple-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.ui-selected\:text-purple-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.ui-selected\:text-purple-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.ui-selected\:text-purple-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.ui-selected\:text-purple-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.ui-selected\:text-purple-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.ui-selected\:text-red-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.ui-selected\:text-red-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.ui-selected\:text-red-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.ui-selected\:text-red-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.ui-selected\:text-red-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.ui-selected\:text-red-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.ui-selected\:text-red-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.ui-selected\:text-red-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.ui-selected\:text-red-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.ui-selected\:text-red-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.ui-selected\:text-red-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.ui-selected\:text-rose-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.ui-selected\:text-rose-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.ui-selected\:text-rose-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.ui-selected\:text-rose-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.ui-selected\:text-rose-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.ui-selected\:text-rose-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.ui-selected\:text-rose-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.ui-selected\:text-rose-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.ui-selected\:text-rose-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.ui-selected\:text-rose-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.ui-selected\:text-rose-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.ui-selected\:text-sky-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.ui-selected\:text-sky-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.ui-selected\:text-sky-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.ui-selected\:text-sky-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.ui-selected\:text-sky-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.ui-selected\:text-sky-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.ui-selected\:text-sky-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.ui-selected\:text-sky-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.ui-selected\:text-sky-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.ui-selected\:text-sky-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.ui-selected\:text-sky-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.ui-selected\:text-slate-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.ui-selected\:text-slate-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.ui-selected\:text-slate-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.ui-selected\:text-slate-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.ui-selected\:text-slate-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.ui-selected\:text-slate-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.ui-selected\:text-slate-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.ui-selected\:text-slate-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.ui-selected\:text-slate-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.ui-selected\:text-slate-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.ui-selected\:text-slate-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.ui-selected\:text-stone-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.ui-selected\:text-stone-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.ui-selected\:text-stone-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.ui-selected\:text-stone-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.ui-selected\:text-stone-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.ui-selected\:text-stone-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.ui-selected\:text-stone-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.ui-selected\:text-stone-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.ui-selected\:text-stone-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.ui-selected\:text-stone-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.ui-selected\:text-stone-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.ui-selected\:text-teal-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.ui-selected\:text-teal-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.ui-selected\:text-teal-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.ui-selected\:text-teal-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.ui-selected\:text-teal-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.ui-selected\:text-teal-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.ui-selected\:text-teal-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.ui-selected\:text-teal-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.ui-selected\:text-teal-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.ui-selected\:text-teal-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.ui-selected\:text-teal-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.ui-selected\:text-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-emphasis[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-strong[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-violet-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.ui-selected\:text-violet-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.ui-selected\:text-violet-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.ui-selected\:text-violet-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.ui-selected\:text-violet-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.ui-selected\:text-violet-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.ui-selected\:text-violet-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.ui-selected\:text-violet-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.ui-selected\:text-violet-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.ui-selected\:text-violet-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.ui-selected\:text-violet-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.ui-selected\:text-yellow-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.ui-selected\:text-yellow-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.ui-selected\:text-yellow-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.ui-selected\:text-yellow-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.ui-selected\:text-yellow-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.ui-selected\:text-yellow-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.ui-selected\:text-yellow-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.ui-selected\:text-yellow-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.ui-selected\:text-yellow-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.ui-selected\:text-yellow-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.ui-selected\:text-yellow-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.ui-selected\:text-zinc-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.ui-selected\:text-zinc-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.ui-selected\:text-zinc-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.ui-selected\:text-zinc-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.ui-selected\:text-zinc-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-zinc-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.ui-selected\:text-zinc-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.ui-selected\:text-zinc-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.ui-selected\:text-zinc-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.ui-selected\:text-zinc-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.ui-selected\:text-zinc-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.ui-selected\:shadow-tremor-input[data-headlessui-state~=selected]{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:where([data-headlessui-state~=selected]) .ui-selected\:border-b-2{border-bottom-width:2px}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ui-active\:bg-tremor-background-muted[data-headlessui-state~=active]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-active\:text-tremor-content-strong[data-headlessui-state~=active]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=active]) .ui-active\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=active]) .ui-active\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:is(.dark .dark\:divide-dark-tremor-border)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(55 65 81/var(--tw-divide-opacity))}:is(.dark .dark\:border-dark-tremor-background){--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-emphasis){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-inverted){--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-subtle){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-emphasis){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-subtle){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-border){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted){--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted\/70){background-color:rgba(30,27,75,.7)}:is(.dark .dark\:bg-dark-tremor-brand-subtle){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content-subtle){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-10){--tw-bg-opacity:0.1}:is(.dark .dark\:bg-opacity-25){--tw-bg-opacity:0.25}:is(.dark .dark\:bg-opacity-30){--tw-bg-opacity:0.3}:is(.dark .dark\:fill-dark-tremor-content){fill:#6b7280}:is(.dark .dark\:fill-dark-tremor-content-emphasis){fill:#e5e7eb}:is(.dark .dark\:stroke-dark-tremor-background){stroke:#111827}:is(.dark .dark\:stroke-dark-tremor-border){stroke:#374151}:is(.dark .dark\:stroke-dark-tremor-brand){stroke:#6366f1}:is(.dark .dark\:stroke-dark-tremor-brand-muted){stroke:#1e1b4b}:is(.dark .dark\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-emphasis){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-inverted){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-subtle){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:accent-dark-tremor-brand){accent-color:#6366f1}:is(.dark .dark\:opacity-25){opacity:.25}:is(.dark .dark\:shadow-dark-tremor-card){--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-dropdown){--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:outline-dark-tremor-brand){outline-color:#6366f1}:is(.dark .dark\:ring-dark-tremor-brand-inverted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-brand-muted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-ring){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-brand-emphasis:hover){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-content-emphasis:hover){--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-muted:hover){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-subtle:hover){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-emphasis:hover){--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-faint:hover){--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-opacity-20:hover){--tw-bg-opacity:0.2}:is(.dark .dark\:hover\:text-dark-tremor-brand-emphasis:hover){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:is(.dark .hover\:dark\:text-dark-tremor-content):hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:focus\:border-dark-tremor-brand-subtle:focus){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .focus\:dark\:border-dark-tremor-brand-subtle):focus{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:focus\:ring-dark-tremor-brand-muted:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .focus\:dark\:ring-dark-tremor-brand-muted):focus{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .aria-selected\:dark\:\!bg-dark-tremor-background-subtle)[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(31 41 55/var(--tw-bg-opacity))!important}:is(.dark .dark\:aria-selected\:bg-dark-tremor-background-emphasis[aria-selected=true]){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-content-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-border[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-brand[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background-muted[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-emphasis[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-strong[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:shadow-dark-tremor-input[data-headlessui-state~=selected]){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:ui-active\:bg-dark-tremor-background-muted[data-headlessui-state~=active]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-active\:text-dark-tremor-content-strong[data-headlessui-state~=active]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}@media (min-width:640px){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:h-screen{height:100vh}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-lg{max-width:32rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-start{align-items:flex-start}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}}@media (min-width:768px){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}}@media (min-width:1024px){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:max-w-\[200px\]{max-width:200px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button,.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/ec159349637c90ad-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/513657b02c5c193f-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/fd4db3eb5472fc27-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/51ed15f9841b9f9d-s.woff2) format("woff2");unicode-range:u+0370-03ff}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/05a31a2ca4975f99-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/d6b16ce4a6175f26-s.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/c9a5bc6a7c948fb0-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Inter_Fallback_c23dc8;src:local("Arial");ascent-override:90.20%;descent-override:22.48%;line-gap-override:0.00%;size-adjust:107.40%}.__className_c23dc8{font-family:__Inter_c23dc8,__Inter_Fallback_c23dc8;font-style:normal} \ No newline at end of file +*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af}input::placeholder,textarea::placeholder{color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow:0 0 #0000}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors:active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors:active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media (forced-colors:active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.right-0{right:0}.right-1{right:.25rem}.right-1\/2{right:50%}.right-10{right:2.5rem}.top-0{top:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.m-2{margin:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-0{margin-left:0}.-ml-0\.5{margin-left:-.125rem}.-ml-1{margin-left:-.25rem}.-ml-1\.5{margin-left:-.375rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-2\.5{margin-left:.625rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-2\.5{margin-right:.625rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-8{margin-right:2rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[75vh\]{height:75vh}.h-\[80vh\]{height:80vh}.h-full{height:100%}.max-h-\[228px\]{max-height:228px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.min-h-\[300px\]{min-height:300px}.min-h-\[400px\]{min-height:400px}.min-h-\[500px\]{min-height:500px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:.25rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-9{width:2.25rem}.w-\[90\%\]{width:90%}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-\[10rem\]{min-width:10rem}.min-w-min{min-width:-moz-min-content;min-width:min-content}.max-w-\[100px\]{max-width:100px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-4{--tw-translate-y:-1rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/2{--tw-translate-x:50%}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.-rotate-180{--tw-rotate:-180deg}.-rotate-180,.-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate:-90deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-none{grid-template-columns:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.125rem * var(--tw-space-x-reverse));margin-left:calc(.125rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.375rem * var(--tw-space-x-reverse));margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.625rem * var(--tw-space-x-reverse));margin-left:calc(.625rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-tremor-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[1px\]{border-radius:1px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-tremor-default{border-radius:.5rem}.rounded-tremor-full{border-radius:9999px}.rounded-tremor-small{border-radius:.375rem}.rounded-b-tremor-default{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-l-tremor-default{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-tremor-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-tremor-small{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-r-tremor-default{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-r-tremor-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-r-tremor-small{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-tremor-default{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-r-4{border-right-width:4px}.border-t-4{border-top-width:4px}.border-t-\[1px\]{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.border-dark-tremor-background{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-dark-tremor-border{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-dark-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-dark-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-dark-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-dark-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-tremor-background{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.bg-dark-tremor-background{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-dark-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-dark-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-dark-tremor-brand-emphasis{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-dark-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}.bg-dark-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-dark-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-tremor-background-emphasis{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-tremor-border{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.bg-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(134 136 239/var(--tw-bg-opacity))}.bg-tremor-brand-muted\/50{background-color:rgba(134,136,239,.5)}.bg-tremor-brand-subtle{--tw-bg-opacity:1;background-color:rgb(142 145 235/var(--tw-bg-opacity))}.bg-tremor-content{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-20{--tw-bg-opacity:0.2}.bg-opacity-30{--tw-bg-opacity:0.3}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.fill-amber-100{fill:#fef3c7}.fill-amber-200{fill:#fde68a}.fill-amber-300{fill:#fcd34d}.fill-amber-400{fill:#fbbf24}.fill-amber-50{fill:#fffbeb}.fill-amber-500{fill:#f59e0b}.fill-amber-600{fill:#d97706}.fill-amber-700{fill:#b45309}.fill-amber-800{fill:#92400e}.fill-amber-900{fill:#78350f}.fill-amber-950{fill:#451a03}.fill-blue-100{fill:#dbeafe}.fill-blue-200{fill:#bfdbfe}.fill-blue-300{fill:#93c5fd}.fill-blue-400{fill:#60a5fa}.fill-blue-50{fill:#eff6ff}.fill-blue-500{fill:#3b82f6}.fill-blue-600{fill:#2563eb}.fill-blue-700{fill:#1d4ed8}.fill-blue-800{fill:#1e40af}.fill-blue-900{fill:#1e3a8a}.fill-blue-950{fill:#172554}.fill-cyan-100{fill:#cffafe}.fill-cyan-200{fill:#a5f3fc}.fill-cyan-300{fill:#67e8f9}.fill-cyan-400{fill:#22d3ee}.fill-cyan-50{fill:#ecfeff}.fill-cyan-500{fill:#06b6d4}.fill-cyan-600{fill:#0891b2}.fill-cyan-700{fill:#0e7490}.fill-cyan-800{fill:#155e75}.fill-cyan-900{fill:#164e63}.fill-cyan-950{fill:#083344}.fill-emerald-100{fill:#d1fae5}.fill-emerald-200{fill:#a7f3d0}.fill-emerald-300{fill:#6ee7b7}.fill-emerald-400{fill:#34d399}.fill-emerald-50{fill:#ecfdf5}.fill-emerald-500{fill:#10b981}.fill-emerald-600{fill:#059669}.fill-emerald-700{fill:#047857}.fill-emerald-800{fill:#065f46}.fill-emerald-900{fill:#064e3b}.fill-emerald-950{fill:#022c22}.fill-fuchsia-100{fill:#fae8ff}.fill-fuchsia-200{fill:#f5d0fe}.fill-fuchsia-300{fill:#f0abfc}.fill-fuchsia-400{fill:#e879f9}.fill-fuchsia-50{fill:#fdf4ff}.fill-fuchsia-500{fill:#d946ef}.fill-fuchsia-600{fill:#c026d3}.fill-fuchsia-700{fill:#a21caf}.fill-fuchsia-800{fill:#86198f}.fill-fuchsia-900{fill:#701a75}.fill-fuchsia-950{fill:#4a044e}.fill-gray-100{fill:#f3f4f6}.fill-gray-200{fill:#e5e7eb}.fill-gray-300{fill:#d1d5db}.fill-gray-400{fill:#9ca3af}.fill-gray-50{fill:#f9fafb}.fill-gray-500{fill:#6b7280}.fill-gray-600{fill:#4b5563}.fill-gray-700{fill:#374151}.fill-gray-800{fill:#1f2937}.fill-gray-900{fill:#111827}.fill-gray-950{fill:#030712}.fill-green-100{fill:#dcfce7}.fill-green-200{fill:#bbf7d0}.fill-green-300{fill:#86efac}.fill-green-400{fill:#4ade80}.fill-green-50{fill:#f0fdf4}.fill-green-500{fill:#22c55e}.fill-green-600{fill:#16a34a}.fill-green-700{fill:#15803d}.fill-green-800{fill:#166534}.fill-green-900{fill:#14532d}.fill-green-950{fill:#052e16}.fill-indigo-100{fill:#e0e7ff}.fill-indigo-200{fill:#c7d2fe}.fill-indigo-300{fill:#a5b4fc}.fill-indigo-400{fill:#818cf8}.fill-indigo-50{fill:#eef2ff}.fill-indigo-500{fill:#6366f1}.fill-indigo-600{fill:#4f46e5}.fill-indigo-700{fill:#4338ca}.fill-indigo-800{fill:#3730a3}.fill-indigo-900{fill:#312e81}.fill-indigo-950{fill:#1e1b4b}.fill-lime-100{fill:#ecfccb}.fill-lime-200{fill:#d9f99d}.fill-lime-300{fill:#bef264}.fill-lime-400{fill:#a3e635}.fill-lime-50{fill:#f7fee7}.fill-lime-500{fill:#84cc16}.fill-lime-600{fill:#65a30d}.fill-lime-700{fill:#4d7c0f}.fill-lime-800{fill:#3f6212}.fill-lime-900{fill:#365314}.fill-lime-950{fill:#1a2e05}.fill-neutral-100{fill:#f5f5f5}.fill-neutral-200{fill:#e5e5e5}.fill-neutral-300{fill:#d4d4d4}.fill-neutral-400{fill:#a3a3a3}.fill-neutral-50{fill:#fafafa}.fill-neutral-500{fill:#737373}.fill-neutral-600{fill:#525252}.fill-neutral-700{fill:#404040}.fill-neutral-800{fill:#262626}.fill-neutral-900{fill:#171717}.fill-neutral-950{fill:#0a0a0a}.fill-orange-100{fill:#ffedd5}.fill-orange-200{fill:#fed7aa}.fill-orange-300{fill:#fdba74}.fill-orange-400{fill:#fb923c}.fill-orange-50{fill:#fff7ed}.fill-orange-500{fill:#f97316}.fill-orange-600{fill:#ea580c}.fill-orange-700{fill:#c2410c}.fill-orange-800{fill:#9a3412}.fill-orange-900{fill:#7c2d12}.fill-orange-950{fill:#431407}.fill-pink-100{fill:#fce7f3}.fill-pink-200{fill:#fbcfe8}.fill-pink-300{fill:#f9a8d4}.fill-pink-400{fill:#f472b6}.fill-pink-50{fill:#fdf2f8}.fill-pink-500{fill:#ec4899}.fill-pink-600{fill:#db2777}.fill-pink-700{fill:#be185d}.fill-pink-800{fill:#9d174d}.fill-pink-900{fill:#831843}.fill-pink-950{fill:#500724}.fill-purple-100{fill:#f3e8ff}.fill-purple-200{fill:#e9d5ff}.fill-purple-300{fill:#d8b4fe}.fill-purple-400{fill:#c084fc}.fill-purple-50{fill:#faf5ff}.fill-purple-500{fill:#a855f7}.fill-purple-600{fill:#9333ea}.fill-purple-700{fill:#7e22ce}.fill-purple-800{fill:#6b21a8}.fill-purple-900{fill:#581c87}.fill-purple-950{fill:#3b0764}.fill-red-100{fill:#fee2e2}.fill-red-200{fill:#fecaca}.fill-red-300{fill:#fca5a5}.fill-red-400{fill:#f87171}.fill-red-50{fill:#fef2f2}.fill-red-500{fill:#ef4444}.fill-red-600{fill:#dc2626}.fill-red-700{fill:#b91c1c}.fill-red-800{fill:#991b1b}.fill-red-900{fill:#7f1d1d}.fill-red-950{fill:#450a0a}.fill-rose-100{fill:#ffe4e6}.fill-rose-200{fill:#fecdd3}.fill-rose-300{fill:#fda4af}.fill-rose-400{fill:#fb7185}.fill-rose-50{fill:#fff1f2}.fill-rose-500{fill:#f43f5e}.fill-rose-600{fill:#e11d48}.fill-rose-700{fill:#be123c}.fill-rose-800{fill:#9f1239}.fill-rose-900{fill:#881337}.fill-rose-950{fill:#4c0519}.fill-sky-100{fill:#e0f2fe}.fill-sky-200{fill:#bae6fd}.fill-sky-300{fill:#7dd3fc}.fill-sky-400{fill:#38bdf8}.fill-sky-50{fill:#f0f9ff}.fill-sky-500{fill:#0ea5e9}.fill-sky-600{fill:#0284c7}.fill-sky-700{fill:#0369a1}.fill-sky-800{fill:#075985}.fill-sky-900{fill:#0c4a6e}.fill-sky-950{fill:#082f49}.fill-slate-100{fill:#f1f5f9}.fill-slate-200{fill:#e2e8f0}.fill-slate-300{fill:#cbd5e1}.fill-slate-400{fill:#94a3b8}.fill-slate-50{fill:#f8fafc}.fill-slate-500{fill:#64748b}.fill-slate-600{fill:#475569}.fill-slate-700{fill:#334155}.fill-slate-800{fill:#1e293b}.fill-slate-900{fill:#0f172a}.fill-slate-950{fill:#020617}.fill-stone-100{fill:#f5f5f4}.fill-stone-200{fill:#e7e5e4}.fill-stone-300{fill:#d6d3d1}.fill-stone-400{fill:#a8a29e}.fill-stone-50{fill:#fafaf9}.fill-stone-500{fill:#78716c}.fill-stone-600{fill:#57534e}.fill-stone-700{fill:#44403c}.fill-stone-800{fill:#292524}.fill-stone-900{fill:#1c1917}.fill-stone-950{fill:#0c0a09}.fill-teal-100{fill:#ccfbf1}.fill-teal-200{fill:#99f6e4}.fill-teal-300{fill:#5eead4}.fill-teal-400{fill:#2dd4bf}.fill-teal-50{fill:#f0fdfa}.fill-teal-500{fill:#14b8a6}.fill-teal-600{fill:#0d9488}.fill-teal-700{fill:#0f766e}.fill-teal-800{fill:#115e59}.fill-teal-900{fill:#134e4a}.fill-teal-950{fill:#042f2e}.fill-tremor-content{fill:#6b7280}.fill-tremor-content-emphasis{fill:#374151}.fill-violet-100{fill:#ede9fe}.fill-violet-200{fill:#ddd6fe}.fill-violet-300{fill:#c4b5fd}.fill-violet-400{fill:#a78bfa}.fill-violet-50{fill:#f5f3ff}.fill-violet-500{fill:#8b5cf6}.fill-violet-600{fill:#7c3aed}.fill-violet-700{fill:#6d28d9}.fill-violet-800{fill:#5b21b6}.fill-violet-900{fill:#4c1d95}.fill-violet-950{fill:#2e1065}.fill-yellow-100{fill:#fef9c3}.fill-yellow-200{fill:#fef08a}.fill-yellow-300{fill:#fde047}.fill-yellow-400{fill:#facc15}.fill-yellow-50{fill:#fefce8}.fill-yellow-500{fill:#eab308}.fill-yellow-600{fill:#ca8a04}.fill-yellow-700{fill:#a16207}.fill-yellow-800{fill:#854d0e}.fill-yellow-900{fill:#713f12}.fill-yellow-950{fill:#422006}.fill-zinc-100{fill:#f4f4f5}.fill-zinc-200{fill:#e4e4e7}.fill-zinc-300{fill:#d4d4d8}.fill-zinc-400{fill:#a1a1aa}.fill-zinc-50{fill:#fafafa}.fill-zinc-500{fill:#71717a}.fill-zinc-600{fill:#52525b}.fill-zinc-700{fill:#3f3f46}.fill-zinc-800{fill:#27272a}.fill-zinc-900{fill:#18181b}.fill-zinc-950{fill:#09090b}.stroke-amber-100{stroke:#fef3c7}.stroke-amber-200{stroke:#fde68a}.stroke-amber-300{stroke:#fcd34d}.stroke-amber-400{stroke:#fbbf24}.stroke-amber-50{stroke:#fffbeb}.stroke-amber-500{stroke:#f59e0b}.stroke-amber-600{stroke:#d97706}.stroke-amber-700{stroke:#b45309}.stroke-amber-800{stroke:#92400e}.stroke-amber-900{stroke:#78350f}.stroke-amber-950{stroke:#451a03}.stroke-blue-100{stroke:#dbeafe}.stroke-blue-200{stroke:#bfdbfe}.stroke-blue-300{stroke:#93c5fd}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-50{stroke:#eff6ff}.stroke-blue-500{stroke:#3b82f6}.stroke-blue-600{stroke:#2563eb}.stroke-blue-700{stroke:#1d4ed8}.stroke-blue-800{stroke:#1e40af}.stroke-blue-900{stroke:#1e3a8a}.stroke-blue-950{stroke:#172554}.stroke-cyan-100{stroke:#cffafe}.stroke-cyan-200{stroke:#a5f3fc}.stroke-cyan-300{stroke:#67e8f9}.stroke-cyan-400{stroke:#22d3ee}.stroke-cyan-50{stroke:#ecfeff}.stroke-cyan-500{stroke:#06b6d4}.stroke-cyan-600{stroke:#0891b2}.stroke-cyan-700{stroke:#0e7490}.stroke-cyan-800{stroke:#155e75}.stroke-cyan-900{stroke:#164e63}.stroke-cyan-950{stroke:#083344}.stroke-dark-tremor-background{stroke:#111827}.stroke-dark-tremor-border{stroke:#374151}.stroke-emerald-100{stroke:#d1fae5}.stroke-emerald-200{stroke:#a7f3d0}.stroke-emerald-300{stroke:#6ee7b7}.stroke-emerald-400{stroke:#34d399}.stroke-emerald-50{stroke:#ecfdf5}.stroke-emerald-500{stroke:#10b981}.stroke-emerald-600{stroke:#059669}.stroke-emerald-700{stroke:#047857}.stroke-emerald-800{stroke:#065f46}.stroke-emerald-900{stroke:#064e3b}.stroke-emerald-950{stroke:#022c22}.stroke-fuchsia-100{stroke:#fae8ff}.stroke-fuchsia-200{stroke:#f5d0fe}.stroke-fuchsia-300{stroke:#f0abfc}.stroke-fuchsia-400{stroke:#e879f9}.stroke-fuchsia-50{stroke:#fdf4ff}.stroke-fuchsia-500{stroke:#d946ef}.stroke-fuchsia-600{stroke:#c026d3}.stroke-fuchsia-700{stroke:#a21caf}.stroke-fuchsia-800{stroke:#86198f}.stroke-fuchsia-900{stroke:#701a75}.stroke-fuchsia-950{stroke:#4a044e}.stroke-gray-100{stroke:#f3f4f6}.stroke-gray-200{stroke:#e5e7eb}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-400{stroke:#9ca3af}.stroke-gray-50{stroke:#f9fafb}.stroke-gray-500{stroke:#6b7280}.stroke-gray-600{stroke:#4b5563}.stroke-gray-700{stroke:#374151}.stroke-gray-800{stroke:#1f2937}.stroke-gray-900{stroke:#111827}.stroke-gray-950{stroke:#030712}.stroke-green-100{stroke:#dcfce7}.stroke-green-200{stroke:#bbf7d0}.stroke-green-300{stroke:#86efac}.stroke-green-400{stroke:#4ade80}.stroke-green-50{stroke:#f0fdf4}.stroke-green-500{stroke:#22c55e}.stroke-green-600{stroke:#16a34a}.stroke-green-700{stroke:#15803d}.stroke-green-800{stroke:#166534}.stroke-green-900{stroke:#14532d}.stroke-green-950{stroke:#052e16}.stroke-indigo-100{stroke:#e0e7ff}.stroke-indigo-200{stroke:#c7d2fe}.stroke-indigo-300{stroke:#a5b4fc}.stroke-indigo-400{stroke:#818cf8}.stroke-indigo-50{stroke:#eef2ff}.stroke-indigo-500{stroke:#6366f1}.stroke-indigo-600{stroke:#4f46e5}.stroke-indigo-700{stroke:#4338ca}.stroke-indigo-800{stroke:#3730a3}.stroke-indigo-900{stroke:#312e81}.stroke-indigo-950{stroke:#1e1b4b}.stroke-lime-100{stroke:#ecfccb}.stroke-lime-200{stroke:#d9f99d}.stroke-lime-300{stroke:#bef264}.stroke-lime-400{stroke:#a3e635}.stroke-lime-50{stroke:#f7fee7}.stroke-lime-500{stroke:#84cc16}.stroke-lime-600{stroke:#65a30d}.stroke-lime-700{stroke:#4d7c0f}.stroke-lime-800{stroke:#3f6212}.stroke-lime-900{stroke:#365314}.stroke-lime-950{stroke:#1a2e05}.stroke-neutral-100{stroke:#f5f5f5}.stroke-neutral-200{stroke:#e5e5e5}.stroke-neutral-300{stroke:#d4d4d4}.stroke-neutral-400{stroke:#a3a3a3}.stroke-neutral-50{stroke:#fafafa}.stroke-neutral-500{stroke:#737373}.stroke-neutral-600{stroke:#525252}.stroke-neutral-700{stroke:#404040}.stroke-neutral-800{stroke:#262626}.stroke-neutral-900{stroke:#171717}.stroke-neutral-950{stroke:#0a0a0a}.stroke-orange-100{stroke:#ffedd5}.stroke-orange-200{stroke:#fed7aa}.stroke-orange-300{stroke:#fdba74}.stroke-orange-400{stroke:#fb923c}.stroke-orange-50{stroke:#fff7ed}.stroke-orange-500{stroke:#f97316}.stroke-orange-600{stroke:#ea580c}.stroke-orange-700{stroke:#c2410c}.stroke-orange-800{stroke:#9a3412}.stroke-orange-900{stroke:#7c2d12}.stroke-orange-950{stroke:#431407}.stroke-pink-100{stroke:#fce7f3}.stroke-pink-200{stroke:#fbcfe8}.stroke-pink-300{stroke:#f9a8d4}.stroke-pink-400{stroke:#f472b6}.stroke-pink-50{stroke:#fdf2f8}.stroke-pink-500{stroke:#ec4899}.stroke-pink-600{stroke:#db2777}.stroke-pink-700{stroke:#be185d}.stroke-pink-800{stroke:#9d174d}.stroke-pink-900{stroke:#831843}.stroke-pink-950{stroke:#500724}.stroke-purple-100{stroke:#f3e8ff}.stroke-purple-200{stroke:#e9d5ff}.stroke-purple-300{stroke:#d8b4fe}.stroke-purple-400{stroke:#c084fc}.stroke-purple-50{stroke:#faf5ff}.stroke-purple-500{stroke:#a855f7}.stroke-purple-600{stroke:#9333ea}.stroke-purple-700{stroke:#7e22ce}.stroke-purple-800{stroke:#6b21a8}.stroke-purple-900{stroke:#581c87}.stroke-purple-950{stroke:#3b0764}.stroke-red-100{stroke:#fee2e2}.stroke-red-200{stroke:#fecaca}.stroke-red-300{stroke:#fca5a5}.stroke-red-400{stroke:#f87171}.stroke-red-50{stroke:#fef2f2}.stroke-red-500{stroke:#ef4444}.stroke-red-600{stroke:#dc2626}.stroke-red-700{stroke:#b91c1c}.stroke-red-800{stroke:#991b1b}.stroke-red-900{stroke:#7f1d1d}.stroke-red-950{stroke:#450a0a}.stroke-rose-100{stroke:#ffe4e6}.stroke-rose-200{stroke:#fecdd3}.stroke-rose-300{stroke:#fda4af}.stroke-rose-400{stroke:#fb7185}.stroke-rose-50{stroke:#fff1f2}.stroke-rose-500{stroke:#f43f5e}.stroke-rose-600{stroke:#e11d48}.stroke-rose-700{stroke:#be123c}.stroke-rose-800{stroke:#9f1239}.stroke-rose-900{stroke:#881337}.stroke-rose-950{stroke:#4c0519}.stroke-sky-100{stroke:#e0f2fe}.stroke-sky-200{stroke:#bae6fd}.stroke-sky-300{stroke:#7dd3fc}.stroke-sky-400{stroke:#38bdf8}.stroke-sky-50{stroke:#f0f9ff}.stroke-sky-500{stroke:#0ea5e9}.stroke-sky-600{stroke:#0284c7}.stroke-sky-700{stroke:#0369a1}.stroke-sky-800{stroke:#075985}.stroke-sky-900{stroke:#0c4a6e}.stroke-sky-950{stroke:#082f49}.stroke-slate-100{stroke:#f1f5f9}.stroke-slate-200{stroke:#e2e8f0}.stroke-slate-300{stroke:#cbd5e1}.stroke-slate-400{stroke:#94a3b8}.stroke-slate-50{stroke:#f8fafc}.stroke-slate-500{stroke:#64748b}.stroke-slate-600{stroke:#475569}.stroke-slate-700{stroke:#334155}.stroke-slate-800{stroke:#1e293b}.stroke-slate-900{stroke:#0f172a}.stroke-slate-950{stroke:#020617}.stroke-stone-100{stroke:#f5f5f4}.stroke-stone-200{stroke:#e7e5e4}.stroke-stone-300{stroke:#d6d3d1}.stroke-stone-400{stroke:#a8a29e}.stroke-stone-50{stroke:#fafaf9}.stroke-stone-500{stroke:#78716c}.stroke-stone-600{stroke:#57534e}.stroke-stone-700{stroke:#44403c}.stroke-stone-800{stroke:#292524}.stroke-stone-900{stroke:#1c1917}.stroke-stone-950{stroke:#0c0a09}.stroke-teal-100{stroke:#ccfbf1}.stroke-teal-200{stroke:#99f6e4}.stroke-teal-300{stroke:#5eead4}.stroke-teal-400{stroke:#2dd4bf}.stroke-teal-50{stroke:#f0fdfa}.stroke-teal-500{stroke:#14b8a6}.stroke-teal-600{stroke:#0d9488}.stroke-teal-700{stroke:#0f766e}.stroke-teal-800{stroke:#115e59}.stroke-teal-900{stroke:#134e4a}.stroke-teal-950{stroke:#042f2e}.stroke-tremor-background{stroke:#fff}.stroke-tremor-border{stroke:#e5e7eb}.stroke-tremor-brand{stroke:#6366f1}.stroke-tremor-brand-muted\/50{stroke:rgba(134,136,239,.5)}.stroke-violet-100{stroke:#ede9fe}.stroke-violet-200{stroke:#ddd6fe}.stroke-violet-300{stroke:#c4b5fd}.stroke-violet-400{stroke:#a78bfa}.stroke-violet-50{stroke:#f5f3ff}.stroke-violet-500{stroke:#8b5cf6}.stroke-violet-600{stroke:#7c3aed}.stroke-violet-700{stroke:#6d28d9}.stroke-violet-800{stroke:#5b21b6}.stroke-violet-900{stroke:#4c1d95}.stroke-violet-950{stroke:#2e1065}.stroke-yellow-100{stroke:#fef9c3}.stroke-yellow-200{stroke:#fef08a}.stroke-yellow-300{stroke:#fde047}.stroke-yellow-400{stroke:#facc15}.stroke-yellow-50{stroke:#fefce8}.stroke-yellow-500{stroke:#eab308}.stroke-yellow-600{stroke:#ca8a04}.stroke-yellow-700{stroke:#a16207}.stroke-yellow-800{stroke:#854d0e}.stroke-yellow-900{stroke:#713f12}.stroke-yellow-950{stroke:#422006}.stroke-zinc-100{stroke:#f4f4f5}.stroke-zinc-200{stroke:#e4e4e7}.stroke-zinc-300{stroke:#d4d4d8}.stroke-zinc-400{stroke:#a1a1aa}.stroke-zinc-50{stroke:#fafafa}.stroke-zinc-500{stroke:#71717a}.stroke-zinc-600{stroke:#52525b}.stroke-zinc-700{stroke:#3f3f46}.stroke-zinc-800{stroke:#27272a}.stroke-zinc-900{stroke:#18181b}.stroke-zinc-950{stroke:#09090b}.stroke-1{stroke-width:1}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-1{padding-right:.25rem}.pr-1\.5{padding-right:.375rem}.pr-12{padding-right:3rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[12px\]{font-size:12px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-tremor-default{font-size:.775rem;line-height:1.15rem}.text-tremor-label{font-size:.75rem;line-height:.3rem}.text-tremor-metric{font-size:1.675rem;line-height:2.15rem}.text-tremor-title{font-size:1.025rem;line-height:1.65rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-dark-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-dark-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-dark-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-dark-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-dark-tremor-content-subtle{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-tremor-content-subtle{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.accent-dark-tremor-brand,.accent-tremor-brand{accent-color:#6366f1}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow,.shadow-dark-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-dark-tremor-card,.shadow-dark-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-dark-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-tremor-card{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-tremor-dropdown{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-tremor-dropdown,.shadow-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-tremor-brand{outline-color:#6366f1}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-amber-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 243 199/var(--tw-ring-opacity))}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity))}.ring-amber-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 251 235/var(--tw-ring-opacity))}.ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.ring-amber-600{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity))}.ring-amber-700{--tw-ring-opacity:1;--tw-ring-color:rgb(180 83 9/var(--tw-ring-opacity))}.ring-amber-800{--tw-ring-opacity:1;--tw-ring-color:rgb(146 64 14/var(--tw-ring-opacity))}.ring-amber-900{--tw-ring-opacity:1;--tw-ring-color:rgb(120 53 15/var(--tw-ring-opacity))}.ring-amber-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 26 3/var(--tw-ring-opacity))}.ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity))}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity))}.ring-blue-50{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-blue-600{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity))}.ring-blue-700{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity))}.ring-blue-900{--tw-ring-opacity:1;--tw-ring-color:rgb(30 58 138/var(--tw-ring-opacity))}.ring-blue-950{--tw-ring-opacity:1;--tw-ring-color:rgb(23 37 84/var(--tw-ring-opacity))}.ring-cyan-100{--tw-ring-opacity:1;--tw-ring-color:rgb(207 250 254/var(--tw-ring-opacity))}.ring-cyan-200{--tw-ring-opacity:1;--tw-ring-color:rgb(165 243 252/var(--tw-ring-opacity))}.ring-cyan-300{--tw-ring-opacity:1;--tw-ring-color:rgb(103 232 249/var(--tw-ring-opacity))}.ring-cyan-400{--tw-ring-opacity:1;--tw-ring-color:rgb(34 211 238/var(--tw-ring-opacity))}.ring-cyan-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 254 255/var(--tw-ring-opacity))}.ring-cyan-500{--tw-ring-opacity:1;--tw-ring-color:rgb(6 182 212/var(--tw-ring-opacity))}.ring-cyan-600{--tw-ring-opacity:1;--tw-ring-color:rgb(8 145 178/var(--tw-ring-opacity))}.ring-cyan-700{--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}.ring-cyan-800{--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}.ring-cyan-900{--tw-ring-opacity:1;--tw-ring-color:rgb(22 78 99/var(--tw-ring-opacity))}.ring-cyan-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 51 68/var(--tw-ring-opacity))}.ring-dark-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-emerald-100{--tw-ring-opacity:1;--tw-ring-color:rgb(209 250 229/var(--tw-ring-opacity))}.ring-emerald-200{--tw-ring-opacity:1;--tw-ring-color:rgb(167 243 208/var(--tw-ring-opacity))}.ring-emerald-300{--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.ring-emerald-400{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity))}.ring-emerald-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 253 245/var(--tw-ring-opacity))}.ring-emerald-500{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity))}.ring-emerald-600{--tw-ring-opacity:1;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity))}.ring-emerald-700{--tw-ring-opacity:1;--tw-ring-color:rgb(4 120 87/var(--tw-ring-opacity))}.ring-emerald-800{--tw-ring-opacity:1;--tw-ring-color:rgb(6 95 70/var(--tw-ring-opacity))}.ring-emerald-900{--tw-ring-opacity:1;--tw-ring-color:rgb(6 78 59/var(--tw-ring-opacity))}.ring-emerald-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 44 34/var(--tw-ring-opacity))}.ring-fuchsia-100{--tw-ring-opacity:1;--tw-ring-color:rgb(250 232 255/var(--tw-ring-opacity))}.ring-fuchsia-200{--tw-ring-opacity:1;--tw-ring-color:rgb(245 208 254/var(--tw-ring-opacity))}.ring-fuchsia-300{--tw-ring-opacity:1;--tw-ring-color:rgb(240 171 252/var(--tw-ring-opacity))}.ring-fuchsia-400{--tw-ring-opacity:1;--tw-ring-color:rgb(232 121 249/var(--tw-ring-opacity))}.ring-fuchsia-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 244 255/var(--tw-ring-opacity))}.ring-fuchsia-500{--tw-ring-opacity:1;--tw-ring-color:rgb(217 70 239/var(--tw-ring-opacity))}.ring-fuchsia-600{--tw-ring-opacity:1;--tw-ring-color:rgb(192 38 211/var(--tw-ring-opacity))}.ring-fuchsia-700{--tw-ring-opacity:1;--tw-ring-color:rgb(162 28 175/var(--tw-ring-opacity))}.ring-fuchsia-800{--tw-ring-opacity:1;--tw-ring-color:rgb(134 25 143/var(--tw-ring-opacity))}.ring-fuchsia-900{--tw-ring-opacity:1;--tw-ring-color:rgb(112 26 117/var(--tw-ring-opacity))}.ring-fuchsia-950{--tw-ring-opacity:1;--tw-ring-color:rgb(74 4 78/var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}.ring-gray-950{--tw-ring-opacity:1;--tw-ring-color:rgb(3 7 18/var(--tw-ring-opacity))}.ring-green-100{--tw-ring-opacity:1;--tw-ring-color:rgb(220 252 231/var(--tw-ring-opacity))}.ring-green-200{--tw-ring-opacity:1;--tw-ring-color:rgb(187 247 208/var(--tw-ring-opacity))}.ring-green-300{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity))}.ring-green-400{--tw-ring-opacity:1;--tw-ring-color:rgb(74 222 128/var(--tw-ring-opacity))}.ring-green-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 244/var(--tw-ring-opacity))}.ring-green-500{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.ring-green-600{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity))}.ring-green-700{--tw-ring-opacity:1;--tw-ring-color:rgb(21 128 61/var(--tw-ring-opacity))}.ring-green-800{--tw-ring-opacity:1;--tw-ring-color:rgb(22 101 52/var(--tw-ring-opacity))}.ring-green-900{--tw-ring-opacity:1;--tw-ring-color:rgb(20 83 45/var(--tw-ring-opacity))}.ring-green-950{--tw-ring-opacity:1;--tw-ring-color:rgb(5 46 22/var(--tw-ring-opacity))}.ring-indigo-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 231 255/var(--tw-ring-opacity))}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity))}.ring-indigo-300{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity))}.ring-indigo-400{--tw-ring-opacity:1;--tw-ring-color:rgb(129 140 248/var(--tw-ring-opacity))}.ring-indigo-50{--tw-ring-opacity:1;--tw-ring-color:rgb(238 242 255/var(--tw-ring-opacity))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.ring-indigo-700{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity))}.ring-indigo-800{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity))}.ring-indigo-900{--tw-ring-opacity:1;--tw-ring-color:rgb(49 46 129/var(--tw-ring-opacity))}.ring-indigo-950{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}.ring-lime-100{--tw-ring-opacity:1;--tw-ring-color:rgb(236 252 203/var(--tw-ring-opacity))}.ring-lime-200{--tw-ring-opacity:1;--tw-ring-color:rgb(217 249 157/var(--tw-ring-opacity))}.ring-lime-300{--tw-ring-opacity:1;--tw-ring-color:rgb(190 242 100/var(--tw-ring-opacity))}.ring-lime-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 230 53/var(--tw-ring-opacity))}.ring-lime-50{--tw-ring-opacity:1;--tw-ring-color:rgb(247 254 231/var(--tw-ring-opacity))}.ring-lime-500{--tw-ring-opacity:1;--tw-ring-color:rgb(132 204 22/var(--tw-ring-opacity))}.ring-lime-600{--tw-ring-opacity:1;--tw-ring-color:rgb(101 163 13/var(--tw-ring-opacity))}.ring-lime-700{--tw-ring-opacity:1;--tw-ring-color:rgb(77 124 15/var(--tw-ring-opacity))}.ring-lime-800{--tw-ring-opacity:1;--tw-ring-color:rgb(63 98 18/var(--tw-ring-opacity))}.ring-lime-900{--tw-ring-opacity:1;--tw-ring-color:rgb(54 83 20/var(--tw-ring-opacity))}.ring-lime-950{--tw-ring-opacity:1;--tw-ring-color:rgb(26 46 5/var(--tw-ring-opacity))}.ring-neutral-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 245/var(--tw-ring-opacity))}.ring-neutral-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 229 229/var(--tw-ring-opacity))}.ring-neutral-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 212/var(--tw-ring-opacity))}.ring-neutral-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 163 163/var(--tw-ring-opacity))}.ring-neutral-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-neutral-500{--tw-ring-opacity:1;--tw-ring-color:rgb(115 115 115/var(--tw-ring-opacity))}.ring-neutral-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 82/var(--tw-ring-opacity))}.ring-neutral-700{--tw-ring-opacity:1;--tw-ring-color:rgb(64 64 64/var(--tw-ring-opacity))}.ring-neutral-800{--tw-ring-opacity:1;--tw-ring-color:rgb(38 38 38/var(--tw-ring-opacity))}.ring-neutral-900{--tw-ring-opacity:1;--tw-ring-color:rgb(23 23 23/var(--tw-ring-opacity))}.ring-neutral-950{--tw-ring-opacity:1;--tw-ring-color:rgb(10 10 10/var(--tw-ring-opacity))}.ring-orange-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 237 213/var(--tw-ring-opacity))}.ring-orange-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 215 170/var(--tw-ring-opacity))}.ring-orange-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 186 116/var(--tw-ring-opacity))}.ring-orange-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 146 60/var(--tw-ring-opacity))}.ring-orange-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 247 237/var(--tw-ring-opacity))}.ring-orange-500{--tw-ring-opacity:1;--tw-ring-color:rgb(249 115 22/var(--tw-ring-opacity))}.ring-orange-600{--tw-ring-opacity:1;--tw-ring-color:rgb(234 88 12/var(--tw-ring-opacity))}.ring-orange-700{--tw-ring-opacity:1;--tw-ring-color:rgb(194 65 12/var(--tw-ring-opacity))}.ring-orange-800{--tw-ring-opacity:1;--tw-ring-color:rgb(154 52 18/var(--tw-ring-opacity))}.ring-orange-900{--tw-ring-opacity:1;--tw-ring-color:rgb(124 45 18/var(--tw-ring-opacity))}.ring-orange-950{--tw-ring-opacity:1;--tw-ring-color:rgb(67 20 7/var(--tw-ring-opacity))}.ring-pink-100{--tw-ring-opacity:1;--tw-ring-color:rgb(252 231 243/var(--tw-ring-opacity))}.ring-pink-200{--tw-ring-opacity:1;--tw-ring-color:rgb(251 207 232/var(--tw-ring-opacity))}.ring-pink-300{--tw-ring-opacity:1;--tw-ring-color:rgb(249 168 212/var(--tw-ring-opacity))}.ring-pink-400{--tw-ring-opacity:1;--tw-ring-color:rgb(244 114 182/var(--tw-ring-opacity))}.ring-pink-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 242 248/var(--tw-ring-opacity))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity))}.ring-pink-600{--tw-ring-opacity:1;--tw-ring-color:rgb(219 39 119/var(--tw-ring-opacity))}.ring-pink-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 24 93/var(--tw-ring-opacity))}.ring-pink-800{--tw-ring-opacity:1;--tw-ring-color:rgb(157 23 77/var(--tw-ring-opacity))}.ring-pink-900{--tw-ring-opacity:1;--tw-ring-color:rgb(131 24 67/var(--tw-ring-opacity))}.ring-pink-950{--tw-ring-opacity:1;--tw-ring-color:rgb(80 7 36/var(--tw-ring-opacity))}.ring-purple-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 232 255/var(--tw-ring-opacity))}.ring-purple-200{--tw-ring-opacity:1;--tw-ring-color:rgb(233 213 255/var(--tw-ring-opacity))}.ring-purple-300{--tw-ring-opacity:1;--tw-ring-color:rgb(216 180 254/var(--tw-ring-opacity))}.ring-purple-400{--tw-ring-opacity:1;--tw-ring-color:rgb(192 132 252/var(--tw-ring-opacity))}.ring-purple-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 245 255/var(--tw-ring-opacity))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity))}.ring-purple-600{--tw-ring-opacity:1;--tw-ring-color:rgb(147 51 234/var(--tw-ring-opacity))}.ring-purple-700{--tw-ring-opacity:1;--tw-ring-color:rgb(126 34 206/var(--tw-ring-opacity))}.ring-purple-800{--tw-ring-opacity:1;--tw-ring-color:rgb(107 33 168/var(--tw-ring-opacity))}.ring-purple-900{--tw-ring-opacity:1;--tw-ring-color:rgb(88 28 135/var(--tw-ring-opacity))}.ring-purple-950{--tw-ring-opacity:1;--tw-ring-color:rgb(59 7 100/var(--tw-ring-opacity))}.ring-red-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 226 226/var(--tw-ring-opacity))}.ring-red-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity))}.ring-red-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity))}.ring-red-400{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity))}.ring-red-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 242 242/var(--tw-ring-opacity))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.ring-red-600{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.ring-red-700{--tw-ring-opacity:1;--tw-ring-color:rgb(185 28 28/var(--tw-ring-opacity))}.ring-red-800{--tw-ring-opacity:1;--tw-ring-color:rgb(153 27 27/var(--tw-ring-opacity))}.ring-red-900{--tw-ring-opacity:1;--tw-ring-color:rgb(127 29 29/var(--tw-ring-opacity))}.ring-red-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 10 10/var(--tw-ring-opacity))}.ring-rose-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 228 230/var(--tw-ring-opacity))}.ring-rose-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 205 211/var(--tw-ring-opacity))}.ring-rose-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 164 175/var(--tw-ring-opacity))}.ring-rose-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 113 133/var(--tw-ring-opacity))}.ring-rose-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 241 242/var(--tw-ring-opacity))}.ring-rose-500{--tw-ring-opacity:1;--tw-ring-color:rgb(244 63 94/var(--tw-ring-opacity))}.ring-rose-600{--tw-ring-opacity:1;--tw-ring-color:rgb(225 29 72/var(--tw-ring-opacity))}.ring-rose-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 18 60/var(--tw-ring-opacity))}.ring-rose-800{--tw-ring-opacity:1;--tw-ring-color:rgb(159 18 57/var(--tw-ring-opacity))}.ring-rose-900{--tw-ring-opacity:1;--tw-ring-color:rgb(136 19 55/var(--tw-ring-opacity))}.ring-rose-950{--tw-ring-opacity:1;--tw-ring-color:rgb(76 5 25/var(--tw-ring-opacity))}.ring-sky-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 242 254/var(--tw-ring-opacity))}.ring-sky-200{--tw-ring-opacity:1;--tw-ring-color:rgb(186 230 253/var(--tw-ring-opacity))}.ring-sky-300{--tw-ring-opacity:1;--tw-ring-color:rgb(125 211 252/var(--tw-ring-opacity))}.ring-sky-400{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.ring-sky-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 249 255/var(--tw-ring-opacity))}.ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.ring-sky-600{--tw-ring-opacity:1;--tw-ring-color:rgb(2 132 199/var(--tw-ring-opacity))}.ring-sky-700{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.ring-sky-800{--tw-ring-opacity:1;--tw-ring-color:rgb(7 89 133/var(--tw-ring-opacity))}.ring-sky-900{--tw-ring-opacity:1;--tw-ring-color:rgb(12 74 110/var(--tw-ring-opacity))}.ring-sky-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 47 73/var(--tw-ring-opacity))}.ring-slate-100{--tw-ring-opacity:1;--tw-ring-color:rgb(241 245 249/var(--tw-ring-opacity))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-slate-300{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity))}.ring-slate-400{--tw-ring-opacity:1;--tw-ring-color:rgb(148 163 184/var(--tw-ring-opacity))}.ring-slate-50{--tw-ring-opacity:1;--tw-ring-color:rgb(248 250 252/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.ring-slate-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 41 59/var(--tw-ring-opacity))}.ring-slate-900{--tw-ring-opacity:1;--tw-ring-color:rgb(15 23 42/var(--tw-ring-opacity))}.ring-slate-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity))}.ring-stone-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 244/var(--tw-ring-opacity))}.ring-stone-200{--tw-ring-opacity:1;--tw-ring-color:rgb(231 229 228/var(--tw-ring-opacity))}.ring-stone-300{--tw-ring-opacity:1;--tw-ring-color:rgb(214 211 209/var(--tw-ring-opacity))}.ring-stone-400{--tw-ring-opacity:1;--tw-ring-color:rgb(168 162 158/var(--tw-ring-opacity))}.ring-stone-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 249/var(--tw-ring-opacity))}.ring-stone-500{--tw-ring-opacity:1;--tw-ring-color:rgb(120 113 108/var(--tw-ring-opacity))}.ring-stone-600{--tw-ring-opacity:1;--tw-ring-color:rgb(87 83 78/var(--tw-ring-opacity))}.ring-stone-700{--tw-ring-opacity:1;--tw-ring-color:rgb(68 64 60/var(--tw-ring-opacity))}.ring-stone-800{--tw-ring-opacity:1;--tw-ring-color:rgb(41 37 36/var(--tw-ring-opacity))}.ring-stone-900{--tw-ring-opacity:1;--tw-ring-color:rgb(28 25 23/var(--tw-ring-opacity))}.ring-stone-950{--tw-ring-opacity:1;--tw-ring-color:rgb(12 10 9/var(--tw-ring-opacity))}.ring-teal-100{--tw-ring-opacity:1;--tw-ring-color:rgb(204 251 241/var(--tw-ring-opacity))}.ring-teal-200{--tw-ring-opacity:1;--tw-ring-color:rgb(153 246 228/var(--tw-ring-opacity))}.ring-teal-300{--tw-ring-opacity:1;--tw-ring-color:rgb(94 234 212/var(--tw-ring-opacity))}.ring-teal-400{--tw-ring-opacity:1;--tw-ring-color:rgb(45 212 191/var(--tw-ring-opacity))}.ring-teal-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 250/var(--tw-ring-opacity))}.ring-teal-500{--tw-ring-opacity:1;--tw-ring-color:rgb(20 184 166/var(--tw-ring-opacity))}.ring-teal-600{--tw-ring-opacity:1;--tw-ring-color:rgb(13 148 136/var(--tw-ring-opacity))}.ring-teal-700{--tw-ring-opacity:1;--tw-ring-color:rgb(15 118 110/var(--tw-ring-opacity))}.ring-teal-800{--tw-ring-opacity:1;--tw-ring-color:rgb(17 94 89/var(--tw-ring-opacity))}.ring-teal-900{--tw-ring-opacity:1;--tw-ring-color:rgb(19 78 74/var(--tw-ring-opacity))}.ring-teal-950{--tw-ring-opacity:1;--tw-ring-color:rgb(4 47 46/var(--tw-ring-opacity))}.ring-tremor-brand-inverted{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-tremor-brand-muted{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.ring-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-violet-100{--tw-ring-opacity:1;--tw-ring-color:rgb(237 233 254/var(--tw-ring-opacity))}.ring-violet-200{--tw-ring-opacity:1;--tw-ring-color:rgb(221 214 254/var(--tw-ring-opacity))}.ring-violet-300{--tw-ring-opacity:1;--tw-ring-color:rgb(196 181 253/var(--tw-ring-opacity))}.ring-violet-400{--tw-ring-opacity:1;--tw-ring-color:rgb(167 139 250/var(--tw-ring-opacity))}.ring-violet-50{--tw-ring-opacity:1;--tw-ring-color:rgb(245 243 255/var(--tw-ring-opacity))}.ring-violet-500{--tw-ring-opacity:1;--tw-ring-color:rgb(139 92 246/var(--tw-ring-opacity))}.ring-violet-600{--tw-ring-opacity:1;--tw-ring-color:rgb(124 58 237/var(--tw-ring-opacity))}.ring-violet-700{--tw-ring-opacity:1;--tw-ring-color:rgb(109 40 217/var(--tw-ring-opacity))}.ring-violet-800{--tw-ring-opacity:1;--tw-ring-color:rgb(91 33 182/var(--tw-ring-opacity))}.ring-violet-900{--tw-ring-opacity:1;--tw-ring-color:rgb(76 29 149/var(--tw-ring-opacity))}.ring-violet-950{--tw-ring-opacity:1;--tw-ring-color:rgb(46 16 101/var(--tw-ring-opacity))}.ring-yellow-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 249 195/var(--tw-ring-opacity))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity))}.ring-yellow-400{--tw-ring-opacity:1;--tw-ring-color:rgb(250 204 21/var(--tw-ring-opacity))}.ring-yellow-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 252 232/var(--tw-ring-opacity))}.ring-yellow-500{--tw-ring-opacity:1;--tw-ring-color:rgb(234 179 8/var(--tw-ring-opacity))}.ring-yellow-600{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity))}.ring-yellow-700{--tw-ring-opacity:1;--tw-ring-color:rgb(161 98 7/var(--tw-ring-opacity))}.ring-yellow-800{--tw-ring-opacity:1;--tw-ring-color:rgb(133 77 14/var(--tw-ring-opacity))}.ring-yellow-900{--tw-ring-opacity:1;--tw-ring-color:rgb(113 63 18/var(--tw-ring-opacity))}.ring-yellow-950{--tw-ring-opacity:1;--tw-ring-color:rgb(66 32 6/var(--tw-ring-opacity))}.ring-zinc-100{--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity))}.ring-zinc-200{--tw-ring-opacity:1;--tw-ring-color:rgb(228 228 231/var(--tw-ring-opacity))}.ring-zinc-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity))}.ring-zinc-400{--tw-ring-opacity:1;--tw-ring-color:rgb(161 161 170/var(--tw-ring-opacity))}.ring-zinc-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-zinc-500{--tw-ring-opacity:1;--tw-ring-color:rgb(113 113 122/var(--tw-ring-opacity))}.ring-zinc-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 91/var(--tw-ring-opacity))}.ring-zinc-700{--tw-ring-opacity:1;--tw-ring-color:rgb(63 63 70/var(--tw-ring-opacity))}.ring-zinc-800{--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42/var(--tw-ring-opacity))}.ring-zinc-900{--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity))}.ring-zinc-950{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity))}.ring-opacity-40{--tw-ring-opacity:0.4}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.\[scrollbar-width\:none\]{scrollbar-width:none}:root{--foreground-rgb:0,0,0;--background-start-rgb:255,255,255;--background-end-rgb:255,255,255}body{color:rgb(var(--foreground-rgb));background:linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb))}.placeholder\:text-tremor-content::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.first\:rounded-l-\[4px\]:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.last\:rounded-r-\[4px\]:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.focus-within\:relative:focus-within{position:relative}.hover\:border-b-2:hover{border-bottom-width:2px}.hover\:border-amber-100:hover{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.hover\:border-amber-200:hover{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.hover\:border-amber-300:hover{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.hover\:border-amber-400:hover{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.hover\:border-amber-50:hover{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.hover\:border-amber-500:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.hover\:border-amber-600:hover{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.hover\:border-amber-700:hover{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.hover\:border-amber-800:hover{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.hover\:border-amber-900:hover{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.hover\:border-amber-950:hover{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.hover\:border-blue-100:hover{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.hover\:border-blue-200:hover{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.hover\:border-blue-50:hover{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.hover\:border-blue-500:hover{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.hover\:border-blue-700:hover{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.hover\:border-blue-800:hover{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.hover\:border-blue-900:hover{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.hover\:border-blue-950:hover{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.hover\:border-cyan-100:hover{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.hover\:border-cyan-200:hover{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.hover\:border-cyan-300:hover{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.hover\:border-cyan-400:hover{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.hover\:border-cyan-50:hover{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.hover\:border-cyan-500:hover{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.hover\:border-cyan-600:hover{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.hover\:border-cyan-700:hover{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.hover\:border-cyan-800:hover{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.hover\:border-cyan-900:hover{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.hover\:border-cyan-950:hover{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.hover\:border-emerald-100:hover{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.hover\:border-emerald-200:hover{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.hover\:border-emerald-300:hover{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.hover\:border-emerald-400:hover{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.hover\:border-emerald-50:hover{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.hover\:border-emerald-500:hover{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.hover\:border-emerald-600:hover{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.hover\:border-emerald-700:hover{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.hover\:border-emerald-800:hover{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.hover\:border-emerald-900:hover{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.hover\:border-emerald-950:hover{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.hover\:border-fuchsia-100:hover{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.hover\:border-fuchsia-200:hover{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.hover\:border-fuchsia-300:hover{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.hover\:border-fuchsia-400:hover{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.hover\:border-fuchsia-50:hover{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.hover\:border-fuchsia-500:hover{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.hover\:border-fuchsia-600:hover{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.hover\:border-fuchsia-700:hover{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.hover\:border-fuchsia-800:hover{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.hover\:border-fuchsia-900:hover{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.hover\:border-fuchsia-950:hover{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.hover\:border-gray-100:hover{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.hover\:border-gray-50:hover{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.hover\:border-gray-700:hover{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.hover\:border-gray-900:hover{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.hover\:border-gray-950:hover{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.hover\:border-green-100:hover{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.hover\:border-green-200:hover{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.hover\:border-green-300:hover{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.hover\:border-green-400:hover{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.hover\:border-green-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.hover\:border-green-500:hover{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.hover\:border-green-600:hover{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.hover\:border-green-700:hover{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.hover\:border-green-800:hover{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.hover\:border-green-900:hover{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.hover\:border-green-950:hover{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.hover\:border-indigo-100:hover{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.hover\:border-indigo-200:hover{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.hover\:border-indigo-300:hover{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.hover\:border-indigo-400:hover{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.hover\:border-indigo-50:hover{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.hover\:border-indigo-500:hover{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.hover\:border-indigo-600:hover{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.hover\:border-indigo-700:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-indigo-800:hover{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.hover\:border-indigo-900:hover{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.hover\:border-indigo-950:hover{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.hover\:border-lime-100:hover{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.hover\:border-lime-200:hover{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.hover\:border-lime-300:hover{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.hover\:border-lime-400:hover{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.hover\:border-lime-50:hover{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.hover\:border-lime-500:hover{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.hover\:border-lime-600:hover{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.hover\:border-lime-700:hover{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.hover\:border-lime-800:hover{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.hover\:border-lime-900:hover{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.hover\:border-lime-950:hover{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.hover\:border-neutral-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.hover\:border-neutral-200:hover{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.hover\:border-neutral-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.hover\:border-neutral-400:hover{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.hover\:border-neutral-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-neutral-500:hover{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.hover\:border-neutral-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.hover\:border-neutral-700:hover{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.hover\:border-neutral-800:hover{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.hover\:border-neutral-900:hover{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.hover\:border-neutral-950:hover{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.hover\:border-orange-100:hover{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.hover\:border-orange-200:hover{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.hover\:border-orange-300:hover{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.hover\:border-orange-400:hover{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.hover\:border-orange-50:hover{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.hover\:border-orange-500:hover{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.hover\:border-orange-600:hover{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.hover\:border-orange-700:hover{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.hover\:border-orange-800:hover{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.hover\:border-orange-900:hover{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.hover\:border-orange-950:hover{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.hover\:border-pink-100:hover{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.hover\:border-pink-200:hover{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.hover\:border-pink-300:hover{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.hover\:border-pink-400:hover{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.hover\:border-pink-50:hover{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.hover\:border-pink-500:hover{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.hover\:border-pink-600:hover{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.hover\:border-pink-700:hover{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.hover\:border-pink-800:hover{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.hover\:border-pink-900:hover{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.hover\:border-pink-950:hover{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.hover\:border-purple-100:hover{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.hover\:border-purple-200:hover{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.hover\:border-purple-300:hover{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.hover\:border-purple-400:hover{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.hover\:border-purple-50:hover{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.hover\:border-purple-500:hover{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.hover\:border-purple-600:hover{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.hover\:border-purple-700:hover{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.hover\:border-purple-800:hover{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.hover\:border-purple-900:hover{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.hover\:border-purple-950:hover{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.hover\:border-red-100:hover{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.hover\:border-red-200:hover{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.hover\:border-red-300:hover{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.hover\:border-red-400:hover{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.hover\:border-red-50:hover{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.hover\:border-red-600:hover{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.hover\:border-red-800:hover{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.hover\:border-red-900:hover{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.hover\:border-red-950:hover{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.hover\:border-rose-100:hover{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.hover\:border-rose-200:hover{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.hover\:border-rose-300:hover{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.hover\:border-rose-400:hover{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.hover\:border-rose-50:hover{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.hover\:border-rose-500:hover{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.hover\:border-rose-600:hover{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.hover\:border-rose-700:hover{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.hover\:border-rose-800:hover{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.hover\:border-rose-900:hover{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.hover\:border-rose-950:hover{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.hover\:border-sky-100:hover{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.hover\:border-sky-200:hover{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.hover\:border-sky-300:hover{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.hover\:border-sky-400:hover{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.hover\:border-sky-50:hover{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.hover\:border-sky-500:hover{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.hover\:border-sky-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-sky-700:hover{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.hover\:border-sky-800:hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.hover\:border-sky-900:hover{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.hover\:border-sky-950:hover{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.hover\:border-slate-100:hover{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.hover\:border-slate-200:hover{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.hover\:border-slate-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.hover\:border-slate-50:hover{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.hover\:border-slate-500:hover{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.hover\:border-slate-600:hover{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.hover\:border-slate-700:hover{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.hover\:border-slate-800:hover{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.hover\:border-slate-900:hover{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.hover\:border-slate-950:hover{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.hover\:border-stone-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.hover\:border-stone-200:hover{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.hover\:border-stone-300:hover{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.hover\:border-stone-400:hover{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.hover\:border-stone-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.hover\:border-stone-500:hover{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.hover\:border-stone-600:hover{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.hover\:border-stone-700:hover{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.hover\:border-stone-800:hover{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.hover\:border-stone-900:hover{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.hover\:border-stone-950:hover{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.hover\:border-teal-100:hover{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.hover\:border-teal-200:hover{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.hover\:border-teal-300:hover{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.hover\:border-teal-400:hover{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.hover\:border-teal-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.hover\:border-teal-500:hover{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.hover\:border-teal-600:hover{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.hover\:border-teal-700:hover{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.hover\:border-teal-800:hover{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.hover\:border-teal-900:hover{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.hover\:border-teal-950:hover{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.hover\:border-tremor-brand-emphasis:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-tremor-content:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-violet-100:hover{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.hover\:border-violet-200:hover{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.hover\:border-violet-300:hover{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.hover\:border-violet-400:hover{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.hover\:border-violet-50:hover{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.hover\:border-violet-500:hover{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.hover\:border-violet-600:hover{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.hover\:border-violet-700:hover{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.hover\:border-violet-800:hover{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.hover\:border-violet-900:hover{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.hover\:border-violet-950:hover{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.hover\:border-yellow-100:hover{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.hover\:border-yellow-200:hover{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.hover\:border-yellow-300:hover{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.hover\:border-yellow-400:hover{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.hover\:border-yellow-50:hover{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.hover\:border-yellow-500:hover{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.hover\:border-yellow-600:hover{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.hover\:border-yellow-700:hover{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.hover\:border-yellow-800:hover{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.hover\:border-yellow-900:hover{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.hover\:border-yellow-950:hover{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.hover\:border-zinc-100:hover{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.hover\:border-zinc-200:hover{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.hover\:border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:border-zinc-400:hover{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.hover\:border-zinc-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-zinc-500:hover{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.hover\:border-zinc-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-zinc-700:hover{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.hover\:border-zinc-800:hover{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.hover\:border-zinc-900:hover{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.hover\:border-zinc-950:hover{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.hover\:bg-amber-300:hover{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.hover\:bg-amber-400:hover{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.hover\:bg-amber-500:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.hover\:bg-amber-700:hover{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.hover\:bg-amber-800:hover{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.hover\:bg-amber-900:hover{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.hover\:bg-amber-950:hover{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.hover\:bg-blue-300:hover{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.hover\:bg-blue-900:hover{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.hover\:bg-blue-950:hover{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.hover\:bg-cyan-100:hover{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.hover\:bg-cyan-200:hover{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.hover\:bg-cyan-300:hover{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.hover\:bg-cyan-400:hover{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.hover\:bg-cyan-50:hover{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.hover\:bg-cyan-500:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.hover\:bg-cyan-600:hover{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.hover\:bg-cyan-700:hover{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.hover\:bg-cyan-800:hover{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.hover\:bg-cyan-900:hover{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.hover\:bg-cyan-950:hover{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.hover\:bg-emerald-100:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.hover\:bg-emerald-200:hover{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.hover\:bg-emerald-300:hover{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.hover\:bg-emerald-400:hover{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.hover\:bg-emerald-500:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.hover\:bg-emerald-800:hover{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.hover\:bg-emerald-900:hover{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.hover\:bg-emerald-950:hover{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.hover\:bg-fuchsia-100:hover{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-200:hover{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.hover\:bg-fuchsia-300:hover{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.hover\:bg-fuchsia-400:hover{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.hover\:bg-fuchsia-50:hover{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-500:hover{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.hover\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.hover\:bg-fuchsia-700:hover{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.hover\:bg-fuchsia-800:hover{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.hover\:bg-fuchsia-900:hover{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.hover\:bg-fuchsia-950:hover{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.hover\:bg-gray-950:hover{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.hover\:bg-green-200:hover{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.hover\:bg-green-300:hover{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.hover\:bg-green-400:hover{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.hover\:bg-green-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.hover\:bg-green-500:hover{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-green-800:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.hover\:bg-green-900:hover{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.hover\:bg-green-950:hover{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.hover\:bg-indigo-200:hover{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.hover\:bg-indigo-300:hover{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.hover\:bg-indigo-400:hover{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.hover\:bg-indigo-50:hover{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.hover\:bg-indigo-500:hover{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.hover\:bg-indigo-600:hover{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-indigo-800:hover{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.hover\:bg-indigo-900:hover{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.hover\:bg-indigo-950:hover{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.hover\:bg-lime-100:hover{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.hover\:bg-lime-200:hover{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.hover\:bg-lime-300:hover{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.hover\:bg-lime-400:hover{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.hover\:bg-lime-50:hover{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.hover\:bg-lime-500:hover{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.hover\:bg-lime-600:hover{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.hover\:bg-lime-700:hover{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.hover\:bg-lime-800:hover{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.hover\:bg-lime-900:hover{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.hover\:bg-lime-950:hover{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.hover\:bg-neutral-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.hover\:bg-neutral-200:hover{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.hover\:bg-neutral-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.hover\:bg-neutral-400:hover{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.hover\:bg-neutral-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-neutral-500:hover{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.hover\:bg-neutral-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.hover\:bg-neutral-700:hover{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.hover\:bg-neutral-800:hover{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.hover\:bg-neutral-900:hover{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.hover\:bg-neutral-950:hover{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.hover\:bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.hover\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.hover\:bg-orange-300:hover{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.hover\:bg-orange-400:hover{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.hover\:bg-orange-50:hover{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.hover\:bg-orange-500:hover{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.hover\:bg-orange-700:hover{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.hover\:bg-orange-800:hover{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.hover\:bg-orange-900:hover{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.hover\:bg-orange-950:hover{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.hover\:bg-pink-200:hover{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.hover\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.hover\:bg-pink-400:hover{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.hover\:bg-pink-50:hover{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-pink-600:hover{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.hover\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.hover\:bg-pink-800:hover{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.hover\:bg-pink-900:hover{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.hover\:bg-pink-950:hover{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.hover\:bg-purple-200:hover{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.hover\:bg-purple-300:hover{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.hover\:bg-purple-400:hover{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.hover\:bg-purple-50:hover{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.hover\:bg-purple-500:hover{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.hover\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.hover\:bg-purple-800:hover{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.hover\:bg-purple-900:hover{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.hover\:bg-purple-950:hover{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.hover\:bg-red-300:hover{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.hover\:bg-red-400:hover{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:bg-red-800:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.hover\:bg-red-950:hover{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.hover\:bg-rose-100:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.hover\:bg-rose-200:hover{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.hover\:bg-rose-300:hover{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.hover\:bg-rose-400:hover{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.hover\:bg-rose-500:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.hover\:bg-rose-600:hover{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.hover\:bg-rose-700:hover{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.hover\:bg-rose-800:hover{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.hover\:bg-rose-900:hover{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.hover\:bg-rose-950:hover{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.hover\:bg-sky-100:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.hover\:bg-sky-200:hover{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.hover\:bg-sky-300:hover{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.hover\:bg-sky-400:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.hover\:bg-sky-50:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.hover\:bg-sky-500:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.hover\:bg-sky-600:hover{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.hover\:bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:bg-sky-800:hover{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.hover\:bg-sky-900:hover{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.hover\:bg-sky-950:hover{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\:bg-slate-300:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.hover\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-slate-500:hover{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.hover\:bg-slate-600:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.hover\:bg-slate-900:hover{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.hover\:bg-slate-950:hover{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.hover\:bg-stone-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.hover\:bg-stone-200:hover{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.hover\:bg-stone-300:hover{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.hover\:bg-stone-400:hover{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.hover\:bg-stone-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.hover\:bg-stone-500:hover{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.hover\:bg-stone-600:hover{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.hover\:bg-stone-700:hover{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.hover\:bg-stone-800:hover{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.hover\:bg-stone-900:hover{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.hover\:bg-stone-950:hover{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.hover\:bg-teal-100:hover{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.hover\:bg-teal-200:hover{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.hover\:bg-teal-300:hover{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.hover\:bg-teal-400:hover{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.hover\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.hover\:bg-teal-500:hover{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.hover\:bg-teal-600:hover{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.hover\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.hover\:bg-teal-800:hover{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.hover\:bg-teal-900:hover{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.hover\:bg-teal-950:hover{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.hover\:bg-tremor-background-muted:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-tremor-background-subtle:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-emphasis:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-faint:hover{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.hover\:bg-violet-100:hover{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.hover\:bg-violet-200:hover{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.hover\:bg-violet-300:hover{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.hover\:bg-violet-400:hover{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.hover\:bg-violet-50:hover{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.hover\:bg-violet-500:hover{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.hover\:bg-violet-600:hover{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.hover\:bg-violet-800:hover{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.hover\:bg-violet-900:hover{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.hover\:bg-violet-950:hover{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-yellow-200:hover{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.hover\:bg-yellow-300:hover{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.hover\:bg-yellow-400:hover{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.hover\:bg-yellow-50:hover{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.hover\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.hover\:bg-yellow-700:hover{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.hover\:bg-yellow-800:hover{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.hover\:bg-yellow-900:hover{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.hover\:bg-yellow-950:hover{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.hover\:bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.hover\:bg-zinc-200:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.hover\:bg-zinc-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.hover\:bg-zinc-400:hover{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-zinc-500:hover{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.hover\:bg-zinc-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.hover\:bg-zinc-700:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.hover\:bg-zinc-800:hover{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.hover\:bg-zinc-900:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.hover\:bg-zinc-950:hover{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.hover\:bg-opacity-20:hover{--tw-bg-opacity:0.2}.hover\:text-amber-100:hover{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.hover\:text-amber-200:hover{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.hover\:text-amber-300:hover{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.hover\:text-amber-400:hover{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.hover\:text-amber-50:hover{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.hover\:text-amber-500:hover{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.hover\:text-amber-700:hover{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.hover\:text-amber-800:hover{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.hover\:text-amber-900:hover{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.hover\:text-amber-950:hover{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.hover\:text-blue-100:hover{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.hover\:text-blue-200:hover{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.hover\:text-blue-50:hover{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.hover\:text-blue-900:hover{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.hover\:text-blue-950:hover{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.hover\:text-cyan-100:hover{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.hover\:text-cyan-200:hover{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.hover\:text-cyan-300:hover{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.hover\:text-cyan-400:hover{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.hover\:text-cyan-50:hover{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.hover\:text-cyan-500:hover{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.hover\:text-cyan-600:hover{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.hover\:text-cyan-700:hover{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.hover\:text-cyan-800:hover{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.hover\:text-cyan-900:hover{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.hover\:text-cyan-950:hover{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.hover\:text-emerald-100:hover{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.hover\:text-emerald-200:hover{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.hover\:text-emerald-300:hover{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.hover\:text-emerald-400:hover{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.hover\:text-emerald-50:hover{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.hover\:text-emerald-500:hover{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.hover\:text-emerald-600:hover{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.hover\:text-emerald-700:hover{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.hover\:text-emerald-800:hover{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.hover\:text-emerald-900:hover{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.hover\:text-emerald-950:hover{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.hover\:text-fuchsia-100:hover{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.hover\:text-fuchsia-200:hover{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.hover\:text-fuchsia-300:hover{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.hover\:text-fuchsia-400:hover{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.hover\:text-fuchsia-50:hover{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.hover\:text-fuchsia-500:hover{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.hover\:text-fuchsia-600:hover{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.hover\:text-fuchsia-700:hover{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.hover\:text-fuchsia-800:hover{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.hover\:text-fuchsia-900:hover{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.hover\:text-fuchsia-950:hover{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.hover\:text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-gray-950:hover{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.hover\:text-green-100:hover{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.hover\:text-green-200:hover{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.hover\:text-green-300:hover{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.hover\:text-green-400:hover{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.hover\:text-green-50:hover{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.hover\:text-green-600:hover{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.hover\:text-green-700:hover{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.hover\:text-green-800:hover{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.hover\:text-green-900:hover{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.hover\:text-green-950:hover{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.hover\:text-indigo-100:hover{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.hover\:text-indigo-200:hover{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.hover\:text-indigo-300:hover{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.hover\:text-indigo-400:hover{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.hover\:text-indigo-50:hover{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.hover\:text-indigo-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-indigo-800:hover{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.hover\:text-indigo-950:hover{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.hover\:text-lime-100:hover{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.hover\:text-lime-200:hover{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.hover\:text-lime-300:hover{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.hover\:text-lime-400:hover{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.hover\:text-lime-50:hover{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.hover\:text-lime-500:hover{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.hover\:text-lime-600:hover{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.hover\:text-lime-700:hover{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.hover\:text-lime-800:hover{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.hover\:text-lime-900:hover{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.hover\:text-lime-950:hover{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.hover\:text-neutral-100:hover{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.hover\:text-neutral-200:hover{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.hover\:text-neutral-300:hover{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.hover\:text-neutral-400:hover{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.hover\:text-neutral-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-neutral-500:hover{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.hover\:text-neutral-600:hover{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.hover\:text-neutral-700:hover{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.hover\:text-neutral-900:hover{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.hover\:text-neutral-950:hover{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.hover\:text-orange-100:hover{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.hover\:text-orange-200:hover{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.hover\:text-orange-400:hover{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.hover\:text-orange-50:hover{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.hover\:text-orange-500:hover{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.hover\:text-orange-600:hover{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.hover\:text-orange-700:hover{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.hover\:text-orange-800:hover{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.hover\:text-orange-900:hover{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.hover\:text-orange-950:hover{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.hover\:text-pink-100:hover{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.hover\:text-pink-200:hover{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.hover\:text-pink-300:hover{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.hover\:text-pink-400:hover{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.hover\:text-pink-50:hover{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.hover\:text-pink-500:hover{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.hover\:text-pink-600:hover{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.hover\:text-pink-700:hover{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.hover\:text-pink-800:hover{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.hover\:text-pink-900:hover{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.hover\:text-pink-950:hover{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.hover\:text-purple-100:hover{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.hover\:text-purple-200:hover{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.hover\:text-purple-300:hover{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.hover\:text-purple-400:hover{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.hover\:text-purple-50:hover{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.hover\:text-purple-500:hover{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.hover\:text-purple-600:hover{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.hover\:text-purple-700:hover{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.hover\:text-purple-800:hover{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.hover\:text-purple-900:hover{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.hover\:text-purple-950:hover{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.hover\:text-red-100:hover{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.hover\:text-red-200:hover{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.hover\:text-red-800:hover{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.hover\:text-red-900:hover{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.hover\:text-red-950:hover{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.hover\:text-rose-100:hover{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.hover\:text-rose-200:hover{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.hover\:text-rose-300:hover{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.hover\:text-rose-400:hover{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.hover\:text-rose-50:hover{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.hover\:text-rose-600:hover{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.hover\:text-rose-700:hover{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.hover\:text-rose-800:hover{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.hover\:text-rose-900:hover{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.hover\:text-rose-950:hover{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.hover\:text-sky-100:hover{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.hover\:text-sky-200:hover{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.hover\:text-sky-300:hover{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.hover\:text-sky-400:hover{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.hover\:text-sky-50:hover{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.hover\:text-sky-500:hover{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.hover\:text-sky-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.hover\:text-sky-700:hover{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.hover\:text-sky-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-sky-900:hover{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.hover\:text-sky-950:hover{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.hover\:text-slate-100:hover{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.hover\:text-slate-200:hover{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.hover\:text-slate-300:hover{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.hover\:text-slate-400:hover{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:text-slate-50:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.hover\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-slate-950:hover{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.hover\:text-stone-100:hover{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.hover\:text-stone-200:hover{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.hover\:text-stone-300:hover{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.hover\:text-stone-400:hover{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.hover\:text-stone-50:hover{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.hover\:text-stone-500:hover{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.hover\:text-stone-600:hover{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.hover\:text-stone-700:hover{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.hover\:text-stone-800:hover{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.hover\:text-stone-900:hover{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.hover\:text-stone-950:hover{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.hover\:text-teal-100:hover{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.hover\:text-teal-200:hover{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.hover\:text-teal-300:hover{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.hover\:text-teal-400:hover{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.hover\:text-teal-50:hover{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.hover\:text-teal-500:hover{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.hover\:text-teal-600:hover{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.hover\:text-teal-700:hover{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.hover\:text-teal-800:hover{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.hover\:text-teal-900:hover{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.hover\:text-teal-950:hover{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.hover\:text-tremor-brand-emphasis:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-tremor-content:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-tremor-content-emphasis:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-violet-100:hover{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.hover\:text-violet-200:hover{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.hover\:text-violet-300:hover{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.hover\:text-violet-400:hover{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.hover\:text-violet-50:hover{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.hover\:text-violet-500:hover{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.hover\:text-violet-600:hover{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.hover\:text-violet-700:hover{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.hover\:text-violet-800:hover{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.hover\:text-violet-900:hover{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.hover\:text-violet-950:hover{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.hover\:text-yellow-100:hover{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.hover\:text-yellow-200:hover{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.hover\:text-yellow-300:hover{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.hover\:text-yellow-400:hover{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.hover\:text-yellow-50:hover{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.hover\:text-yellow-500:hover{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.hover\:text-yellow-600:hover{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.hover\:text-yellow-700:hover{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.hover\:text-yellow-800:hover{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.hover\:text-yellow-900:hover{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.hover\:text-yellow-950:hover{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.hover\:text-zinc-100:hover{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.hover\:text-zinc-200:hover{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.hover\:text-zinc-300:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.hover\:text-zinc-400:hover{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.hover\:text-zinc-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-zinc-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-zinc-600:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.hover\:text-zinc-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.hover\:text-zinc-800:hover{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.hover\:text-zinc-950:hover{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-tremor-brand-subtle:focus{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-tremor-brand-muted:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.group:hover .group-hover\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.group:active .group-active\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.aria-selected\:\!bg-tremor-background-subtle[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(243 244 246/var(--tw-bg-opacity))!important}.aria-selected\:bg-tremor-background-emphasis[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.aria-selected\:\!text-tremor-content[aria-selected=true]{--tw-text-opacity:1!important;color:rgb(107 114 128/var(--tw-text-opacity))!important}.aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.aria-selected\:text-tremor-brand-inverted[aria-selected=true],.aria-selected\:text-tremor-content-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.ui-open\:underline[data-headlessui-state~=open]{text-decoration-line:underline}:where([data-headlessui-state~=open]) .ui-open\:underline{text-decoration-line:underline}.ui-selected\:border-b-2[data-headlessui-state~=selected]{border-bottom-width:2px}.ui-selected\:border-amber-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.ui-selected\:border-amber-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.ui-selected\:border-amber-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.ui-selected\:border-amber-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.ui-selected\:border-amber-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.ui-selected\:border-amber-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.ui-selected\:border-amber-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.ui-selected\:border-amber-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.ui-selected\:border-amber-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.ui-selected\:border-amber-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.ui-selected\:border-amber-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.ui-selected\:border-blue-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.ui-selected\:border-blue-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.ui-selected\:border-blue-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.ui-selected\:border-blue-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.ui-selected\:border-blue-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.ui-selected\:border-blue-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.ui-selected\:border-blue-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.ui-selected\:border-blue-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.ui-selected\:border-blue-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.ui-selected\:border-blue-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.ui-selected\:border-blue-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.ui-selected\:border-cyan-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.ui-selected\:border-cyan-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.ui-selected\:border-cyan-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.ui-selected\:border-cyan-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.ui-selected\:border-cyan-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.ui-selected\:border-cyan-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.ui-selected\:border-cyan-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.ui-selected\:border-cyan-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.ui-selected\:border-cyan-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.ui-selected\:border-cyan-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.ui-selected\:border-cyan-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.ui-selected\:border-emerald-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.ui-selected\:border-emerald-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.ui-selected\:border-emerald-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.ui-selected\:border-emerald-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.ui-selected\:border-emerald-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.ui-selected\:border-emerald-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.ui-selected\:border-emerald-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.ui-selected\:border-emerald-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.ui-selected\:border-emerald-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.ui-selected\:border-emerald-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.ui-selected\:border-emerald-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.ui-selected\:border-gray-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.ui-selected\:border-gray-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-gray-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.ui-selected\:border-gray-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.ui-selected\:border-gray-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.ui-selected\:border-gray-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.ui-selected\:border-gray-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.ui-selected\:border-gray-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.ui-selected\:border-gray-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.ui-selected\:border-gray-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.ui-selected\:border-gray-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.ui-selected\:border-green-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.ui-selected\:border-green-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.ui-selected\:border-green-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.ui-selected\:border-green-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.ui-selected\:border-green-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.ui-selected\:border-green-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.ui-selected\:border-green-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.ui-selected\:border-green-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.ui-selected\:border-green-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.ui-selected\:border-green-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.ui-selected\:border-green-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.ui-selected\:border-indigo-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.ui-selected\:border-indigo-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.ui-selected\:border-indigo-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.ui-selected\:border-indigo-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-indigo-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.ui-selected\:border-indigo-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.ui-selected\:border-indigo-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.ui-selected\:border-indigo-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.ui-selected\:border-indigo-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.ui-selected\:border-lime-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.ui-selected\:border-lime-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.ui-selected\:border-lime-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.ui-selected\:border-lime-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.ui-selected\:border-lime-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.ui-selected\:border-lime-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.ui-selected\:border-lime-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.ui-selected\:border-lime-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.ui-selected\:border-lime-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.ui-selected\:border-lime-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.ui-selected\:border-lime-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.ui-selected\:border-neutral-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.ui-selected\:border-neutral-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.ui-selected\:border-neutral-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.ui-selected\:border-neutral-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.ui-selected\:border-neutral-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-neutral-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.ui-selected\:border-neutral-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.ui-selected\:border-neutral-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.ui-selected\:border-neutral-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.ui-selected\:border-neutral-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.ui-selected\:border-neutral-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.ui-selected\:border-orange-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.ui-selected\:border-orange-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.ui-selected\:border-orange-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.ui-selected\:border-orange-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.ui-selected\:border-orange-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.ui-selected\:border-orange-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.ui-selected\:border-orange-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.ui-selected\:border-orange-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.ui-selected\:border-orange-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.ui-selected\:border-orange-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.ui-selected\:border-orange-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.ui-selected\:border-pink-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.ui-selected\:border-pink-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.ui-selected\:border-pink-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.ui-selected\:border-pink-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.ui-selected\:border-pink-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.ui-selected\:border-pink-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.ui-selected\:border-pink-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.ui-selected\:border-pink-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.ui-selected\:border-pink-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.ui-selected\:border-pink-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.ui-selected\:border-pink-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.ui-selected\:border-purple-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.ui-selected\:border-purple-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.ui-selected\:border-purple-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.ui-selected\:border-purple-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.ui-selected\:border-purple-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.ui-selected\:border-purple-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.ui-selected\:border-purple-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.ui-selected\:border-purple-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.ui-selected\:border-purple-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.ui-selected\:border-purple-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.ui-selected\:border-purple-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.ui-selected\:border-red-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.ui-selected\:border-red-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.ui-selected\:border-red-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.ui-selected\:border-red-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.ui-selected\:border-red-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.ui-selected\:border-red-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.ui-selected\:border-red-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.ui-selected\:border-red-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.ui-selected\:border-red-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.ui-selected\:border-red-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.ui-selected\:border-red-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.ui-selected\:border-rose-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.ui-selected\:border-rose-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.ui-selected\:border-rose-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.ui-selected\:border-rose-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.ui-selected\:border-rose-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.ui-selected\:border-rose-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.ui-selected\:border-rose-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.ui-selected\:border-rose-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.ui-selected\:border-rose-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.ui-selected\:border-rose-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.ui-selected\:border-rose-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.ui-selected\:border-sky-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.ui-selected\:border-sky-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.ui-selected\:border-sky-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.ui-selected\:border-sky-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.ui-selected\:border-sky-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.ui-selected\:border-sky-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.ui-selected\:border-sky-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.ui-selected\:border-sky-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.ui-selected\:border-sky-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.ui-selected\:border-sky-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.ui-selected\:border-sky-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.ui-selected\:border-slate-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.ui-selected\:border-slate-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.ui-selected\:border-slate-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.ui-selected\:border-slate-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.ui-selected\:border-slate-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.ui-selected\:border-slate-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.ui-selected\:border-slate-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.ui-selected\:border-slate-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.ui-selected\:border-slate-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.ui-selected\:border-slate-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.ui-selected\:border-slate-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.ui-selected\:border-stone-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.ui-selected\:border-stone-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.ui-selected\:border-stone-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.ui-selected\:border-stone-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.ui-selected\:border-stone-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.ui-selected\:border-stone-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.ui-selected\:border-stone-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.ui-selected\:border-stone-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.ui-selected\:border-stone-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.ui-selected\:border-stone-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.ui-selected\:border-stone-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.ui-selected\:border-teal-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.ui-selected\:border-teal-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.ui-selected\:border-teal-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.ui-selected\:border-teal-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.ui-selected\:border-teal-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.ui-selected\:border-teal-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.ui-selected\:border-teal-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.ui-selected\:border-teal-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.ui-selected\:border-teal-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.ui-selected\:border-teal-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.ui-selected\:border-teal-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.ui-selected\:border-tremor-border[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-tremor-brand[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-violet-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.ui-selected\:border-violet-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.ui-selected\:border-violet-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.ui-selected\:border-violet-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.ui-selected\:border-violet-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.ui-selected\:border-violet-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.ui-selected\:border-violet-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.ui-selected\:border-violet-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.ui-selected\:border-violet-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.ui-selected\:border-violet-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.ui-selected\:border-violet-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.ui-selected\:border-yellow-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.ui-selected\:border-yellow-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.ui-selected\:border-yellow-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.ui-selected\:border-yellow-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.ui-selected\:border-yellow-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.ui-selected\:border-yellow-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.ui-selected\:border-yellow-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.ui-selected\:border-yellow-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.ui-selected\:border-yellow-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.ui-selected\:border-yellow-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.ui-selected\:border-yellow-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.ui-selected\:border-zinc-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.ui-selected\:border-zinc-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.ui-selected\:border-zinc-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.ui-selected\:border-zinc-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.ui-selected\:border-zinc-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-zinc-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.ui-selected\:border-zinc-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.ui-selected\:border-zinc-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.ui-selected\:border-zinc-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.ui-selected\:border-zinc-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.ui-selected\:border-zinc-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.ui-selected\:bg-amber-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.ui-selected\:bg-amber-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.ui-selected\:bg-amber-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.ui-selected\:bg-amber-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.ui-selected\:bg-amber-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.ui-selected\:bg-amber-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.ui-selected\:bg-amber-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.ui-selected\:bg-amber-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.ui-selected\:bg-amber-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.ui-selected\:bg-amber-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.ui-selected\:bg-amber-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.ui-selected\:bg-blue-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.ui-selected\:bg-blue-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.ui-selected\:bg-blue-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.ui-selected\:bg-blue-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.ui-selected\:bg-blue-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.ui-selected\:bg-blue-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.ui-selected\:bg-blue-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.ui-selected\:bg-blue-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.ui-selected\:bg-blue-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.ui-selected\:bg-gray-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.ui-selected\:bg-gray-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.ui-selected\:bg-gray-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.ui-selected\:bg-gray-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.ui-selected\:bg-gray-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-gray-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.ui-selected\:bg-gray-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.ui-selected\:bg-gray-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.ui-selected\:bg-gray-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.ui-selected\:bg-gray-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.ui-selected\:bg-gray-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.ui-selected\:bg-green-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.ui-selected\:bg-green-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.ui-selected\:bg-green-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.ui-selected\:bg-green-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.ui-selected\:bg-green-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.ui-selected\:bg-green-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.ui-selected\:bg-green-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.ui-selected\:bg-green-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.ui-selected\:bg-green-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.ui-selected\:bg-green-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.ui-selected\:bg-green-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.ui-selected\:bg-lime-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.ui-selected\:bg-lime-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.ui-selected\:bg-lime-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.ui-selected\:bg-lime-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.ui-selected\:bg-lime-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.ui-selected\:bg-lime-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.ui-selected\:bg-lime-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.ui-selected\:bg-lime-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.ui-selected\:bg-lime-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.ui-selected\:bg-lime-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.ui-selected\:bg-lime-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-orange-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.ui-selected\:bg-orange-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.ui-selected\:bg-orange-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.ui-selected\:bg-orange-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.ui-selected\:bg-orange-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.ui-selected\:bg-orange-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.ui-selected\:bg-orange-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.ui-selected\:bg-pink-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.ui-selected\:bg-pink-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.ui-selected\:bg-pink-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.ui-selected\:bg-pink-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.ui-selected\:bg-pink-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.ui-selected\:bg-pink-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.ui-selected\:bg-pink-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.ui-selected\:bg-pink-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.ui-selected\:bg-pink-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.ui-selected\:bg-pink-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.ui-selected\:bg-pink-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.ui-selected\:bg-purple-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.ui-selected\:bg-purple-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.ui-selected\:bg-purple-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.ui-selected\:bg-purple-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.ui-selected\:bg-purple-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.ui-selected\:bg-purple-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.ui-selected\:bg-purple-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.ui-selected\:bg-purple-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.ui-selected\:bg-red-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.ui-selected\:bg-red-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.ui-selected\:bg-red-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.ui-selected\:bg-red-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.ui-selected\:bg-red-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.ui-selected\:bg-red-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.ui-selected\:bg-red-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-red-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.ui-selected\:bg-red-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.ui-selected\:bg-red-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.ui-selected\:bg-red-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-rose-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.ui-selected\:bg-rose-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.ui-selected\:bg-rose-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.ui-selected\:bg-rose-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.ui-selected\:bg-rose-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.ui-selected\:bg-rose-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.ui-selected\:bg-rose-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.ui-selected\:bg-rose-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.ui-selected\:bg-rose-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.ui-selected\:bg-rose-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.ui-selected\:bg-rose-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.ui-selected\:bg-sky-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.ui-selected\:bg-sky-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.ui-selected\:bg-sky-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.ui-selected\:bg-sky-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.ui-selected\:bg-sky-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.ui-selected\:bg-sky-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.ui-selected\:bg-sky-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.ui-selected\:bg-sky-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.ui-selected\:bg-sky-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.ui-selected\:bg-sky-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.ui-selected\:bg-sky-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.ui-selected\:bg-slate-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.ui-selected\:bg-slate-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.ui-selected\:bg-slate-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.ui-selected\:bg-slate-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.ui-selected\:bg-slate-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.ui-selected\:bg-slate-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.ui-selected\:bg-slate-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.ui-selected\:bg-slate-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.ui-selected\:bg-slate-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.ui-selected\:bg-slate-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.ui-selected\:bg-slate-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.ui-selected\:bg-stone-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.ui-selected\:bg-stone-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.ui-selected\:bg-stone-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.ui-selected\:bg-stone-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.ui-selected\:bg-stone-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.ui-selected\:bg-stone-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.ui-selected\:bg-stone-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.ui-selected\:bg-stone-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.ui-selected\:bg-stone-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.ui-selected\:bg-teal-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.ui-selected\:bg-teal-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.ui-selected\:bg-teal-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.ui-selected\:bg-teal-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.ui-selected\:bg-teal-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.ui-selected\:bg-teal-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.ui-selected\:bg-teal-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.ui-selected\:bg-teal-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.ui-selected\:bg-teal-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.ui-selected\:bg-teal-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.ui-selected\:bg-teal-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background-muted[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-violet-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.ui-selected\:bg-violet-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.ui-selected\:bg-violet-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.ui-selected\:bg-violet-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.ui-selected\:bg-violet-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.ui-selected\:bg-violet-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.ui-selected\:bg-violet-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.ui-selected\:bg-violet-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.ui-selected\:bg-violet-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.ui-selected\:text-amber-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.ui-selected\:text-amber-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.ui-selected\:text-amber-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.ui-selected\:text-amber-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.ui-selected\:text-amber-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.ui-selected\:text-amber-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.ui-selected\:text-amber-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.ui-selected\:text-amber-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.ui-selected\:text-amber-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.ui-selected\:text-amber-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.ui-selected\:text-amber-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.ui-selected\:text-blue-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.ui-selected\:text-blue-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.ui-selected\:text-blue-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.ui-selected\:text-blue-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.ui-selected\:text-blue-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.ui-selected\:text-blue-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.ui-selected\:text-blue-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.ui-selected\:text-blue-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.ui-selected\:text-blue-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.ui-selected\:text-blue-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.ui-selected\:text-blue-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.ui-selected\:text-cyan-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.ui-selected\:text-cyan-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.ui-selected\:text-cyan-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.ui-selected\:text-cyan-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.ui-selected\:text-cyan-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.ui-selected\:text-cyan-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.ui-selected\:text-cyan-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.ui-selected\:text-cyan-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.ui-selected\:text-cyan-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.ui-selected\:text-cyan-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.ui-selected\:text-cyan-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-emerald-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.ui-selected\:text-emerald-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.ui-selected\:text-emerald-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.ui-selected\:text-emerald-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.ui-selected\:text-emerald-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.ui-selected\:text-emerald-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.ui-selected\:text-emerald-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.ui-selected\:text-emerald-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.ui-selected\:text-emerald-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.ui-selected\:text-emerald-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.ui-selected\:text-emerald-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.ui-selected\:text-gray-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.ui-selected\:text-gray-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.ui-selected\:text-gray-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.ui-selected\:text-gray-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.ui-selected\:text-gray-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.ui-selected\:text-gray-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.ui-selected\:text-gray-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.ui-selected\:text-gray-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-gray-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.ui-selected\:text-gray-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-gray-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.ui-selected\:text-green-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.ui-selected\:text-green-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.ui-selected\:text-green-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.ui-selected\:text-green-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.ui-selected\:text-green-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.ui-selected\:text-green-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.ui-selected\:text-green-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.ui-selected\:text-green-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.ui-selected\:text-green-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.ui-selected\:text-green-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.ui-selected\:text-green-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.ui-selected\:text-indigo-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.ui-selected\:text-indigo-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.ui-selected\:text-indigo-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.ui-selected\:text-indigo-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-indigo-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.ui-selected\:text-indigo-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.ui-selected\:text-indigo-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.ui-selected\:text-indigo-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.ui-selected\:text-indigo-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.ui-selected\:text-lime-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.ui-selected\:text-lime-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.ui-selected\:text-lime-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.ui-selected\:text-lime-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.ui-selected\:text-lime-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.ui-selected\:text-lime-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.ui-selected\:text-lime-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.ui-selected\:text-lime-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.ui-selected\:text-lime-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.ui-selected\:text-lime-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.ui-selected\:text-lime-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.ui-selected\:text-neutral-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.ui-selected\:text-neutral-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.ui-selected\:text-neutral-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.ui-selected\:text-neutral-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.ui-selected\:text-neutral-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-neutral-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.ui-selected\:text-neutral-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.ui-selected\:text-neutral-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.ui-selected\:text-neutral-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.ui-selected\:text-neutral-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.ui-selected\:text-neutral-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.ui-selected\:text-orange-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.ui-selected\:text-orange-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.ui-selected\:text-orange-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.ui-selected\:text-orange-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.ui-selected\:text-orange-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.ui-selected\:text-orange-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.ui-selected\:text-orange-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.ui-selected\:text-orange-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.ui-selected\:text-orange-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.ui-selected\:text-orange-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.ui-selected\:text-orange-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.ui-selected\:text-pink-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.ui-selected\:text-pink-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.ui-selected\:text-pink-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.ui-selected\:text-pink-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.ui-selected\:text-pink-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.ui-selected\:text-pink-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.ui-selected\:text-pink-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.ui-selected\:text-pink-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.ui-selected\:text-pink-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.ui-selected\:text-pink-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.ui-selected\:text-pink-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.ui-selected\:text-purple-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.ui-selected\:text-purple-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.ui-selected\:text-purple-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.ui-selected\:text-purple-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.ui-selected\:text-purple-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.ui-selected\:text-purple-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.ui-selected\:text-purple-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.ui-selected\:text-purple-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.ui-selected\:text-purple-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.ui-selected\:text-purple-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.ui-selected\:text-purple-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.ui-selected\:text-red-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.ui-selected\:text-red-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.ui-selected\:text-red-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.ui-selected\:text-red-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.ui-selected\:text-red-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.ui-selected\:text-red-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.ui-selected\:text-red-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.ui-selected\:text-red-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.ui-selected\:text-red-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.ui-selected\:text-red-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.ui-selected\:text-red-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.ui-selected\:text-rose-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.ui-selected\:text-rose-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.ui-selected\:text-rose-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.ui-selected\:text-rose-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.ui-selected\:text-rose-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.ui-selected\:text-rose-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.ui-selected\:text-rose-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.ui-selected\:text-rose-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.ui-selected\:text-rose-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.ui-selected\:text-rose-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.ui-selected\:text-rose-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.ui-selected\:text-sky-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.ui-selected\:text-sky-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.ui-selected\:text-sky-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.ui-selected\:text-sky-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.ui-selected\:text-sky-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.ui-selected\:text-sky-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.ui-selected\:text-sky-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.ui-selected\:text-sky-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.ui-selected\:text-sky-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.ui-selected\:text-sky-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.ui-selected\:text-sky-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.ui-selected\:text-slate-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.ui-selected\:text-slate-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.ui-selected\:text-slate-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.ui-selected\:text-slate-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.ui-selected\:text-slate-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.ui-selected\:text-slate-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.ui-selected\:text-slate-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.ui-selected\:text-slate-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.ui-selected\:text-slate-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.ui-selected\:text-slate-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.ui-selected\:text-slate-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.ui-selected\:text-stone-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.ui-selected\:text-stone-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.ui-selected\:text-stone-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.ui-selected\:text-stone-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.ui-selected\:text-stone-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.ui-selected\:text-stone-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.ui-selected\:text-stone-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.ui-selected\:text-stone-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.ui-selected\:text-stone-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.ui-selected\:text-stone-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.ui-selected\:text-stone-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.ui-selected\:text-teal-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.ui-selected\:text-teal-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.ui-selected\:text-teal-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.ui-selected\:text-teal-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.ui-selected\:text-teal-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.ui-selected\:text-teal-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.ui-selected\:text-teal-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.ui-selected\:text-teal-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.ui-selected\:text-teal-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.ui-selected\:text-teal-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.ui-selected\:text-teal-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.ui-selected\:text-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-emphasis[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-strong[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-violet-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.ui-selected\:text-violet-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.ui-selected\:text-violet-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.ui-selected\:text-violet-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.ui-selected\:text-violet-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.ui-selected\:text-violet-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.ui-selected\:text-violet-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.ui-selected\:text-violet-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.ui-selected\:text-violet-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.ui-selected\:text-violet-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.ui-selected\:text-violet-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.ui-selected\:text-yellow-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.ui-selected\:text-yellow-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.ui-selected\:text-yellow-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.ui-selected\:text-yellow-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.ui-selected\:text-yellow-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.ui-selected\:text-yellow-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.ui-selected\:text-yellow-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.ui-selected\:text-yellow-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.ui-selected\:text-yellow-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.ui-selected\:text-yellow-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.ui-selected\:text-yellow-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.ui-selected\:text-zinc-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.ui-selected\:text-zinc-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.ui-selected\:text-zinc-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.ui-selected\:text-zinc-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.ui-selected\:text-zinc-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-zinc-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.ui-selected\:text-zinc-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.ui-selected\:text-zinc-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.ui-selected\:text-zinc-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.ui-selected\:text-zinc-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.ui-selected\:text-zinc-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.ui-selected\:shadow-tremor-input[data-headlessui-state~=selected]{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:where([data-headlessui-state~=selected]) .ui-selected\:border-b-2{border-bottom-width:2px}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ui-active\:bg-tremor-background-muted[data-headlessui-state~=active]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-active\:text-tremor-content-strong[data-headlessui-state~=active]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=active]) .ui-active\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=active]) .ui-active\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:is(.dark .dark\:divide-dark-tremor-border)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(55 65 81/var(--tw-divide-opacity))}:is(.dark .dark\:border-dark-tremor-background){--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-emphasis){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-inverted){--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-subtle){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-emphasis){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-subtle){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-border){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted){--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted\/70){background-color:rgba(30,27,75,.7)}:is(.dark .dark\:bg-dark-tremor-brand-subtle){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content-subtle){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-10){--tw-bg-opacity:0.1}:is(.dark .dark\:bg-opacity-25){--tw-bg-opacity:0.25}:is(.dark .dark\:bg-opacity-30){--tw-bg-opacity:0.3}:is(.dark .dark\:fill-dark-tremor-content){fill:#6b7280}:is(.dark .dark\:fill-dark-tremor-content-emphasis){fill:#e5e7eb}:is(.dark .dark\:stroke-dark-tremor-background){stroke:#111827}:is(.dark .dark\:stroke-dark-tremor-border){stroke:#374151}:is(.dark .dark\:stroke-dark-tremor-brand){stroke:#6366f1}:is(.dark .dark\:stroke-dark-tremor-brand-muted){stroke:#1e1b4b}:is(.dark .dark\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-emphasis){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-inverted){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-subtle){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:accent-dark-tremor-brand){accent-color:#6366f1}:is(.dark .dark\:opacity-25){opacity:.25}:is(.dark .dark\:shadow-dark-tremor-card){--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-dropdown){--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:outline-dark-tremor-brand){outline-color:#6366f1}:is(.dark .dark\:ring-dark-tremor-brand-inverted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-brand-muted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-ring){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-brand-emphasis:hover){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-content-emphasis:hover){--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-muted:hover){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-subtle:hover){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-emphasis:hover){--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-faint:hover){--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-opacity-20:hover){--tw-bg-opacity:0.2}:is(.dark .dark\:hover\:text-dark-tremor-brand-emphasis:hover){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:is(.dark .hover\:dark\:text-dark-tremor-content):hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:focus\:border-dark-tremor-brand-subtle:focus){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .focus\:dark\:border-dark-tremor-brand-subtle):focus{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:focus\:ring-dark-tremor-brand-muted:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .focus\:dark\:ring-dark-tremor-brand-muted):focus{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .aria-selected\:dark\:\!bg-dark-tremor-background-subtle)[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(31 41 55/var(--tw-bg-opacity))!important}:is(.dark .dark\:aria-selected\:bg-dark-tremor-background-emphasis[aria-selected=true]){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-content-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-border[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-brand[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background-muted[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-emphasis[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-strong[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:shadow-dark-tremor-input[data-headlessui-state~=selected]){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:ui-active\:bg-dark-tremor-background-muted[data-headlessui-state~=active]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-active\:text-dark-tremor-content-strong[data-headlessui-state~=active]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}@media (min-width:640px){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:h-screen{height:100vh}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-lg{max-width:32rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-start{align-items:flex-start}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}}@media (min-width:768px){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}}@media (min-width:1024px){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:max-w-\[200px\]{max-width:200px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button,.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none} \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_buildManifest.js b/litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_buildManifest.js rename to litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_ssgManifest.js b/litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_ssgManifest.js rename to litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js diff --git a/litellm/proxy/_experimental/out/index.html b/litellm/proxy/_experimental/out/index.html index db642e8cb95..930018e0059 100644 --- a/litellm/proxy/_experimental/out/index.html +++ b/litellm/proxy/_experimental/out/index.html @@ -1 +1 @@ -LiteLLM Dashboard \ No newline at end of file +LiteLLM Dashboard \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/index.txt b/litellm/proxy/_experimental/out/index.txt index f12af0b3b5b..d67a480b373 100644 --- a/litellm/proxy/_experimental/out/index.txt +++ b/litellm/proxy/_experimental/out/index.txt @@ -1,7 +1,7 @@ 2:I[77831,[],""] -3:I[7926,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-de58db2e54247c7a.js"],""] +3:I[7926,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-6a39771cacf75ea6.js"],""] 4:I[5613,[],""] 5:I[31778,[],""] -0:["6ZCXBZB2XEIoV3uj74ZuB",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/8c755b71ba117fd6.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] +0:["obp5wqVSVDMiDTC414cR8",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/f04e46b02318b660.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] 6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"LiteLLM Dashboard"}],["$","meta","3",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","4",{"rel":"icon","href":"/ui/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","meta","5",{"name":"next-size-adjust"}]] 1:null diff --git a/ui/litellm-dashboard/out/404.html b/ui/litellm-dashboard/out/404.html index 929a28f6670..b70559084d4 100644 --- a/ui/litellm-dashboard/out/404.html +++ b/ui/litellm-dashboard/out/404.html @@ -1 +1 @@ -404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/app/layout-8181e99a391baed0.js b/ui/litellm-dashboard/out/_next/static/chunks/app/layout-8181e99a391baed0.js deleted file mode 100644 index 6c12a4b6647..00000000000 --- a/ui/litellm-dashboard/out/_next/static/chunks/app/layout-8181e99a391baed0.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{13993:function(n,e,t){Promise.resolve().then(t.t.bind(t,63385,23)),Promise.resolve().then(t.t.bind(t,99646,23))},63385:function(){},99646:function(n){n.exports={style:{fontFamily:"'__Inter_c23dc8', '__Inter_Fallback_c23dc8'",fontStyle:"normal"},className:"__className_c23dc8"}}},function(n){n.O(0,[971,69,744],function(){return n(n.s=13993)}),_N_E=n.O()}]); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/app/layout-a756276e228ca058.js b/ui/litellm-dashboard/out/_next/static/chunks/app/layout-a756276e228ca058.js new file mode 100644 index 00000000000..e261adc0520 --- /dev/null +++ b/ui/litellm-dashboard/out/_next/static/chunks/app/layout-a756276e228ca058.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{87421:function(n,e,t){Promise.resolve().then(t.t.bind(t,99646,23)),Promise.resolve().then(t.t.bind(t,63385,23))},63385:function(){},99646:function(n){n.exports={style:{fontFamily:"'__Inter_c23dc8', '__Inter_Fallback_c23dc8'",fontStyle:"normal"},className:"__className_c23dc8"}}},function(n){n.O(0,[971,69,744],function(){return n(n.s=87421)}),_N_E=n.O()}]); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js b/ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js new file mode 100644 index 00000000000..7d08a80c96f --- /dev/null +++ b/ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,7926))},7926:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lb}});var s,a,r=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:a}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",a);let n=[{key:"1",label:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{children:["Role: ",t]}),(0,r.jsxs)("p",{children:["ID: ",l]})]})}];return(0,r.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,r.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,r.jsx)("div",{className:"flex flex-col items-center",children:(0,r.jsx)(i.default,{href:"/",children:(0,r.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,r.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,r.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[a?(0,r.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,r.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,r.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,r.jsx)(c.Z,{menu:{items:n},children:(0,r.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&r&&null!=a&&void 0!=a&&(n="".concat(n,"?view_all=true&page=").concat(a,"&page_size=").concat(r));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,a,r)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l,t)=>{try{let s="/global/spend/tags";l&&t&&(s="".concat(s,"?start_date=").concat(l,"&end_date=").concat(t)),console.log("in tagsSpendLogsCall:",s);let a=await fetch("".concat(s),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,a,r)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(a,"&end_date=").concat(r):"".concat(l,"?start_date=").concat(a,"&end_date=").concat(r);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let a="";a=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let r={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};r.body=a;let n=await fetch("/global/spend/end_users",r);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let a=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!a.ok){let e=await a.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let a=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),a}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},G=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var Y=t(10384),W=t(46453),J=t(16450),H=t(52273),$=t(26780),X=t(15595),Q=t(6698),ee=t(71801),el=t(42440),et=t(42308),es=t(50670),ea=t(81583),er=t(99129),en=t(44839),eo=t(88707),ei=t(1861);let{Option:ec}=es.default;var ed=e=>{let{userID:l,team:t,userRole:s,accessToken:a,data:o,setData:i}=e,[c]=ea.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,f]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==a){let e=(await N(a,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),f(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,s]);let k=async e=>{try{var t,s,r;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(r=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==r?r:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(a,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?y:t.models:y)},[t,y]),(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,r.jsx)(er.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,r.jsxs)(ea.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,r.jsx)(ec,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,r.jsx)(ec,{value:e,children:e},e))]})}),(0,r.jsxs)($.Z,{className:"mt-20 mb-8",children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)("b",{children:"Optional Settings"})}),(0,r.jsxs)(X.Z,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,r.jsxs)(es.default,{defaultValue:null,placeholder:"n/a",children:[(0,r.jsx)(es.default.Option,{value:"24h",children:"daily"}),(0,r.jsx)(es.default.Option,{value:"30d",children:"monthly"})]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,r.jsx)(er.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Save your Key"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,r.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:null!=h?(0,r.jsxs)("div",{children:[(0,r.jsx)(ee.Z,{className:"mt-3",children:"API Key:"}),(0,r.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,r.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,r.jsx)(et.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,r.jsx)(J.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,r.jsx)(ee.Z,{children:"Key being created, this might take 30s"})})]})})]})},em=t(9454),eu=t(98941),eh=t(33393),ex=t(5),ep=t(13810),ej=t(61244),eg=t(10827),ey=t(3851),ef=t(2044),eZ=t(64167),e_=t(74480),ew=t(7178),eb=t(95093),ek=t(27166);let{Option:ev}=es.default;var eS=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:a,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,r.jsxs)("div",{children:[(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,r.jsxs)(eg.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Key Alias"}),(0,r.jsx)(e_.Z,{children:"Secret Key"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"})]})}),(0,r.jsx)(ey.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(a){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(a.team_id)),(null!=a.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=a.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,r.jsx)(ee.Z,{children:e.key_alias}):(0,r.jsx)(ee.Z,{children:"Not Set"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.key_name})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,r.jsx)(ef.Z,{children:null!=e.max_budget?(0,r.jsx)(ee.Z,{children:e.max_budget}):(0,r.jsx)(ee.Z,{children:"Unlimited"})}),(0,r.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(r.Fragment,{children:a&&a.models&&a.models.length>0?a.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{onClick:()=>{I(e),A(!0)},icon:em.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:S,onCancel:()=>{A(!1),I(null)},footer:null,width:800,children:E&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,r.jsx)(r.Fragment,{children:E.max_budget}):(0,r.jsx)(r.Fragment,{children:"Unlimited"})})})]},e.name),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,r.jsx)(r.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,r.jsx)(r.Fragment,{children:"Never"})})})]},e.name)]}),(0,r.jsxs)(ep.Z,{className:"my-4",children:[(0,r.jsx)(el.Z,{children:"Token Name"}),(0,r.jsx)(ee.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,r.jsx)(el.Z,{children:"Token ID"}),(0,r.jsx)(ee.Z,{className:"my-1 text-[12px]",children:E.token}),(0,r.jsx)(el.Z,{children:"Metadata"}),(0,r.jsx)(ee.Z,{className:"my-1",children:(0,r.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,r.jsx)(J.Z,{className:"mx-auto flex items-center",onClick:()=>{A(!1),I(null)},children:"Close"})]})}),(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>R(e)}),(0,r.jsx)(ej.Z,{onClick:()=>U(e),icon:eh.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=ea.Z.useForm(),[d,m]=(0,n.useState)(a),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,r.jsx)(er.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(ev,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):d.models.map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):C.map(e=>(0,r.jsx)(ev,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"token",name:"token",hidden:!0}),(0,r.jsx)(ea.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,r.jsx)(eb.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,r.jsx)(ek.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eN=t(76032),eA=t(35152),eE=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:a,selectedTeam:o}=e;console.log("userSpend: ".concat(a));let[i,c]=(0,n.useState)(null!==a?a:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==a)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==a&&c(a)},[a]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,r.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,r.jsx)("div",{className:"ml-auto",children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Team Models"})}),(0,r.jsx)(X.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,r.jsx)(eN.Z,{children:x.map(e=>(0,r.jsx)(eA.Z,{children:(0,r.jsx)(ee.Z,{children:e})},e))})})]})})]})},eI=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:a}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==a){let e=(await N(a,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"mb-5",children:(0,r.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eC=e=>{let l,{teams:t,setSelectedTeam:s,userRole:a}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===a?t:t?[...t,o]:[o],"App User"===a)?null:(0,r.jsxs)("div",{className:"mt-5 mb-5",children:[(0,r.jsx)(el.Z,{children:"Select Team"}),(0,r.jsx)(ee.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,r.jsxs)(ee.Z,{className:"mt-3 mb-3",children:[(0,r.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,r.jsxs)(ee.Z,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]})},eP=t(37963),eT=t(36083);console.log("isLocal:",!1);var eO=e=>{let{userID:l,userRole:t,teams:s,keys:a,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[f,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,A]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eP.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!a&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),A(s[0])):A(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let a=(await N(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",a),k(a),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(a))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,a,t]),(0,n.useEffect)(()=>{if(null!==a&&null!=S){let e=0;for(let l of a)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==a){let e=0;for(let l of a)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(f)),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsx)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(eI,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,r.jsx)(eE,{userID:l,userRole:t,accessToken:g,userSpend:f,selectedTeam:S||null}),(0,r.jsx)(eS,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:a,setData:u,teams:s}),(0,r.jsx)(ed,{userID:l,team:S||null,userRole:t,accessToken:g,data:a,setData:u},S?S.team_id:null),(0,r.jsx)(eC,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eF=t(35087),eR=t(92836),eM=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),eK=t(47047),eB=t(76628),ez=t(57750),eq=t(44041),eV=t(38302),eG=t(28683),eY=t(1460),eW=t(78578),eJ=t(63954),eH=t(90252),e$=t(7905),eX=e=>{let{modelID:l,accessToken:t}=e,[s,a]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),a(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),a(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(ej.Z,{onClick:()=>a(!0),icon:eh.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>a(!1),children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Delete Model"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Model ID: ",(0,r.jsx)("b",{children:l})]})})]})})]})},eQ=t(97766),e0=t(46495);let{Title:e1,Link:e2}=eT.default;(s=a||(a={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e4={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e8={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e5=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},a={};s.model=t;let r="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)r+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)a[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:r,litellm_params:s,model_info:a},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e3=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=ea.Z.useForm(),[y,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,N]=(0,n.useState)([]),A=Object.values(a).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[Y,et]=(0,n.useState)([]),[es,en]=(0,n.useState)([]),[ec,ed]=(0,n.useState)([]),[em,eh]=(0,n.useState)([]),[ev,eS]=(0,n.useState)([]),[eN,eA]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eO,e3]=(0,n.useState)(0),e6=e=>{R(e),O(!0)},e7=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,a]of Object.entries(e))"model_id"!==s?l[s]=a:t=a;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await V(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,a,r;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),et(h.data),en(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),ed(p.data),eh(p.exception_types);let j=await v(o,d,c,u,null===(a=eE.from)||void 0===a?void 0:a.toISOString(),null===(r=eE.to)||void 0===r?void 0:r.toISOString());console.log("slowResponses:",j),eA(j);let g=(await q(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let y=g.model_group_retry_policy,f=g.num_retries;console.log("model_group_retry_policy:",y),console.log("default_retries:",f),eP(y),e3(f)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==y&&l(),e9()},[o,i,c,d,y,Z]),!m||!o||!i||!c||!d)return(0,r.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(y)),null!=y&&"object"==typeof y&&e in y)?y[e].litellm_provider:"openai";if(a){let e=a.split("/"),l=e[0];n=1===e.length?u(a):l}else n="openai";r&&(o=null==r?void 0:r.input_cost_per_token,i=null==r?void 0:r.output_cost_per_token,c=null==r?void 0:r.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(a).find(l=>a[l]===e);if(l){let e=e4[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof y&&Object.entries(y).forEach(l=>{let[s,a]=l;null!==a&&"object"==typeof a&&"litellm_provider"in a&&(a.litellm_provider===e||a.litellm_provider.includes(e))&&t.push(s)}),N(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await G(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},la=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),et(s.data),en(s.all_api_bases);let a=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",a),ed(a.data),eh(a.exception_types);let r=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",r),eA(r)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,r.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(eR.Z,{children:"All Models"}),(0,r.jsx)(eR.Z,{children:"Add Model"}),(0,r.jsx)(eR.Z,{children:(0,r.jsx)("pre",{children:"/health Models"})}),(0,r.jsx)(eR.Z,{children:"Model Analytics"}),(0,r.jsx)(eR.Z,{children:"Model Retry Settings"})]}),(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,r.jsxs)(ee.Z,{children:["Last Refreshed: ",Z]}),(0,r.jsx)(ej.Z,{icon:eJ.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsxs)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,r.jsx)(ek.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Public Model Name "}),(0,r.jsx)(e_.Z,{children:"Provider"}),"Admin"===c&&(0,r.jsx)(e_.Z,{children:"API Base"}),(0,r.jsx)(e_.Z,{children:"Extra litellm Params"}),(0,r.jsx)(e_.Z,{children:"Input Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Output Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Max Tokens"}),(0,r.jsx)(e_.Z,{children:"Status"})]})}),(0,r.jsx)(ey.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.model_name})}),(0,r.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Litellm params"})}),(0,r.jsx)(X.Z,{children:(0,r.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,r.jsx)(ef.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.max_tokens}),(0,r.jsx)(ef.Z,{children:e.model_info.db_model?(0,r.jsx)(ex.Z,{icon:eH.Z,className:"text-white",children:"DB Model"}):(0,r.jsx)(ex.Z,{icon:e$.Z,className:"text-black",children:"Config Model"})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>e6(e)}),(0,r.jsx)(eX,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,r.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:a}=e,[n]=ea.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,r.jsx)(er.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:e7,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"max_retries",name:"max_retries",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:e7})]}),(0,r.jsxs)(eU.Z,{className:"h-full",children:[(0,r.jsx)(e1,{level:2,children:"Add new model"}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(ea.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e5(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:E.toString(),children:A.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,r.jsx)(H.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,r.jsx)(H.Z,{placeholder:"Enter model name"}):w.length>0?(0,r.jsx)(eK.Z,{value:w,children:w.map((e,l)=>(0,r.jsx)(eB.Z,{value:e,children:e},l))}):(0,r.jsx)(H.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,r.jsx)(H.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,r.jsx)(ea.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,r.jsx)(H.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,r.jsx)(H.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,r.jsx)(e0.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,r.jsx)(ei.ZP,{icon:(0,r.jsx)(eQ.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,r.jsx)(H.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,r.jsx)(H.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,r.jsxs)(ea.Z.Item,{label:"Base Model",name:"base_model",children:[(0,r.jsx)(H.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,r.jsxs)(ee.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,r.jsx)(e2,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),(0,r.jsx)(ea.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,r.jsx)(eW.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,r.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Model"})}),(0,r.jsx)(eY.Z,{title:"Get help on our github",children:(0,r.jsx)(eT.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(ee.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,r.jsx)(J.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,r.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{numItems:2,className:"mt-2",children:[(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),la(U,e.from,e.to)}})]}),(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Model Group"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>la(e,eE.from,eE.to),children:e},l))})]})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsx)(eG.Z,{children:(0,r.jsxs)(ep.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,r.jsx)(el.Z,{children:"Avg Latency per Token"}),(0,r.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,r.jsx)(ee.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),Y&&es&&(0,r.jsx)(ez.Z,{title:"Model Latency",className:"h-72",data:Y,showLegend:!1,index:"date",categories:es,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:a}=e;if(!a||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,r.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,r.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,r.jsxs)("div",{className:"flex justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,r.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,r.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,r.jsx)(eG.Z,{children:(0,r.jsx)(ep.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Deployment"}),(0,r.jsx)(e_.Z,{children:"Success Responses"}),(0,r.jsxs)(e_.Z,{children:["Slow Responses ",(0,r.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,r.jsx)(ey.Z,{children:eN.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:e.total_count}),(0,r.jsx)(ef.Z,{children:e.slow_count})]},l))})]})})})]}),(0,r.jsxs)(ep.Z,{className:"mt-4",children:[(0,r.jsx)(el.Z,{children:"Exceptions per Model"}),(0,r.jsx)(eq.Z,{className:"h-72",data:ec,index:"model",categories:em,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,r.jsxs)(el.Z,{children:["Retry Policy for ",U]}),(0,r.jsx)(ee.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e8&&(0,r.jsx)("table",{children:(0,r.jsx)("tbody",{children:Object.entries(e8).map((e,l)=>{var t;let[s,a]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[a];return null==n&&(n=eO),(0,r.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,r.jsx)("td",{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)("td",{children:(0,r.jsx)(eo.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[a]:e}}})}})})]},l)})})}),(0,r.jsx)(J.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:e6}=es.default;var e7=e=>{let{userID:l,accessToken:t,teams:s}=e,[a]=ea.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await N(t,l,"any"),s=[];for(let l=0;l{i(!1),a.resetFields()},p=()=>{i(!1),d(null),a.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),a.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,r.jsxs)(er.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,r.jsx)(ee.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,r.jsx)(ee.Z,{className:"mb-6",children:(0,r.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,r.jsxs)(ea.Z,{form:a,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsx)(ea.Z.Item,{label:"User Email",name:"user_email",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",children:(0,r.jsx)(es.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,r.jsx)(e6,{value:e.team_id,children:e.team_alias},e.team_id)):(0,r.jsx)(e6,{value:null,children:"Default Team"},"default")})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,r.jsxs)(er.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,r.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,r.jsx)("br",{}),(0,r.jsx)("p",{children:(0,r.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e9=e=>{let{accessToken:l,token:t,keys:s,userRole:a,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,f]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!a||!o)return;let e=async()=>{try{let e=await Z(l,null,a,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&a&&o&&e()},[l,t,a,o,x]),d&&l&&t&&a&&o)?(0,r.jsx)("div",{style:{width:"100%"},children:(0,r.jsxs)(W.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,r.jsx)(e7,{userID:o,accessToken:l,teams:i}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,r.jsx)("div",{className:"mb-4 mt-1",children:(0,r.jsx)(ee.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,r.jsx)(eM.Z,{children:(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"User ID"}),(0,r.jsx)(e_.Z,{children:"User Email"}),(0,r.jsx)(e_.Z,{children:"User Models"}),(0,r.jsx)(e_.Z,{children:"User Spend ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User Max Budget ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User API Key Aliases"})]})}),(0,r.jsx)(ey.Z,{children:d.map(e=>{var l;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_id}),(0,r.jsx)(ef.Z,{children:e.user_email}),(0,r.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,r.jsx)(ef.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,r.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(W.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,r.jsx)(ex.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,r.jsx)(ex.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,r.jsxs)("div",{className:"flex justify-between items-center",children:[(0,r.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,r.jsx)("div",{children:"Loading..."})},le=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:a,userID:o,userRole:i}=e,[c]=ea.Z.useForm(),[d]=ea.Z.useForm(),{Title:m,Paragraph:h}=eT.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let r=await U(s,e);l&&a(l.map(e=>e.team_id===t?r.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await f(s,C);let e=l.filter(e=>e.team_id!==C);a(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let a=l[t].team_id,r=await _(s,a);console.log("teamInfo response:",r),null!==r&&(e={...e,[a]:r})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await N(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let r=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(r))throw Error("Team alias ".concat(r," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?a([...l,n]):a([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},r=await K(s,y.team_id,t);console.log("response for team create call: ".concat(r.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(r.data.team_id)),e.team_id===r.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=r.data,a(e),Z(r.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"All Teams"}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Team Name"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"}),(0,r.jsx)(e_.Z,{children:"Info"})]})}),(0,r.jsx)(ey.Z,{children:l&&l.length>0?l.map(e=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,r.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>F(e)}),(0,r.jsx)(ej.Z,{onClick:()=>L(e.team_id),icon:eh.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,r.jsx)(er.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"Team Members"}),(0,r.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,r.jsxs)(h,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:y?y.members_with_roles.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:a}=e,[n]=ea.Z.useForm();return(0,r.jsx)(er.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:y,onSubmit:R})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,r.jsx)(er.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},ll=t(18190),lt=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:a}=e,[o]=ea.Z.useForm(),[i]=ea.Z.useForm(),{Title:c,Paragraph:d}=eT.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},N=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let A=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:l,children:N.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t,disabled:!0})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),f(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,r.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,r.jsx)(c,{level:4,children:"Admin Access "}),(0,r.jsxs)(d,{children:[a&&(0,r.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:x?x.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.user_role}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>_(!0)}),(0,r.jsx)(er.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:A,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("div",{className:"flex justify-start",children:[(0,r.jsx)(J.Z,{className:"mr-4 mb-5",onClick:()=>f(!0),children:"+ Add admin"}),(0,r.jsx)(er.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{f(!1),i.resetFields()},onCancel:()=>{f(!1),i.resetFields()},children:I(O)}),(0,r.jsx)(J.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,r.jsx)(er.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,r.jsxs)(W.Z,{children:[(0,r.jsx)(c,{level:4,children:"Add SSO"}),(0,r.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,r.jsx)(J.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,r.jsx)(er.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,r.jsx)(en.Z.Password,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,r.jsx)(en.Z.Password,{})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,r.jsxs)(er.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,r.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{onClick:S,children:"Done"})})]})]}),(0,r.jsxs)(ll.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,r.jsxs)("a",{href:l,target:"_blank",children:[(0,r.jsx)("b",{children:l})," "]})]})]})]})},ls=t(42556);let la=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var lr=e=>{let{accessToken:l,userRole:t,userID:s}=e,[a,o]=(0,n.useState)(la),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=ea.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[y,f]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e);let l=la;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),f(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),N=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{V(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},A=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),V(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(a?[...a,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(a)),(0,r.jsxs)("div",{className:"w-full mx-4",children:[(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(ll.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"Logging Callbacks"}),(0,r.jsx)(eR.Z,{value:"2",children:"Alerting"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Callback"}),(0,r.jsx)(e_.Z,{children:"Callback Env Vars"})]})}),(0,r.jsx)(ey.Z,{children:a.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ex.Z,{color:"emerald",children:e.name})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,r.jsxs)("li",{children:[(0,r.jsx)(ee.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,r.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,r.jsx)("div",{}),(0,r.jsx)(H.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>N(e),children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(ee.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,r.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{children:"Slack Webhook URL"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ls.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:y})})]},l)})})]}),(0,r.jsx)(J.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,a=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",a);let r=(null==a?void 0:a.value)||"";console.log("newWebhookValue",r),e[t]=r}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{V(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,r.jsx)(er.Z,{title:"Add Callback",visible:d,onOk:A,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,r.jsxs)(ea.Z,{form:h,layout:"vertical",onFinish:A,children:[(0,r.jsx)(ea.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,r.jsxs)(es.default,{onChange:e=>{p(e)},children:[(0,r.jsx)(es.default.Option,{value:"langfuse",children:"langfuse"}),(0,r.jsx)(es.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,r.jsx)(H.Z,{type:"password"})}),(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,r.jsx)(H.Z,{type:"password"})})]}),"openmeter"==x&&(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(ea.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,r.jsx)(H.Z,{type:"password"})})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:ln}=es.default;var lo=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:a}=e,[o]=ea.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,r.jsx)(er.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:r}=e,n=[...s.fallbacks||[],{[l]:r}],i={...s,fallbacks:n};console.log(i);try{V(t,{router_settings:i}),a(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,r.jsx)(eb.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsx)(eK.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,r.jsx)(eB.Z,{value:e,children:e},e))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},li=t(12968);async function lc(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new li.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,r.jsxs)("span",{children:["Test model=",(0,r.jsx)("strong",{children:e}),", received model=",(0,r.jsx)("strong",{children:l.model}),". See ",(0,r.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let ld={ttl:3600,lowest_latency_buffer:0},lm=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,r.jsx)(X.Z,{children:"latency-based-routing"==l?(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,r.jsx)(ee.Z,{children:"No specific settings"})})]})};var lu=e=>{let{accessToken:l,userRole:t,userID:s,modelData:a}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)(!1),[m]=ea.Z.useForm(),[h,x]=(0,n.useState)(null),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),f={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)})},[l,t,s]);let Z=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await V(l,{router_settings:o}),i({...o}),j(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},_=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,p];if("routing_strategy_args"==l&&"latency-based-routing"==p){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"General Settings"}),(0,r.jsx)(eR.Z,{value:"2",children:"Fallbacks"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(el.Z,{children:"Router Settings"}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:f[l]})]}),(0,r.jsx)(ef.Z,{children:"routing_strategy"==l?(0,r.jsxs)(eb.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:j,children:[(0,r.jsx)(ek.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,r.jsx)(ek.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,r.jsx)(ek.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,r.jsx)(lm,{selectedStrategy:p,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:ld,paramExplanation:f})]}),(0,r.jsx)(Y.Z,{children:(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>_(o),children:"Save Changes"})})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Model Name"}),(0,r.jsx)(e_.Z,{children:"Fallbacks"})]})}),(0,r.jsx)(ey.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,a]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:s}),(0,r.jsx)(ef.Z,{children:Array.isArray(a)?a.join(", "):a}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(J.Z,{onClick:()=>lc(s,l),children:"Test Fallback"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ej.Z,{icon:eh.Z,size:"sm",onClick:()=>Z(s)})})]},t.toString()+s)}))})]}),(0,r.jsx)(lo,{models:(null==a?void 0:a.data)?a.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]})]})]})}):null},lh=t(67951),lx=e=>{let{}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsxs)("div",{className:"mb-5",children:[(0,r.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,r.jsx)(ee.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{children:[(0,r.jsx)(eR.Z,{children:"OpenAI Python SDK"}),(0,r.jsx)(eR.Z,{children:"LlamaIndex"}),(0,r.jsx)(eR.Z,{children:"Langchain Py"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lp(e,l,t,s){console.log("isLocal:",!1);let a=window.location.origin,r=new li.ZP.OpenAI({apiKey:s,baseURL:a,dangerouslyAllowBrowser:!0});try{for await(let s of(await r.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var lj=e=>{let{accessToken:l,token:t,userRole:s,userID:a}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{let e=await N(l,a,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,a,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&a){u(e=>[...e,{role:"user",content:c}]);try{h&&await lp(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,r.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eM.Z,{children:[(0,r.jsx)(eL.Z,{children:(0,r.jsx)(eR.Z,{children:"Chat"})}),(0,r.jsx)(eD.Z,{children:(0,r.jsxs)(eU.Z,{children:[(0,r.jsx)("div",{className:"sm:max-w-2xl",children:(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"API Key"}),(0,r.jsx)(H.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,r.jsxs)(Y.Z,{className:"mx-2",children:[(0,r.jsx)(ee.Z,{children:"Select Model:"}),(0,r.jsx)(es.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,r.jsxs)(eg.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{})})}),(0,r.jsx)(ey.Z,{children:m.map((e,l)=>(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,r.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(H.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,r.jsx)(J.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},lg=t(33509),ly=t(95781);let{Sider:lf}=lg.default;var lZ=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,r.jsx)(lf,{width:120,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,r.jsx)(lf,{width:145,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:(0,r.jsx)(ee.Z,{children:"API Keys"})},"1"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:(0,r.jsx)(ee.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:(0,r.jsx)(ee.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:(0,r.jsx)(ee.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("teams"),children:(0,r.jsx)(ee.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("users"),children:(0,r.jsx)(ee.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("settings"),children:(0,r.jsx)(ee.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("general-settings"),children:(0,r.jsx)(ee.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("admin-panel"),children:(0,r.jsx)(ee.Z,{children:"Admin"})},"7"):null,(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api_ref"),children:(0,r.jsx)(ee.Z,{children:"API Reference"})},"11")]})})})},l_=t(67989),lw=e=>{let{accessToken:l,token:t,userRole:s,userID:a,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,y]=(0,n.useState)([]),[f,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[N,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=z(M),D=z(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let a=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",a),j(a)},B=async(e,t)=>{e&&t&&l&&(Z((await E(l,e.toISOString(),t.toISOString())).spend_per_tag),console.log("Tag spend data updated successfully"))};function z(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){var e,r;let t=await C(l);d(t);let s=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(s);let a=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(a);let n=await A(l);console.log("teamSpend",n),y(n.daily_spend),w(n.teams);let o=n.total_spend_per_team;o=o.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(o);let i=await E(l,null===(e=N.from)||void 0===e?void 0:e.toISOString(),null===(r=N.to)||void 0===r?void 0:r.toISOString());Z(i.spend_per_tag);let c=await T(l,null,void 0,void 0);j(c),console.log("spend/user result",c)}else"App Owner"==s&&await I(l,t,s,a,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,a,U,D]),(0,r.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,r.jsx)(eE,{userID:a,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{className:"mt-2",children:[(0,r.jsx)(eR.Z,{children:"All Up"}),(0,r.jsx)(eR.Z,{children:"Team Based Usage"}),(0,r.jsx)(eR.Z,{children:"End User Usage"}),(0,r.jsx)(eR.Z,{children:"Tag Based Usage"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:2,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Monthly Spend"}),(0,r.jsx)(eq.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top API Keys"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top Models"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsxs)(ep.Z,{className:"mb-2",children:[(0,r.jsx)(el.Z,{children:"Total Spend Per Team"}),(0,r.jsx)(l_.Z,{data:b})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Daily Spend Per Team"}),(0,r.jsx)(eq.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:N,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Key"}),(0,r.jsxs)(eb.Z,{defaultValue:"all-keys",children:[(0,r.jsx)(ek.Z,{value:"all-keys",onClick:()=>{K(N.from,N.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{K(N.from,N.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,r.jsx)(ep.Z,{className:"mt-4",children:(0,r.jsxs)(eg.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"End User"}),(0,r.jsx)(e_.Z,{children:"Spend"}),(0,r.jsx)(e_.Z,{children:"Total Events"})]})}),(0,r.jsx)(ey.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.end_user}),(0,r.jsx)(ef.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,r.jsx)(ef.Z,{children:e.total_count})]},l)})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsx)(eF.Z,{className:"mb-4",enableSelect:!0,value:N,onValueChange:e=>{R(e),B(e.from,e.to)}}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Spend Per Tag"}),(0,r.jsxs)(ee.Z,{children:["Get Started Tracking cost per tag ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,r.jsx)(eq.Z,{className:"h-72",data:f,index:"name",categories:["spend"],colors:["blue"]})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})})]})]})]})},lb=()=>{let{Title:e,Paragraph:l}=eT.default,[t,s]=(0,n.useState)(""),[a,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,y]=(0,n.useState)({data:[]}),f=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eP.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{children:"Loading..."}),children:(0,r.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,r.jsx)(m,{userID:f,userRole:t,userEmail:a,showSSOBanner:x}),(0,r.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,r.jsx)("div",{className:"mt-8",children:(0,r.jsx)(lZ,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,r.jsx)(eO,{userID:f,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:a,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,r.jsx)(e3,{userID:f,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:y}):"llm-playground"==_?(0,r.jsx)(lj,{userID:f,userRole:t,token:Z,accessToken:b}):"users"==_?(0,r.jsx)(e9,{userID:f,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,r.jsx)(le,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:f,userRole:t}):"admin-panel"==_?(0,r.jsx)(lt,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,r.jsx)(lx,{}):"settings"==_?(0,r.jsx)(lr,{userID:f,userRole:t,accessToken:b}):"general-settings"==_?(0,r.jsx)(lu,{userID:f,userRole:t,accessToken:b,modelData:g}):(0,r.jsx)(lw,{userID:f,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/app/page-de58db2e54247c7a.js b/ui/litellm-dashboard/out/_next/static/chunks/app/page-de58db2e54247c7a.js deleted file mode 100644 index f73470d9994..00000000000 --- a/ui/litellm-dashboard/out/_next/static/chunks/app/page-de58db2e54247c7a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,7926))},7926:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lb}});var s,r,a=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:r}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",r);let n=[{key:"1",label:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{children:["Role: ",t]}),(0,a.jsxs)("p",{children:["ID: ",l]})]})}];return(0,a.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,a.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,a.jsx)("div",{className:"flex flex-col items-center",children:(0,a.jsx)(i.default,{href:"/",children:(0,a.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,a.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,a.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[r?(0,a.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,a.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,a.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,a.jsx)(c.Z,{menu:{items:n},children:(0,a.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&a&&null!=r&&void 0!=r&&(n="".concat(n,"?view_all=true&page=").concat(r,"&page_size=").concat(a));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,r,a)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async e=>{try{let l="/global/spend/tags";console.log("in tagsSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,r,a)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(r,"&end_date=").concat(a):"".concat(l,"?start_date=").concat(r,"&end_date=").concat(a);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let r="";r=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let a={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};a.body=r;let n=await fetch("/global/spend/end_users",a);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let r=await s.json();return console.log(r),r}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let r=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!r.ok){let e=await r.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await r.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let r=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),r}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},G=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var Y=t(10384),W=t(46453),J=t(16450),H=t(52273),$=t(26780),X=t(15595),Q=t(6698),ee=t(71801),el=t(42440),et=t(42308),es=t(50670),er=t(81583),ea=t(99129),en=t(44839),eo=t(88707),ei=t(1861);let{Option:ec}=es.default;var ed=e=>{let{userID:l,team:t,userRole:s,accessToken:r,data:o,setData:i}=e,[c]=er.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,f]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==r){let e=(await A(r,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),f(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,s]);let k=async e=>{try{var t,s,a;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(a=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==a?a:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(r,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?y:t.models:y)},[t,y]),(0,a.jsxs)("div",{children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,a.jsx)(ea.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,a.jsxs)(er.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,a.jsx)(en.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,a.jsx)(ec,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,a.jsx)(ec,{value:e,children:e},e))]})}),(0,a.jsxs)($.Z,{className:"mt-20 mb-8",children:[(0,a.jsx)(Q.Z,{children:(0,a.jsx)("b",{children:"Optional Settings"})}),(0,a.jsxs)(X.Z,{children:[(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,a.jsxs)(es.default,{defaultValue:null,placeholder:"n/a",children:[(0,a.jsx)(es.default.Option,{value:"24h",children:"daily"}),(0,a.jsx)(es.default.Option,{value:"30d",children:"monthly"})]})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,a.jsx)(ea.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(el.Z,{children:"Save your Key"}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,a.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:null!=h?(0,a.jsxs)("div",{children:[(0,a.jsx)(ee.Z,{className:"mt-3",children:"API Key:"}),(0,a.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,a.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,a.jsx)(et.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,a.jsx)(J.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,a.jsx)(ee.Z,{children:"Key being created, this might take 30s"})})]})})]})},em=t(9454),eu=t(98941),eh=t(33393),ex=t(5),ep=t(13810),ej=t(61244),eg=t(10827),ey=t(3851),ef=t(2044),eZ=t(64167),e_=t(74480),ew=t(7178),eb=t(95093),ek=t(27166);let{Option:ev}=es.default;var eS=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:r,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,N]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await A(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,a.jsxs)("div",{children:[(0,a.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,a.jsxs)(eg.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Key Alias"}),(0,a.jsx)(e_.Z,{children:"Secret Key"}),(0,a.jsx)(e_.Z,{children:"Spend (USD)"}),(0,a.jsx)(e_.Z,{children:"Budget (USD)"}),(0,a.jsx)(e_.Z,{children:"Models"}),(0,a.jsx)(e_.Z,{children:"TPM / RPM Limits"})]})}),(0,a.jsx)(ey.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(r){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(r.team_id)),(null!=r.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=r.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,a.jsx)(ee.Z,{children:e.key_alias}):(0,a.jsx)(ee.Z,{children:"Not Set"})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:e.key_name})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,a.jsx)(ef.Z,{children:null!=e.max_budget?(0,a.jsx)(ee.Z,{children:e.max_budget}):(0,a.jsx)(ee.Z,{children:"Unlimited"})}),(0,a.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(a.Fragment,{children:r&&r.models&&r.models.length>0?r.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Team Models"})},l):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Team Models"})},l):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{onClick:()=>{I(e),N(!0)},icon:em.Z,size:"sm"}),(0,a.jsx)(ea.Z,{open:S,onCancel:()=>{N(!1),I(null)},footer:null,width:800,children:E&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,a.jsx)(a.Fragment,{children:E.max_budget}):(0,a.jsx)(a.Fragment,{children:"Unlimited"})})})]},e.name),(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,a.jsx)(a.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,a.jsx)(a.Fragment,{children:"Never"})})})]},e.name)]}),(0,a.jsxs)(ep.Z,{className:"my-4",children:[(0,a.jsx)(el.Z,{children:"Token Name"}),(0,a.jsx)(ee.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,a.jsx)(el.Z,{children:"Token ID"}),(0,a.jsx)(ee.Z,{className:"my-1 text-[12px]",children:E.token}),(0,a.jsx)(el.Z,{children:"Metadata"}),(0,a.jsx)(ee.Z,{className:"my-1",children:(0,a.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,a.jsx)(J.Z,{className:"mx-auto flex items-center",onClick:()=>{N(!1),I(null)},children:"Close"})]})}),(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>R(e)}),(0,a.jsx)(ej.Z,{onClick:()=>U(e),icon:eh.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(J.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=er.Z.useForm(),[d,m]=(0,n.useState)(r),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,a.jsx)(ea.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(er.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(ev,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,a.jsx)(ev,{value:e,children:e},e)):d.models.map(e=>(0,a.jsx)(ev,{value:e,children:e},e)):C.map(e=>(0,a.jsx)(ev,{value:e,children:e},e))]})}),(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{label:"token",name:"token",hidden:!0}),(0,a.jsx)(er.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,a.jsx)(eb.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,a.jsx)(ek.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eA=t(76032),eN=t(35152),eE=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:r,selectedTeam:o}=e;console.log("userSpend: ".concat(r));let[i,c]=(0,n.useState)(null!==r?r:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==r)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await A(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==r&&c(r)},[r]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,a.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,a.jsx)("div",{className:"ml-auto",children:(0,a.jsxs)($.Z,{children:[(0,a.jsx)(Q.Z,{children:(0,a.jsx)(ee.Z,{children:"Team Models"})}),(0,a.jsx)(X.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,a.jsx)(eA.Z,{children:x.map(e=>(0,a.jsx)(eN.Z,{children:(0,a.jsx)(ee.Z,{children:e})},e))})})]})})]})},eI=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:r}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==r){let e=(await A(r,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("div",{className:"mb-5",children:(0,a.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eC=e=>{let l,{teams:t,setSelectedTeam:s,userRole:r}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===r?t:t?[...t,o]:[o],"App User"===r)?null:(0,a.jsxs)("div",{className:"mt-5 mb-5",children:[(0,a.jsx)(el.Z,{children:"Select Team"}),(0,a.jsx)(ee.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,a.jsxs)(ee.Z,{className:"mt-3 mb-3",children:[(0,a.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,a.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(ek.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,a.jsxs)(ee.Z,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]})},eP=t(37963),eT=t(36083);console.log("isLocal:",!1);var eO=e=>{let{userID:l,userRole:t,teams:s,keys:r,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[f,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,N]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eP.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!r&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),N(s[0])):N(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let r=(await A(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",r),k(r),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(r))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,r,t]),(0,n.useEffect)(()=>{if(null!==r&&null!=S){let e=0;for(let l of r)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==r){let e=0;for(let l of r)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eT.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(f)),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsx)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(eI,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,a.jsx)(eE,{userID:l,userRole:t,accessToken:g,userSpend:f,selectedTeam:S||null}),(0,a.jsx)(eS,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:r,setData:u,teams:s}),(0,a.jsx)(ed,{userID:l,team:S||null,userRole:t,accessToken:g,data:r,setData:u},S?S.team_id:null),(0,a.jsx)(eC,{teams:s,setSelectedTeam:N,userRole:t})]})})})},eF=t(35087),eR=t(92836),eM=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),eK=t(47047),eB=t(76628),ez=t(57750),eq=t(44041),eV=t(38302),eG=t(28683),eY=t(1460),eW=t(78578),eJ=t(63954),eH=t(90252),e$=t(7905),eX=e=>{let{modelID:l,accessToken:t}=e,[s,r]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),r(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),r(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(ej.Z,{onClick:()=>r(!0),icon:eh.Z,size:"sm"}),(0,a.jsx)(ea.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>r(!1),children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(el.Z,{children:"Delete Model"}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Model ID: ",(0,a.jsx)("b",{children:l})]})})]})})]})},eQ=t(97766),e0=t(46495);let{Title:e1,Link:e2}=eT.default;(s=r||(r={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e4={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e8={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e5=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},r={};s.model=t;let a="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)a+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)r[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:a,litellm_params:s,model_info:r},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e3=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=er.Z.useForm(),[y,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,A]=(0,n.useState)([]),N=Object.values(r).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[Y,et]=(0,n.useState)([]),[es,en]=(0,n.useState)([]),[ec,ed]=(0,n.useState)([]),[em,eh]=(0,n.useState)([]),[ev,eS]=(0,n.useState)([]),[eA,eN]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eO,e3]=(0,n.useState)(0),e6=e=>{R(e),O(!0)},e7=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,r]of Object.entries(e))"model_id"!==s?l[s]=r:t=r;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await V(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,r,a;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),et(h.data),en(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),ed(p.data),eh(p.exception_types);let j=await v(o,d,c,u,null===(r=eE.from)||void 0===r?void 0:r.toISOString(),null===(a=eE.to)||void 0===a?void 0:a.toISOString());console.log("slowResponses:",j),eN(j);let g=(await q(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let y=g.model_group_retry_policy,f=g.num_retries;console.log("model_group_retry_policy:",y),console.log("default_retries:",f),eP(y),e3(f)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==y&&l(),e9()},[o,i,c,d,y,Z]),!m||!o||!i||!c||!d)return(0,a.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(y)),null!=y&&"object"==typeof y&&e in y)?y[e].litellm_provider:"openai";if(r){let e=r.split("/"),l=e[0];n=1===e.length?u(r):l}else n="openai";a&&(o=null==a?void 0:a.input_cost_per_token,i=null==a?void 0:a.output_cost_per_token,c=null==a?void 0:a.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eT.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(r).find(l=>r[l]===e);if(l){let e=e4[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof y&&Object.entries(y).forEach(l=>{let[s,r]=l;null!==r&&"object"==typeof r&&"litellm_provider"in r&&(r.litellm_provider===e||r.litellm_provider.includes(e))&&t.push(s)}),A(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await G(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},lr=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),et(s.data),en(s.all_api_bases);let r=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",r),ed(r.data),eh(r.exception_types);let a=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",a),eN(a)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,a.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,a.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eL.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(eR.Z,{children:"All Models"}),(0,a.jsx)(eR.Z,{children:"Add Model"}),(0,a.jsx)(eR.Z,{children:(0,a.jsx)("pre",{children:"/health Models"})}),(0,a.jsx)(eR.Z,{children:"Model Analytics"}),(0,a.jsx)(eR.Z,{children:"Model Retry Settings"})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,a.jsxs)(ee.Z,{children:["Last Refreshed: ",Z]}),(0,a.jsx)(ej.Z,{icon:eJ.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)(W.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,a.jsxs)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,a.jsx)(ek.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eg.Z,{className:"mt-5",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Public Model Name "}),(0,a.jsx)(e_.Z,{children:"Provider"}),"Admin"===c&&(0,a.jsx)(e_.Z,{children:"API Base"}),(0,a.jsx)(e_.Z,{children:"Extra litellm Params"}),(0,a.jsx)(e_.Z,{children:"Input Price per token ($)"}),(0,a.jsx)(e_.Z,{children:"Output Price per token ($)"}),(0,a.jsx)(e_.Z,{children:"Max Tokens"}),(0,a.jsx)(e_.Z,{children:"Status"})]})}),(0,a.jsx)(ey.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:e.model_name})}),(0,a.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,a.jsx)(ef.Z,{children:e.api_base}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)($.Z,{children:[(0,a.jsx)(Q.Z,{children:(0,a.jsx)(ee.Z,{children:"Litellm params"})}),(0,a.jsx)(X.Z,{children:(0,a.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,a.jsx)(ef.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,a.jsx)(ef.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,a.jsx)(ef.Z,{children:e.max_tokens}),(0,a.jsx)(ef.Z,{children:e.model_info.db_model?(0,a.jsx)(ex.Z,{icon:eH.Z,className:"text-white",children:"DB Model"}):(0,a.jsx)(ex.Z,{icon:e$.Z,className:"text-black",children:"Config Model"})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>e6(e)}),(0,a.jsx)(eX,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,a.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:r}=e,[n]=er.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,a.jsx)(ea.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(er.Z,{form:n,onFinish:e7,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,a.jsx)(H.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"max_retries",name:"max_retries",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,a.jsx)(eo.Z,{min:0,step:1})}),(0,a.jsx)(er.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,a.jsx)(eo.Z,{min:0,step:1e-4})}),(0,a.jsx)(er.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,a.jsx)(eo.Z,{min:0,step:1e-4})}),(0,a.jsx)(er.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:e7})]}),(0,a.jsxs)(eU.Z,{className:"h-full",children:[(0,a.jsx)(e1,{level:2,children:"Add new model"}),(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(er.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e5(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eb.Z,{value:E.toString(),children:N.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,a.jsx)(H.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,a.jsx)(H.Z,{placeholder:"Enter model name"}):w.length>0?(0,a.jsx)(eK.Z,{value:w,children:w.map((e,l)=>(0,a.jsx)(eB.Z,{value:e,children:e},l))}):(0,a.jsx)(H.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,a.jsx)(e2,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,a.jsx)(e2,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,a.jsx)(H.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,a.jsx)(er.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,a.jsx)(H.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,a.jsx)(H.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,a.jsx)(H.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,a.jsx)(e0.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,a.jsx)(ei.ZP,{icon:(0,a.jsx)(eQ.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,a.jsx)(H.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,a.jsx)(H.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,a.jsxs)(er.Z.Item,{label:"Base Model",name:"base_model",children:[(0,a.jsx)(H.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,a.jsxs)(ee.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,a.jsx)(e2,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(H.Z,{placeholder:"us-east-1"})}),(0,a.jsx)(er.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,a.jsx)(eW.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,a.jsxs)(eV.Z,{children:[(0,a.jsx)(eG.Z,{span:10}),(0,a.jsx)(eG.Z,{span:10,children:(0,a.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,a.jsx)(e2,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,a.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add Model"})}),(0,a.jsx)(eY.Z,{title:"Get help on our github",children:(0,a.jsx)(eT.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(ee.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,a.jsx)(J.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,a.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)(W.Z,{numItems:2,className:"mt-2",children:[(0,a.jsxs)(eG.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Time Range"}),(0,a.jsx)(eF.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),lr(U,e.from,e.to)}})]}),(0,a.jsxs)(eG.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Model Group"}),(0,a.jsx)(eb.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>lr(e,eE.from,eE.to),children:e},l))})]})]}),(0,a.jsxs)(W.Z,{numItems:2,children:[(0,a.jsx)(eG.Z,{children:(0,a.jsxs)(ep.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,a.jsx)(el.Z,{children:"Avg Latency per Token"}),(0,a.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,a.jsx)(ee.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),Y&&es&&(0,a.jsx)(ez.Z,{title:"Model Latency",className:"h-72",data:Y,showLegend:!1,index:"date",categories:es,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:r}=e;if(!r||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,a.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,a.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,a.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,a.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,a.jsx)(eG.Z,{children:(0,a.jsx)(ep.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Deployment"}),(0,a.jsx)(e_.Z,{children:"Success Responses"}),(0,a.jsxs)(e_.Z,{children:["Slow Responses ",(0,a.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,a.jsx)(ey.Z,{children:eA.map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.api_base}),(0,a.jsx)(ef.Z,{children:e.total_count}),(0,a.jsx)(ef.Z,{children:e.slow_count})]},l))})]})})})]}),(0,a.jsxs)(ep.Z,{className:"mt-4",children:[(0,a.jsx)(el.Z,{children:"Exceptions per Model"}),(0,a.jsx)(eq.Z,{className:"h-72",data:ec,index:"model",categories:em,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,a.jsx)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,a.jsxs)(el.Z,{children:["Retry Policy for ",U]}),(0,a.jsx)(ee.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e8&&(0,a.jsx)("table",{children:(0,a.jsx)("tbody",{children:Object.entries(e8).map((e,l)=>{var t;let[s,r]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[r];return null==n&&(n=eO),(0,a.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,a.jsx)("td",{children:(0,a.jsx)(ee.Z,{children:s})}),(0,a.jsx)("td",{children:(0,a.jsx)(eo.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[r]:e}}})}})})]},l)})})}),(0,a.jsx)(J.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:e6}=es.default;var e7=e=>{let{userID:l,accessToken:t,teams:s}=e,[r]=er.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await A(t,l,"any"),s=[];for(let l=0;l{i(!1),r.resetFields()},p=()=>{i(!1),d(null),r.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),r.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,a.jsxs)(ea.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,a.jsx)(ee.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,a.jsx)(ee.Z,{className:"mb-6",children:(0,a.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,a.jsxs)(er.Z,{form:r,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsx)(er.Z.Item,{label:"User Email",name:"user_email",children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Team ID",name:"team_id",children:(0,a.jsx)(es.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,a.jsx)(e6,{value:e.team_id,children:e.team_alias},e.team_id)):(0,a.jsx)(e6,{value:null,children:"Default Team"},"default")})}),(0,a.jsx)(er.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,a.jsxs)(ea.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,a.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,a.jsx)("br",{}),(0,a.jsx)("p",{children:(0,a.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e9=e=>{let{accessToken:l,token:t,keys:s,userRole:r,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,f]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!r||!o)return;let e=async()=>{try{let e=await Z(l,null,r,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&r&&o&&e()},[l,t,r,o,x]),d&&l&&t&&r&&o)?(0,a.jsx)("div",{style:{width:"100%"},children:(0,a.jsxs)(W.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,a.jsx)(e7,{userID:o,accessToken:l,teams:i}),(0,a.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,a.jsx)("div",{className:"mb-4 mt-1",children:(0,a.jsx)(ee.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,a.jsx)(eM.Z,{children:(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(eg.Z,{className:"mt-5",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"User ID"}),(0,a.jsx)(e_.Z,{children:"User Email"}),(0,a.jsx)(e_.Z,{children:"User Models"}),(0,a.jsx)(e_.Z,{children:"User Spend ($ USD)"}),(0,a.jsx)(e_.Z,{children:"User Max Budget ($ USD)"}),(0,a.jsx)(e_.Z,{children:"User API Key Aliases"})]})}),(0,a.jsx)(ey.Z,{children:d.map(e=>{var l;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.user_id}),(0,a.jsx)(ef.Z,{children:e.user_email}),(0,a.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,a.jsx)(ef.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,a.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(W.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,a.jsx)(ex.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,a.jsx)(ex.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("div",{className:"flex-1"}),(0,a.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,a.jsxs)("div",{className:"flex justify-between items-center",children:[(0,a.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,a.jsx)("div",{children:"Loading..."})},le=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:r,userID:o,userRole:i}=e,[c]=er.Z.useForm(),[d]=er.Z.useForm(),{Title:m,Paragraph:h}=eT.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,N]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let a=await U(s,e);l&&r(l.map(e=>e.team_id===t?a.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await f(s,C);let e=l.filter(e=>e.team_id!==C);r(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let r=l[t].team_id,a=await _(s,r);console.log("teamInfo response:",a),null!==a&&(e={...e,[r]:a})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await A(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),N(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let a=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(a))throw Error("Team alias ".concat(a," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?r([...l,n]):r([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},a=await K(s,y.team_id,t);console.log("response for team create call: ".concat(a.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(a.data.team_id)),e.team_id===a.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=a.data,r(e),Z(a.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"All Teams"}),(0,a.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Team Name"}),(0,a.jsx)(e_.Z,{children:"Spend (USD)"}),(0,a.jsx)(e_.Z,{children:"Budget (USD)"}),(0,a.jsx)(e_.Z,{children:"Models"}),(0,a.jsx)(e_.Z,{children:"TPM / RPM Limits"}),(0,a.jsx)(e_.Z,{children:"Info"})]})}),(0,a.jsx)(ey.Z,{children:l&&l.length>0?l.map(e=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,a.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(ee.Z,{children:"All Proxy Models"})},l):(0,a.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,a.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,a.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>F(e)}),(0,a.jsx)(ej.Z,{onClick:()=>L(e.team_id),icon:eh.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(J.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,a.jsx)(ea.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,a.jsxs)(er.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(H.Z,{placeholder:""})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,a.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(er.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"Team Members"}),(0,a.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,a.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(ek.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,a.jsxs)(h,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Member Name"}),(0,a.jsx)(e_.Z,{children:"Role"})]})}),(0,a.jsx)(ey.Z,{children:y?y.members_with_roles.map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:r}=e,[n]=er.Z.useForm();return(0,a.jsx)(ea.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(er.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,a.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(er.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(er.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(eo.Z,{step:1,width:400})}),(0,a.jsx)(er.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:y,onSubmit:R})]}),(0,a.jsxs)(Y.Z,{numColSpan:1,children:[(0,a.jsx)(J.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,a.jsx)(ea.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,a.jsxs)(er.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(er.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},ll=t(18190),lt=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:r}=e,[o]=er.Z.useForm(),[i]=er.Z.useForm(),{Title:c,Paragraph:d}=eT.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},A=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let N=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,a.jsxs)(er.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(er.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,a.jsxs)(er.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eb.Z,{value:l,children:A.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,children:e},l))})}),(0,a.jsx)(er.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,a.jsx)(en.Z,{value:t,disabled:!0})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),f(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,a.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,a.jsx)(c,{level:4,children:"Admin Access "}),(0,a.jsxs)(d,{children:[r&&(0,a.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Member Name"}),(0,a.jsx)(e_.Z,{children:"Role"})]})}),(0,a.jsx)(ey.Z,{children:x?x.map((e,l)=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ef.Z,{children:e.user_role}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>_(!0)}),(0,a.jsx)(ea.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:N,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)("div",{className:"flex justify-start",children:[(0,a.jsx)(J.Z,{className:"mr-4 mb-5",onClick:()=>f(!0),children:"+ Add admin"}),(0,a.jsx)(ea.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{f(!1),i.resetFields()},onCancel:()=>{f(!1),i.resetFields()},children:I(O)}),(0,a.jsx)(J.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,a.jsx)(ea.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,a.jsxs)(W.Z,{children:[(0,a.jsx)(c,{level:4,children:"Add SSO"}),(0,a.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,a.jsx)(J.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,a.jsx)(ea.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,a.jsxs)(er.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,a.jsx)(en.Z,{})}),(0,a.jsx)(er.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,a.jsx)(en.Z.Password,{})}),(0,a.jsx)(er.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,a.jsx)(en.Z.Password,{})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,a.jsxs)(ea.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,a.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,a.jsx)(ee.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{onClick:S,children:"Done"})})]})]}),(0,a.jsxs)(ll.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,a.jsxs)("a",{href:l,target:"_blank",children:[(0,a.jsx)("b",{children:l})," "]})]})]})]})},ls=t(42556);let lr=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var la=e=>{let{accessToken:l,userRole:t,userID:s}=e,[r,o]=(0,n.useState)(lr),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=er.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[y,f]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e);let l=lr;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),f(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),A=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{V(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},N=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),V(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(r?[...r,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(r)),(0,a.jsxs)("div",{className:"w-full mx-4",children:[(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(ll.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,a.jsxs)(eM.Z,{children:[(0,a.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eR.Z,{value:"1",children:"Logging Callbacks"}),(0,a.jsx)(eR.Z,{value:"2",children:"Alerting"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Callback"}),(0,a.jsx)(e_.Z,{children:"Callback Env Vars"})]})}),(0,a.jsx)(ey.Z,{children:r.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ex.Z,{color:"emerald",children:e.name})}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,a.jsxs)("li",{children:[(0,a.jsx)(ee.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,a.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,a.jsx)("div",{}),(0,a.jsx)(H.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,a.jsx)(J.Z,{className:"mt-2",onClick:()=>A(e),children:"Save Changes"}),(0,a.jsx)(J.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsxs)(ee.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,a.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{}),(0,a.jsx)(e_.Z,{}),(0,a.jsx)(e_.Z,{children:"Slack Webhook URL"})]})}),(0,a.jsx)(ey.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ls.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ee.Z,{children:s})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(H.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:y})})]},l)})})]}),(0,a.jsx)(J.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,r=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",r);let a=(null==r?void 0:r.value)||"";console.log("newWebhookValue",a),e[t]=a}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{V(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,a.jsx)(J.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,a.jsx)(ea.Z,{title:"Add Callback",visible:d,onOk:N,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,a.jsxs)(er.Z,{form:h,layout:"vertical",onFinish:N,children:[(0,a.jsx)(er.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,a.jsxs)(es.default,{onChange:e=>{p(e)},children:[(0,a.jsx)(es.default.Option,{value:"langfuse",children:"langfuse"}),(0,a.jsx)(es.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,a.jsx)(H.Z,{type:"password"})}),(0,a.jsx)(er.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,a.jsx)(H.Z,{type:"password"})})]}),"openmeter"==x&&(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(er.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,a.jsx)(H.Z,{type:"password"})})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:ln}=es.default;var lo=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:r}=e,[o]=er.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,a.jsxs)("div",{children:[(0,a.jsx)(J.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,a.jsx)(ea.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,a.jsxs)(er.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:a}=e,n=[...s.fallbacks||[],{[l]:a}],i={...s,fallbacks:n};console.log(i);try{V(t,{router_settings:i}),r(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(er.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,a.jsx)(eb.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,a.jsx)(ek.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,a.jsx)(er.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsx)(eK.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,a.jsx)(eB.Z,{value:e,children:e},e))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(ei.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},li=t(12968);async function lc(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new li.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,a.jsxs)("span",{children:["Test model=",(0,a.jsx)("strong",{children:e}),", received model=",(0,a.jsx)("strong",{children:l.model}),". See ",(0,a.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let ld={ttl:3600,lowest_latency_buffer:0},lm=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,a.jsxs)($.Z,{children:[(0,a.jsx)(Q.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,a.jsx)(X.Z,{children:"latency-based-routing"==l?(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Setting"}),(0,a.jsx)(e_.Z,{children:"Value"})]})}),(0,a.jsx)(ey.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ee.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,a.jsx)(ee.Z,{children:"No specific settings"})})]})};var lu=e=>{let{accessToken:l,userRole:t,userID:s,modelData:r}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)(!1),[m]=er.Z.useForm(),[h,x]=(0,n.useState)(null),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),f={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)})},[l,t,s]);let Z=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await V(l,{router_settings:o}),i({...o}),j(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},_=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,p];if("routing_strategy_args"==l&&"latency-based-routing"==p){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eR.Z,{value:"1",children:"General Settings"}),(0,a.jsx)(eR.Z,{value:"2",children:"Fallbacks"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(el.Z,{children:"Router Settings"}),(0,a.jsxs)(ep.Z,{children:[(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Setting"}),(0,a.jsx)(e_.Z,{children:"Value"})]})}),(0,a.jsx)(ey.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(ee.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:f[l]})]}),(0,a.jsx)(ef.Z,{children:"routing_strategy"==l?(0,a.jsxs)(eb.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:j,children:[(0,a.jsx)(ek.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,a.jsx)(ek.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,a.jsx)(ek.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,a.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,a.jsx)(lm,{selectedStrategy:p,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:ld,paramExplanation:f})]}),(0,a.jsx)(Y.Z,{children:(0,a.jsx)(J.Z,{className:"mt-2",onClick:()=>_(o),children:"Save Changes"})})]})}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Model Name"}),(0,a.jsx)(e_.Z,{children:"Fallbacks"})]})}),(0,a.jsx)(ey.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,r]=e;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:s}),(0,a.jsx)(ef.Z,{children:Array.isArray(r)?r.join(", "):r}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(J.Z,{onClick:()=>lc(s,l),children:"Test Fallback"})}),(0,a.jsx)(ef.Z,{children:(0,a.jsx)(ej.Z,{icon:eh.Z,size:"sm",onClick:()=>Z(s)})})]},t.toString()+s)}))})]}),(0,a.jsx)(lo,{models:(null==r?void 0:r.data)?r.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]})]})]})}):null},lh=t(67951),lx=e=>{let{}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsxs)("div",{className:"mb-5",children:[(0,a.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,a.jsx)(ee.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,a.jsxs)(eM.Z,{children:[(0,a.jsxs)(eL.Z,{children:[(0,a.jsx)(eR.Z,{children:"OpenAI Python SDK"}),(0,a.jsx)(eR.Z,{children:"LlamaIndex"}),(0,a.jsx)(eR.Z,{children:"Langchain Py"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsx)(lh.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,a.jsx)(eU.Z,{children:(0,a.jsx)(lh.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,a.jsx)(eU.Z,{children:(0,a.jsx)(lh.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lp(e,l,t,s){console.log("isLocal:",!1);let r=window.location.origin,a=new li.ZP.OpenAI({apiKey:s,baseURL:r,dangerouslyAllowBrowser:!0});try{for await(let s of(await a.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var lj=e=>{let{accessToken:l,token:t,userRole:s,userID:r}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{let e=await A(l,r,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,r,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&r){u(e=>[...e,{role:"user",content:c}]);try{h&&await lp(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eT.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,a.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,a.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsx)(ep.Z,{children:(0,a.jsxs)(eM.Z,{children:[(0,a.jsx)(eL.Z,{children:(0,a.jsx)(eR.Z,{children:"Chat"})}),(0,a.jsx)(eD.Z,{children:(0,a.jsxs)(eU.Z,{children:[(0,a.jsx)("div",{className:"sm:max-w-2xl",children:(0,a.jsxs)(W.Z,{numItems:2,children:[(0,a.jsxs)(Y.Z,{children:[(0,a.jsx)(ee.Z,{children:"API Key"}),(0,a.jsx)(H.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,a.jsxs)(Y.Z,{className:"mx-2",children:[(0,a.jsx)(ee.Z,{children:"Select Model:"}),(0,a.jsx)(es.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,a.jsxs)(eg.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ef.Z,{})})}),(0,a.jsx)(ey.Z,{children:m.map((e,l)=>(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,a.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(H.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,a.jsx)(J.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},lg=t(33509),ly=t(95781);let{Sider:lf}=lg.default;var lZ=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,a.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,a.jsx)(lf,{width:120,children:(0,a.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,a.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,a.jsx)(lf,{width:145,children:(0,a.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:(0,a.jsx)(ee.Z,{children:"API Keys"})},"1"),(0,a.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:(0,a.jsx)(ee.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:(0,a.jsx)(ee.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:(0,a.jsx)(ee.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("teams"),children:(0,a.jsx)(ee.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("users"),children:(0,a.jsx)(ee.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("settings"),children:(0,a.jsx)(ee.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("general-settings"),children:(0,a.jsx)(ee.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,a.jsx)(ly.Z.Item,{onClick:()=>l("admin-panel"),children:(0,a.jsx)(ee.Z,{children:"Admin"})},"7"):null,(0,a.jsx)(ly.Z.Item,{onClick:()=>l("api_ref"),children:(0,a.jsx)(ee.Z,{children:"API Reference"})},"11")]})})})},l_=t(67989),lw=e=>{let{accessToken:l,token:t,userRole:s,userID:r,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,y]=(0,n.useState)([]),[f,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[A,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=B(M),D=B(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let r=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",r),j(r)};function B(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){let e=await C(l);d(e);let t=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(t);let s=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(s);let r=await N(l);console.log("teamSpend",r),y(r.daily_spend),w(r.teams);let a=r.total_spend_per_team;a=a.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(a);let n=await E(l);Z(n.top_10_tags);let o=await T(l,null,void 0,void 0);j(o),console.log("spend/user result",o)}else"App Owner"==s&&await I(l,t,s,r,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,r,U,D]),(0,a.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,a.jsx)(eE,{userID:r,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,a.jsxs)(eM.Z,{children:[(0,a.jsxs)(eL.Z,{className:"mt-2",children:[(0,a.jsx)(eR.Z,{children:"All Up"}),(0,a.jsx)(eR.Z,{children:"Team Based Usage"}),(0,a.jsx)(eR.Z,{children:"End User Usage"}),(0,a.jsx)(eR.Z,{children:"Tag Based Usage"})]}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsx)(Y.Z,{numColSpan:2,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Monthly Spend"}),(0,a.jsx)(eq.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Top API Keys"}),(0,a.jsx)(eq.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(Y.Z,{numColSpan:1,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Top Models"}),(0,a.jsx)(eq.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(Y.Z,{numColSpan:1})]})}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsxs)(Y.Z,{numColSpan:2,children:[(0,a.jsxs)(ep.Z,{className:"mb-2",children:[(0,a.jsx)(el.Z,{children:"Total Spend Per Team"}),(0,a.jsx)(l_.Z,{data:b})]}),(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Daily Spend Per Team"}),(0,a.jsx)(eq.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,a.jsx)(Y.Z,{numColSpan:2})]})}),(0,a.jsxs)(eU.Z,{children:[(0,a.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,a.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,a.jsxs)(W.Z,{numItems:2,children:[(0,a.jsxs)(Y.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Time Range"}),(0,a.jsx)(eF.Z,{enableSelect:!0,value:A,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,a.jsxs)(Y.Z,{children:[(0,a.jsx)(ee.Z,{children:"Select Key"}),(0,a.jsxs)(eb.Z,{defaultValue:"all-keys",children:[(0,a.jsx)(ek.Z,{value:"all-keys",onClick:()=>{K(A.from,A.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,a.jsx)(ek.Z,{value:String(l),onClick:()=>{K(A.from,A.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,a.jsx)(ep.Z,{className:"mt-4",children:(0,a.jsxs)(eg.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"End User"}),(0,a.jsx)(e_.Z,{children:"Spend"}),(0,a.jsx)(e_.Z,{children:"Total Events"})]})}),(0,a.jsx)(ey.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.end_user}),(0,a.jsx)(ef.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,a.jsx)(ef.Z,{children:e.total_count})]},l)})})]})})]}),(0,a.jsx)(eU.Z,{children:(0,a.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,a.jsx)(Y.Z,{numColSpan:2,children:(0,a.jsxs)(ep.Z,{children:[(0,a.jsx)(el.Z,{children:"Spend Per Tag - Last 30 Days"}),(0,a.jsxs)(ee.Z,{children:["Get Started Tracking cost per tag ",(0,a.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,a.jsxs)(eg.Z,{children:[(0,a.jsx)(eZ.Z,{children:(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(e_.Z,{children:"Tag"}),(0,a.jsx)(e_.Z,{children:"Spend"}),(0,a.jsx)(e_.Z,{children:"Requests"})]})}),(0,a.jsx)(ey.Z,{children:f.map(e=>(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ef.Z,{children:e.name}),(0,a.jsx)(ef.Z,{children:e.value}),(0,a.jsx)(ef.Z,{children:e.log_count})]},e.name))})]})]})}),(0,a.jsx)(Y.Z,{numColSpan:2})]})})]})]})]})},lb=()=>{let{Title:e,Paragraph:l}=eT.default,[t,s]=(0,n.useState)(""),[r,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,y]=(0,n.useState)({data:[]}),f=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eP.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{children:"Loading..."}),children:(0,a.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,a.jsx)(m,{userID:f,userRole:t,userEmail:r,showSSOBanner:x}),(0,a.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,a.jsx)("div",{className:"mt-8",children:(0,a.jsx)(lZ,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,a.jsx)(eO,{userID:f,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:r,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,a.jsx)(e3,{userID:f,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:y}):"llm-playground"==_?(0,a.jsx)(lj,{userID:f,userRole:t,token:Z,accessToken:b}):"users"==_?(0,a.jsx)(e9,{userID:f,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,a.jsx)(le,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:f,userRole:t}):"admin-panel"==_?(0,a.jsx)(lt,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,a.jsx)(lx,{}):"settings"==_?(0,a.jsx)(la,{userID:f,userRole:t,accessToken:b}):"general-settings"==_?(0,a.jsx)(lu,{userID:f,userRole:t,accessToken:b,modelData:g}):(0,a.jsx)(lw,{userID:f,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/webpack-bd14a14e35b37798.js b/ui/litellm-dashboard/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js similarity index 98% rename from litellm/proxy/_experimental/out/_next/static/chunks/webpack-bd14a14e35b37798.js rename to ui/litellm-dashboard/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js index 54c5420044c..8a5c2162ca0 100644 --- a/litellm/proxy/_experimental/out/_next/static/chunks/webpack-bd14a14e35b37798.js +++ b/ui/litellm-dashboard/out/_next/static/chunks/webpack-de9c0fadf6a94b3b.js @@ -1 +1 @@ -!function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={id:e,loaded:!1,exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete l[e]}return n.loaded=!0,n.exports}d.m=a,e=[],d.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.125rem * var(--tw-space-x-reverse));margin-left:calc(.125rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.375rem * var(--tw-space-x-reverse));margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.625rem * var(--tw-space-x-reverse));margin-left:calc(.625rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-tremor-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[1px\]{border-radius:1px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-tremor-default{border-radius:.5rem}.rounded-tremor-full{border-radius:9999px}.rounded-tremor-small{border-radius:.375rem}.rounded-b-tremor-default{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-l-tremor-default{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-tremor-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-tremor-small{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-r-tremor-default{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-r-tremor-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-r-tremor-small{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-tremor-default{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-r-4{border-right-width:4px}.border-t-4{border-top-width:4px}.border-t-\[1px\]{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.border-dark-tremor-background{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-dark-tremor-border{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-dark-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-dark-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-dark-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-dark-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-tremor-background{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.bg-dark-tremor-background{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-dark-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-dark-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-dark-tremor-brand-emphasis{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-dark-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}.bg-dark-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-dark-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-tremor-background-emphasis{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-tremor-border{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.bg-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(134 136 239/var(--tw-bg-opacity))}.bg-tremor-brand-muted\/50{background-color:rgba(134,136,239,.5)}.bg-tremor-brand-subtle{--tw-bg-opacity:1;background-color:rgb(142 145 235/var(--tw-bg-opacity))}.bg-tremor-content{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-20{--tw-bg-opacity:0.2}.bg-opacity-30{--tw-bg-opacity:0.3}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.fill-amber-100{fill:#fef3c7}.fill-amber-200{fill:#fde68a}.fill-amber-300{fill:#fcd34d}.fill-amber-400{fill:#fbbf24}.fill-amber-50{fill:#fffbeb}.fill-amber-500{fill:#f59e0b}.fill-amber-600{fill:#d97706}.fill-amber-700{fill:#b45309}.fill-amber-800{fill:#92400e}.fill-amber-900{fill:#78350f}.fill-amber-950{fill:#451a03}.fill-blue-100{fill:#dbeafe}.fill-blue-200{fill:#bfdbfe}.fill-blue-300{fill:#93c5fd}.fill-blue-400{fill:#60a5fa}.fill-blue-50{fill:#eff6ff}.fill-blue-500{fill:#3b82f6}.fill-blue-600{fill:#2563eb}.fill-blue-700{fill:#1d4ed8}.fill-blue-800{fill:#1e40af}.fill-blue-900{fill:#1e3a8a}.fill-blue-950{fill:#172554}.fill-cyan-100{fill:#cffafe}.fill-cyan-200{fill:#a5f3fc}.fill-cyan-300{fill:#67e8f9}.fill-cyan-400{fill:#22d3ee}.fill-cyan-50{fill:#ecfeff}.fill-cyan-500{fill:#06b6d4}.fill-cyan-600{fill:#0891b2}.fill-cyan-700{fill:#0e7490}.fill-cyan-800{fill:#155e75}.fill-cyan-900{fill:#164e63}.fill-cyan-950{fill:#083344}.fill-emerald-100{fill:#d1fae5}.fill-emerald-200{fill:#a7f3d0}.fill-emerald-300{fill:#6ee7b7}.fill-emerald-400{fill:#34d399}.fill-emerald-50{fill:#ecfdf5}.fill-emerald-500{fill:#10b981}.fill-emerald-600{fill:#059669}.fill-emerald-700{fill:#047857}.fill-emerald-800{fill:#065f46}.fill-emerald-900{fill:#064e3b}.fill-emerald-950{fill:#022c22}.fill-fuchsia-100{fill:#fae8ff}.fill-fuchsia-200{fill:#f5d0fe}.fill-fuchsia-300{fill:#f0abfc}.fill-fuchsia-400{fill:#e879f9}.fill-fuchsia-50{fill:#fdf4ff}.fill-fuchsia-500{fill:#d946ef}.fill-fuchsia-600{fill:#c026d3}.fill-fuchsia-700{fill:#a21caf}.fill-fuchsia-800{fill:#86198f}.fill-fuchsia-900{fill:#701a75}.fill-fuchsia-950{fill:#4a044e}.fill-gray-100{fill:#f3f4f6}.fill-gray-200{fill:#e5e7eb}.fill-gray-300{fill:#d1d5db}.fill-gray-400{fill:#9ca3af}.fill-gray-50{fill:#f9fafb}.fill-gray-500{fill:#6b7280}.fill-gray-600{fill:#4b5563}.fill-gray-700{fill:#374151}.fill-gray-800{fill:#1f2937}.fill-gray-900{fill:#111827}.fill-gray-950{fill:#030712}.fill-green-100{fill:#dcfce7}.fill-green-200{fill:#bbf7d0}.fill-green-300{fill:#86efac}.fill-green-400{fill:#4ade80}.fill-green-50{fill:#f0fdf4}.fill-green-500{fill:#22c55e}.fill-green-600{fill:#16a34a}.fill-green-700{fill:#15803d}.fill-green-800{fill:#166534}.fill-green-900{fill:#14532d}.fill-green-950{fill:#052e16}.fill-indigo-100{fill:#e0e7ff}.fill-indigo-200{fill:#c7d2fe}.fill-indigo-300{fill:#a5b4fc}.fill-indigo-400{fill:#818cf8}.fill-indigo-50{fill:#eef2ff}.fill-indigo-500{fill:#6366f1}.fill-indigo-600{fill:#4f46e5}.fill-indigo-700{fill:#4338ca}.fill-indigo-800{fill:#3730a3}.fill-indigo-900{fill:#312e81}.fill-indigo-950{fill:#1e1b4b}.fill-lime-100{fill:#ecfccb}.fill-lime-200{fill:#d9f99d}.fill-lime-300{fill:#bef264}.fill-lime-400{fill:#a3e635}.fill-lime-50{fill:#f7fee7}.fill-lime-500{fill:#84cc16}.fill-lime-600{fill:#65a30d}.fill-lime-700{fill:#4d7c0f}.fill-lime-800{fill:#3f6212}.fill-lime-900{fill:#365314}.fill-lime-950{fill:#1a2e05}.fill-neutral-100{fill:#f5f5f5}.fill-neutral-200{fill:#e5e5e5}.fill-neutral-300{fill:#d4d4d4}.fill-neutral-400{fill:#a3a3a3}.fill-neutral-50{fill:#fafafa}.fill-neutral-500{fill:#737373}.fill-neutral-600{fill:#525252}.fill-neutral-700{fill:#404040}.fill-neutral-800{fill:#262626}.fill-neutral-900{fill:#171717}.fill-neutral-950{fill:#0a0a0a}.fill-orange-100{fill:#ffedd5}.fill-orange-200{fill:#fed7aa}.fill-orange-300{fill:#fdba74}.fill-orange-400{fill:#fb923c}.fill-orange-50{fill:#fff7ed}.fill-orange-500{fill:#f97316}.fill-orange-600{fill:#ea580c}.fill-orange-700{fill:#c2410c}.fill-orange-800{fill:#9a3412}.fill-orange-900{fill:#7c2d12}.fill-orange-950{fill:#431407}.fill-pink-100{fill:#fce7f3}.fill-pink-200{fill:#fbcfe8}.fill-pink-300{fill:#f9a8d4}.fill-pink-400{fill:#f472b6}.fill-pink-50{fill:#fdf2f8}.fill-pink-500{fill:#ec4899}.fill-pink-600{fill:#db2777}.fill-pink-700{fill:#be185d}.fill-pink-800{fill:#9d174d}.fill-pink-900{fill:#831843}.fill-pink-950{fill:#500724}.fill-purple-100{fill:#f3e8ff}.fill-purple-200{fill:#e9d5ff}.fill-purple-300{fill:#d8b4fe}.fill-purple-400{fill:#c084fc}.fill-purple-50{fill:#faf5ff}.fill-purple-500{fill:#a855f7}.fill-purple-600{fill:#9333ea}.fill-purple-700{fill:#7e22ce}.fill-purple-800{fill:#6b21a8}.fill-purple-900{fill:#581c87}.fill-purple-950{fill:#3b0764}.fill-red-100{fill:#fee2e2}.fill-red-200{fill:#fecaca}.fill-red-300{fill:#fca5a5}.fill-red-400{fill:#f87171}.fill-red-50{fill:#fef2f2}.fill-red-500{fill:#ef4444}.fill-red-600{fill:#dc2626}.fill-red-700{fill:#b91c1c}.fill-red-800{fill:#991b1b}.fill-red-900{fill:#7f1d1d}.fill-red-950{fill:#450a0a}.fill-rose-100{fill:#ffe4e6}.fill-rose-200{fill:#fecdd3}.fill-rose-300{fill:#fda4af}.fill-rose-400{fill:#fb7185}.fill-rose-50{fill:#fff1f2}.fill-rose-500{fill:#f43f5e}.fill-rose-600{fill:#e11d48}.fill-rose-700{fill:#be123c}.fill-rose-800{fill:#9f1239}.fill-rose-900{fill:#881337}.fill-rose-950{fill:#4c0519}.fill-sky-100{fill:#e0f2fe}.fill-sky-200{fill:#bae6fd}.fill-sky-300{fill:#7dd3fc}.fill-sky-400{fill:#38bdf8}.fill-sky-50{fill:#f0f9ff}.fill-sky-500{fill:#0ea5e9}.fill-sky-600{fill:#0284c7}.fill-sky-700{fill:#0369a1}.fill-sky-800{fill:#075985}.fill-sky-900{fill:#0c4a6e}.fill-sky-950{fill:#082f49}.fill-slate-100{fill:#f1f5f9}.fill-slate-200{fill:#e2e8f0}.fill-slate-300{fill:#cbd5e1}.fill-slate-400{fill:#94a3b8}.fill-slate-50{fill:#f8fafc}.fill-slate-500{fill:#64748b}.fill-slate-600{fill:#475569}.fill-slate-700{fill:#334155}.fill-slate-800{fill:#1e293b}.fill-slate-900{fill:#0f172a}.fill-slate-950{fill:#020617}.fill-stone-100{fill:#f5f5f4}.fill-stone-200{fill:#e7e5e4}.fill-stone-300{fill:#d6d3d1}.fill-stone-400{fill:#a8a29e}.fill-stone-50{fill:#fafaf9}.fill-stone-500{fill:#78716c}.fill-stone-600{fill:#57534e}.fill-stone-700{fill:#44403c}.fill-stone-800{fill:#292524}.fill-stone-900{fill:#1c1917}.fill-stone-950{fill:#0c0a09}.fill-teal-100{fill:#ccfbf1}.fill-teal-200{fill:#99f6e4}.fill-teal-300{fill:#5eead4}.fill-teal-400{fill:#2dd4bf}.fill-teal-50{fill:#f0fdfa}.fill-teal-500{fill:#14b8a6}.fill-teal-600{fill:#0d9488}.fill-teal-700{fill:#0f766e}.fill-teal-800{fill:#115e59}.fill-teal-900{fill:#134e4a}.fill-teal-950{fill:#042f2e}.fill-tremor-content{fill:#6b7280}.fill-tremor-content-emphasis{fill:#374151}.fill-violet-100{fill:#ede9fe}.fill-violet-200{fill:#ddd6fe}.fill-violet-300{fill:#c4b5fd}.fill-violet-400{fill:#a78bfa}.fill-violet-50{fill:#f5f3ff}.fill-violet-500{fill:#8b5cf6}.fill-violet-600{fill:#7c3aed}.fill-violet-700{fill:#6d28d9}.fill-violet-800{fill:#5b21b6}.fill-violet-900{fill:#4c1d95}.fill-violet-950{fill:#2e1065}.fill-yellow-100{fill:#fef9c3}.fill-yellow-200{fill:#fef08a}.fill-yellow-300{fill:#fde047}.fill-yellow-400{fill:#facc15}.fill-yellow-50{fill:#fefce8}.fill-yellow-500{fill:#eab308}.fill-yellow-600{fill:#ca8a04}.fill-yellow-700{fill:#a16207}.fill-yellow-800{fill:#854d0e}.fill-yellow-900{fill:#713f12}.fill-yellow-950{fill:#422006}.fill-zinc-100{fill:#f4f4f5}.fill-zinc-200{fill:#e4e4e7}.fill-zinc-300{fill:#d4d4d8}.fill-zinc-400{fill:#a1a1aa}.fill-zinc-50{fill:#fafafa}.fill-zinc-500{fill:#71717a}.fill-zinc-600{fill:#52525b}.fill-zinc-700{fill:#3f3f46}.fill-zinc-800{fill:#27272a}.fill-zinc-900{fill:#18181b}.fill-zinc-950{fill:#09090b}.stroke-amber-100{stroke:#fef3c7}.stroke-amber-200{stroke:#fde68a}.stroke-amber-300{stroke:#fcd34d}.stroke-amber-400{stroke:#fbbf24}.stroke-amber-50{stroke:#fffbeb}.stroke-amber-500{stroke:#f59e0b}.stroke-amber-600{stroke:#d97706}.stroke-amber-700{stroke:#b45309}.stroke-amber-800{stroke:#92400e}.stroke-amber-900{stroke:#78350f}.stroke-amber-950{stroke:#451a03}.stroke-blue-100{stroke:#dbeafe}.stroke-blue-200{stroke:#bfdbfe}.stroke-blue-300{stroke:#93c5fd}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-50{stroke:#eff6ff}.stroke-blue-500{stroke:#3b82f6}.stroke-blue-600{stroke:#2563eb}.stroke-blue-700{stroke:#1d4ed8}.stroke-blue-800{stroke:#1e40af}.stroke-blue-900{stroke:#1e3a8a}.stroke-blue-950{stroke:#172554}.stroke-cyan-100{stroke:#cffafe}.stroke-cyan-200{stroke:#a5f3fc}.stroke-cyan-300{stroke:#67e8f9}.stroke-cyan-400{stroke:#22d3ee}.stroke-cyan-50{stroke:#ecfeff}.stroke-cyan-500{stroke:#06b6d4}.stroke-cyan-600{stroke:#0891b2}.stroke-cyan-700{stroke:#0e7490}.stroke-cyan-800{stroke:#155e75}.stroke-cyan-900{stroke:#164e63}.stroke-cyan-950{stroke:#083344}.stroke-dark-tremor-background{stroke:#111827}.stroke-dark-tremor-border{stroke:#374151}.stroke-emerald-100{stroke:#d1fae5}.stroke-emerald-200{stroke:#a7f3d0}.stroke-emerald-300{stroke:#6ee7b7}.stroke-emerald-400{stroke:#34d399}.stroke-emerald-50{stroke:#ecfdf5}.stroke-emerald-500{stroke:#10b981}.stroke-emerald-600{stroke:#059669}.stroke-emerald-700{stroke:#047857}.stroke-emerald-800{stroke:#065f46}.stroke-emerald-900{stroke:#064e3b}.stroke-emerald-950{stroke:#022c22}.stroke-fuchsia-100{stroke:#fae8ff}.stroke-fuchsia-200{stroke:#f5d0fe}.stroke-fuchsia-300{stroke:#f0abfc}.stroke-fuchsia-400{stroke:#e879f9}.stroke-fuchsia-50{stroke:#fdf4ff}.stroke-fuchsia-500{stroke:#d946ef}.stroke-fuchsia-600{stroke:#c026d3}.stroke-fuchsia-700{stroke:#a21caf}.stroke-fuchsia-800{stroke:#86198f}.stroke-fuchsia-900{stroke:#701a75}.stroke-fuchsia-950{stroke:#4a044e}.stroke-gray-100{stroke:#f3f4f6}.stroke-gray-200{stroke:#e5e7eb}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-400{stroke:#9ca3af}.stroke-gray-50{stroke:#f9fafb}.stroke-gray-500{stroke:#6b7280}.stroke-gray-600{stroke:#4b5563}.stroke-gray-700{stroke:#374151}.stroke-gray-800{stroke:#1f2937}.stroke-gray-900{stroke:#111827}.stroke-gray-950{stroke:#030712}.stroke-green-100{stroke:#dcfce7}.stroke-green-200{stroke:#bbf7d0}.stroke-green-300{stroke:#86efac}.stroke-green-400{stroke:#4ade80}.stroke-green-50{stroke:#f0fdf4}.stroke-green-500{stroke:#22c55e}.stroke-green-600{stroke:#16a34a}.stroke-green-700{stroke:#15803d}.stroke-green-800{stroke:#166534}.stroke-green-900{stroke:#14532d}.stroke-green-950{stroke:#052e16}.stroke-indigo-100{stroke:#e0e7ff}.stroke-indigo-200{stroke:#c7d2fe}.stroke-indigo-300{stroke:#a5b4fc}.stroke-indigo-400{stroke:#818cf8}.stroke-indigo-50{stroke:#eef2ff}.stroke-indigo-500{stroke:#6366f1}.stroke-indigo-600{stroke:#4f46e5}.stroke-indigo-700{stroke:#4338ca}.stroke-indigo-800{stroke:#3730a3}.stroke-indigo-900{stroke:#312e81}.stroke-indigo-950{stroke:#1e1b4b}.stroke-lime-100{stroke:#ecfccb}.stroke-lime-200{stroke:#d9f99d}.stroke-lime-300{stroke:#bef264}.stroke-lime-400{stroke:#a3e635}.stroke-lime-50{stroke:#f7fee7}.stroke-lime-500{stroke:#84cc16}.stroke-lime-600{stroke:#65a30d}.stroke-lime-700{stroke:#4d7c0f}.stroke-lime-800{stroke:#3f6212}.stroke-lime-900{stroke:#365314}.stroke-lime-950{stroke:#1a2e05}.stroke-neutral-100{stroke:#f5f5f5}.stroke-neutral-200{stroke:#e5e5e5}.stroke-neutral-300{stroke:#d4d4d4}.stroke-neutral-400{stroke:#a3a3a3}.stroke-neutral-50{stroke:#fafafa}.stroke-neutral-500{stroke:#737373}.stroke-neutral-600{stroke:#525252}.stroke-neutral-700{stroke:#404040}.stroke-neutral-800{stroke:#262626}.stroke-neutral-900{stroke:#171717}.stroke-neutral-950{stroke:#0a0a0a}.stroke-orange-100{stroke:#ffedd5}.stroke-orange-200{stroke:#fed7aa}.stroke-orange-300{stroke:#fdba74}.stroke-orange-400{stroke:#fb923c}.stroke-orange-50{stroke:#fff7ed}.stroke-orange-500{stroke:#f97316}.stroke-orange-600{stroke:#ea580c}.stroke-orange-700{stroke:#c2410c}.stroke-orange-800{stroke:#9a3412}.stroke-orange-900{stroke:#7c2d12}.stroke-orange-950{stroke:#431407}.stroke-pink-100{stroke:#fce7f3}.stroke-pink-200{stroke:#fbcfe8}.stroke-pink-300{stroke:#f9a8d4}.stroke-pink-400{stroke:#f472b6}.stroke-pink-50{stroke:#fdf2f8}.stroke-pink-500{stroke:#ec4899}.stroke-pink-600{stroke:#db2777}.stroke-pink-700{stroke:#be185d}.stroke-pink-800{stroke:#9d174d}.stroke-pink-900{stroke:#831843}.stroke-pink-950{stroke:#500724}.stroke-purple-100{stroke:#f3e8ff}.stroke-purple-200{stroke:#e9d5ff}.stroke-purple-300{stroke:#d8b4fe}.stroke-purple-400{stroke:#c084fc}.stroke-purple-50{stroke:#faf5ff}.stroke-purple-500{stroke:#a855f7}.stroke-purple-600{stroke:#9333ea}.stroke-purple-700{stroke:#7e22ce}.stroke-purple-800{stroke:#6b21a8}.stroke-purple-900{stroke:#581c87}.stroke-purple-950{stroke:#3b0764}.stroke-red-100{stroke:#fee2e2}.stroke-red-200{stroke:#fecaca}.stroke-red-300{stroke:#fca5a5}.stroke-red-400{stroke:#f87171}.stroke-red-50{stroke:#fef2f2}.stroke-red-500{stroke:#ef4444}.stroke-red-600{stroke:#dc2626}.stroke-red-700{stroke:#b91c1c}.stroke-red-800{stroke:#991b1b}.stroke-red-900{stroke:#7f1d1d}.stroke-red-950{stroke:#450a0a}.stroke-rose-100{stroke:#ffe4e6}.stroke-rose-200{stroke:#fecdd3}.stroke-rose-300{stroke:#fda4af}.stroke-rose-400{stroke:#fb7185}.stroke-rose-50{stroke:#fff1f2}.stroke-rose-500{stroke:#f43f5e}.stroke-rose-600{stroke:#e11d48}.stroke-rose-700{stroke:#be123c}.stroke-rose-800{stroke:#9f1239}.stroke-rose-900{stroke:#881337}.stroke-rose-950{stroke:#4c0519}.stroke-sky-100{stroke:#e0f2fe}.stroke-sky-200{stroke:#bae6fd}.stroke-sky-300{stroke:#7dd3fc}.stroke-sky-400{stroke:#38bdf8}.stroke-sky-50{stroke:#f0f9ff}.stroke-sky-500{stroke:#0ea5e9}.stroke-sky-600{stroke:#0284c7}.stroke-sky-700{stroke:#0369a1}.stroke-sky-800{stroke:#075985}.stroke-sky-900{stroke:#0c4a6e}.stroke-sky-950{stroke:#082f49}.stroke-slate-100{stroke:#f1f5f9}.stroke-slate-200{stroke:#e2e8f0}.stroke-slate-300{stroke:#cbd5e1}.stroke-slate-400{stroke:#94a3b8}.stroke-slate-50{stroke:#f8fafc}.stroke-slate-500{stroke:#64748b}.stroke-slate-600{stroke:#475569}.stroke-slate-700{stroke:#334155}.stroke-slate-800{stroke:#1e293b}.stroke-slate-900{stroke:#0f172a}.stroke-slate-950{stroke:#020617}.stroke-stone-100{stroke:#f5f5f4}.stroke-stone-200{stroke:#e7e5e4}.stroke-stone-300{stroke:#d6d3d1}.stroke-stone-400{stroke:#a8a29e}.stroke-stone-50{stroke:#fafaf9}.stroke-stone-500{stroke:#78716c}.stroke-stone-600{stroke:#57534e}.stroke-stone-700{stroke:#44403c}.stroke-stone-800{stroke:#292524}.stroke-stone-900{stroke:#1c1917}.stroke-stone-950{stroke:#0c0a09}.stroke-teal-100{stroke:#ccfbf1}.stroke-teal-200{stroke:#99f6e4}.stroke-teal-300{stroke:#5eead4}.stroke-teal-400{stroke:#2dd4bf}.stroke-teal-50{stroke:#f0fdfa}.stroke-teal-500{stroke:#14b8a6}.stroke-teal-600{stroke:#0d9488}.stroke-teal-700{stroke:#0f766e}.stroke-teal-800{stroke:#115e59}.stroke-teal-900{stroke:#134e4a}.stroke-teal-950{stroke:#042f2e}.stroke-tremor-background{stroke:#fff}.stroke-tremor-border{stroke:#e5e7eb}.stroke-tremor-brand{stroke:#6366f1}.stroke-tremor-brand-muted\/50{stroke:rgba(134,136,239,.5)}.stroke-violet-100{stroke:#ede9fe}.stroke-violet-200{stroke:#ddd6fe}.stroke-violet-300{stroke:#c4b5fd}.stroke-violet-400{stroke:#a78bfa}.stroke-violet-50{stroke:#f5f3ff}.stroke-violet-500{stroke:#8b5cf6}.stroke-violet-600{stroke:#7c3aed}.stroke-violet-700{stroke:#6d28d9}.stroke-violet-800{stroke:#5b21b6}.stroke-violet-900{stroke:#4c1d95}.stroke-violet-950{stroke:#2e1065}.stroke-yellow-100{stroke:#fef9c3}.stroke-yellow-200{stroke:#fef08a}.stroke-yellow-300{stroke:#fde047}.stroke-yellow-400{stroke:#facc15}.stroke-yellow-50{stroke:#fefce8}.stroke-yellow-500{stroke:#eab308}.stroke-yellow-600{stroke:#ca8a04}.stroke-yellow-700{stroke:#a16207}.stroke-yellow-800{stroke:#854d0e}.stroke-yellow-900{stroke:#713f12}.stroke-yellow-950{stroke:#422006}.stroke-zinc-100{stroke:#f4f4f5}.stroke-zinc-200{stroke:#e4e4e7}.stroke-zinc-300{stroke:#d4d4d8}.stroke-zinc-400{stroke:#a1a1aa}.stroke-zinc-50{stroke:#fafafa}.stroke-zinc-500{stroke:#71717a}.stroke-zinc-600{stroke:#52525b}.stroke-zinc-700{stroke:#3f3f46}.stroke-zinc-800{stroke:#27272a}.stroke-zinc-900{stroke:#18181b}.stroke-zinc-950{stroke:#09090b}.stroke-1{stroke-width:1}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-1{padding-right:.25rem}.pr-1\.5{padding-right:.375rem}.pr-12{padding-right:3rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[12px\]{font-size:12px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-tremor-default{font-size:.775rem;line-height:1.15rem}.text-tremor-label{font-size:.75rem;line-height:.3rem}.text-tremor-metric{font-size:1.675rem;line-height:2.15rem}.text-tremor-title{font-size:1.025rem;line-height:1.65rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-dark-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-dark-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-dark-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-dark-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-dark-tremor-content-subtle{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-tremor-content-subtle{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.accent-dark-tremor-brand,.accent-tremor-brand{accent-color:#6366f1}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow,.shadow-dark-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-dark-tremor-card,.shadow-dark-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-dark-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-tremor-card{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-tremor-dropdown{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-tremor-dropdown,.shadow-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-tremor-brand{outline-color:#6366f1}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-amber-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 243 199/var(--tw-ring-opacity))}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity))}.ring-amber-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 251 235/var(--tw-ring-opacity))}.ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.ring-amber-600{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity))}.ring-amber-700{--tw-ring-opacity:1;--tw-ring-color:rgb(180 83 9/var(--tw-ring-opacity))}.ring-amber-800{--tw-ring-opacity:1;--tw-ring-color:rgb(146 64 14/var(--tw-ring-opacity))}.ring-amber-900{--tw-ring-opacity:1;--tw-ring-color:rgb(120 53 15/var(--tw-ring-opacity))}.ring-amber-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 26 3/var(--tw-ring-opacity))}.ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity))}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity))}.ring-blue-50{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-blue-600{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity))}.ring-blue-700{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity))}.ring-blue-900{--tw-ring-opacity:1;--tw-ring-color:rgb(30 58 138/var(--tw-ring-opacity))}.ring-blue-950{--tw-ring-opacity:1;--tw-ring-color:rgb(23 37 84/var(--tw-ring-opacity))}.ring-cyan-100{--tw-ring-opacity:1;--tw-ring-color:rgb(207 250 254/var(--tw-ring-opacity))}.ring-cyan-200{--tw-ring-opacity:1;--tw-ring-color:rgb(165 243 252/var(--tw-ring-opacity))}.ring-cyan-300{--tw-ring-opacity:1;--tw-ring-color:rgb(103 232 249/var(--tw-ring-opacity))}.ring-cyan-400{--tw-ring-opacity:1;--tw-ring-color:rgb(34 211 238/var(--tw-ring-opacity))}.ring-cyan-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 254 255/var(--tw-ring-opacity))}.ring-cyan-500{--tw-ring-opacity:1;--tw-ring-color:rgb(6 182 212/var(--tw-ring-opacity))}.ring-cyan-600{--tw-ring-opacity:1;--tw-ring-color:rgb(8 145 178/var(--tw-ring-opacity))}.ring-cyan-700{--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}.ring-cyan-800{--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}.ring-cyan-900{--tw-ring-opacity:1;--tw-ring-color:rgb(22 78 99/var(--tw-ring-opacity))}.ring-cyan-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 51 68/var(--tw-ring-opacity))}.ring-dark-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-emerald-100{--tw-ring-opacity:1;--tw-ring-color:rgb(209 250 229/var(--tw-ring-opacity))}.ring-emerald-200{--tw-ring-opacity:1;--tw-ring-color:rgb(167 243 208/var(--tw-ring-opacity))}.ring-emerald-300{--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.ring-emerald-400{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity))}.ring-emerald-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 253 245/var(--tw-ring-opacity))}.ring-emerald-500{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity))}.ring-emerald-600{--tw-ring-opacity:1;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity))}.ring-emerald-700{--tw-ring-opacity:1;--tw-ring-color:rgb(4 120 87/var(--tw-ring-opacity))}.ring-emerald-800{--tw-ring-opacity:1;--tw-ring-color:rgb(6 95 70/var(--tw-ring-opacity))}.ring-emerald-900{--tw-ring-opacity:1;--tw-ring-color:rgb(6 78 59/var(--tw-ring-opacity))}.ring-emerald-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 44 34/var(--tw-ring-opacity))}.ring-fuchsia-100{--tw-ring-opacity:1;--tw-ring-color:rgb(250 232 255/var(--tw-ring-opacity))}.ring-fuchsia-200{--tw-ring-opacity:1;--tw-ring-color:rgb(245 208 254/var(--tw-ring-opacity))}.ring-fuchsia-300{--tw-ring-opacity:1;--tw-ring-color:rgb(240 171 252/var(--tw-ring-opacity))}.ring-fuchsia-400{--tw-ring-opacity:1;--tw-ring-color:rgb(232 121 249/var(--tw-ring-opacity))}.ring-fuchsia-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 244 255/var(--tw-ring-opacity))}.ring-fuchsia-500{--tw-ring-opacity:1;--tw-ring-color:rgb(217 70 239/var(--tw-ring-opacity))}.ring-fuchsia-600{--tw-ring-opacity:1;--tw-ring-color:rgb(192 38 211/var(--tw-ring-opacity))}.ring-fuchsia-700{--tw-ring-opacity:1;--tw-ring-color:rgb(162 28 175/var(--tw-ring-opacity))}.ring-fuchsia-800{--tw-ring-opacity:1;--tw-ring-color:rgb(134 25 143/var(--tw-ring-opacity))}.ring-fuchsia-900{--tw-ring-opacity:1;--tw-ring-color:rgb(112 26 117/var(--tw-ring-opacity))}.ring-fuchsia-950{--tw-ring-opacity:1;--tw-ring-color:rgb(74 4 78/var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}.ring-gray-950{--tw-ring-opacity:1;--tw-ring-color:rgb(3 7 18/var(--tw-ring-opacity))}.ring-green-100{--tw-ring-opacity:1;--tw-ring-color:rgb(220 252 231/var(--tw-ring-opacity))}.ring-green-200{--tw-ring-opacity:1;--tw-ring-color:rgb(187 247 208/var(--tw-ring-opacity))}.ring-green-300{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity))}.ring-green-400{--tw-ring-opacity:1;--tw-ring-color:rgb(74 222 128/var(--tw-ring-opacity))}.ring-green-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 244/var(--tw-ring-opacity))}.ring-green-500{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.ring-green-600{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity))}.ring-green-700{--tw-ring-opacity:1;--tw-ring-color:rgb(21 128 61/var(--tw-ring-opacity))}.ring-green-800{--tw-ring-opacity:1;--tw-ring-color:rgb(22 101 52/var(--tw-ring-opacity))}.ring-green-900{--tw-ring-opacity:1;--tw-ring-color:rgb(20 83 45/var(--tw-ring-opacity))}.ring-green-950{--tw-ring-opacity:1;--tw-ring-color:rgb(5 46 22/var(--tw-ring-opacity))}.ring-indigo-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 231 255/var(--tw-ring-opacity))}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity))}.ring-indigo-300{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity))}.ring-indigo-400{--tw-ring-opacity:1;--tw-ring-color:rgb(129 140 248/var(--tw-ring-opacity))}.ring-indigo-50{--tw-ring-opacity:1;--tw-ring-color:rgb(238 242 255/var(--tw-ring-opacity))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.ring-indigo-700{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity))}.ring-indigo-800{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity))}.ring-indigo-900{--tw-ring-opacity:1;--tw-ring-color:rgb(49 46 129/var(--tw-ring-opacity))}.ring-indigo-950{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}.ring-lime-100{--tw-ring-opacity:1;--tw-ring-color:rgb(236 252 203/var(--tw-ring-opacity))}.ring-lime-200{--tw-ring-opacity:1;--tw-ring-color:rgb(217 249 157/var(--tw-ring-opacity))}.ring-lime-300{--tw-ring-opacity:1;--tw-ring-color:rgb(190 242 100/var(--tw-ring-opacity))}.ring-lime-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 230 53/var(--tw-ring-opacity))}.ring-lime-50{--tw-ring-opacity:1;--tw-ring-color:rgb(247 254 231/var(--tw-ring-opacity))}.ring-lime-500{--tw-ring-opacity:1;--tw-ring-color:rgb(132 204 22/var(--tw-ring-opacity))}.ring-lime-600{--tw-ring-opacity:1;--tw-ring-color:rgb(101 163 13/var(--tw-ring-opacity))}.ring-lime-700{--tw-ring-opacity:1;--tw-ring-color:rgb(77 124 15/var(--tw-ring-opacity))}.ring-lime-800{--tw-ring-opacity:1;--tw-ring-color:rgb(63 98 18/var(--tw-ring-opacity))}.ring-lime-900{--tw-ring-opacity:1;--tw-ring-color:rgb(54 83 20/var(--tw-ring-opacity))}.ring-lime-950{--tw-ring-opacity:1;--tw-ring-color:rgb(26 46 5/var(--tw-ring-opacity))}.ring-neutral-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 245/var(--tw-ring-opacity))}.ring-neutral-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 229 229/var(--tw-ring-opacity))}.ring-neutral-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 212/var(--tw-ring-opacity))}.ring-neutral-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 163 163/var(--tw-ring-opacity))}.ring-neutral-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-neutral-500{--tw-ring-opacity:1;--tw-ring-color:rgb(115 115 115/var(--tw-ring-opacity))}.ring-neutral-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 82/var(--tw-ring-opacity))}.ring-neutral-700{--tw-ring-opacity:1;--tw-ring-color:rgb(64 64 64/var(--tw-ring-opacity))}.ring-neutral-800{--tw-ring-opacity:1;--tw-ring-color:rgb(38 38 38/var(--tw-ring-opacity))}.ring-neutral-900{--tw-ring-opacity:1;--tw-ring-color:rgb(23 23 23/var(--tw-ring-opacity))}.ring-neutral-950{--tw-ring-opacity:1;--tw-ring-color:rgb(10 10 10/var(--tw-ring-opacity))}.ring-orange-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 237 213/var(--tw-ring-opacity))}.ring-orange-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 215 170/var(--tw-ring-opacity))}.ring-orange-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 186 116/var(--tw-ring-opacity))}.ring-orange-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 146 60/var(--tw-ring-opacity))}.ring-orange-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 247 237/var(--tw-ring-opacity))}.ring-orange-500{--tw-ring-opacity:1;--tw-ring-color:rgb(249 115 22/var(--tw-ring-opacity))}.ring-orange-600{--tw-ring-opacity:1;--tw-ring-color:rgb(234 88 12/var(--tw-ring-opacity))}.ring-orange-700{--tw-ring-opacity:1;--tw-ring-color:rgb(194 65 12/var(--tw-ring-opacity))}.ring-orange-800{--tw-ring-opacity:1;--tw-ring-color:rgb(154 52 18/var(--tw-ring-opacity))}.ring-orange-900{--tw-ring-opacity:1;--tw-ring-color:rgb(124 45 18/var(--tw-ring-opacity))}.ring-orange-950{--tw-ring-opacity:1;--tw-ring-color:rgb(67 20 7/var(--tw-ring-opacity))}.ring-pink-100{--tw-ring-opacity:1;--tw-ring-color:rgb(252 231 243/var(--tw-ring-opacity))}.ring-pink-200{--tw-ring-opacity:1;--tw-ring-color:rgb(251 207 232/var(--tw-ring-opacity))}.ring-pink-300{--tw-ring-opacity:1;--tw-ring-color:rgb(249 168 212/var(--tw-ring-opacity))}.ring-pink-400{--tw-ring-opacity:1;--tw-ring-color:rgb(244 114 182/var(--tw-ring-opacity))}.ring-pink-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 242 248/var(--tw-ring-opacity))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity))}.ring-pink-600{--tw-ring-opacity:1;--tw-ring-color:rgb(219 39 119/var(--tw-ring-opacity))}.ring-pink-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 24 93/var(--tw-ring-opacity))}.ring-pink-800{--tw-ring-opacity:1;--tw-ring-color:rgb(157 23 77/var(--tw-ring-opacity))}.ring-pink-900{--tw-ring-opacity:1;--tw-ring-color:rgb(131 24 67/var(--tw-ring-opacity))}.ring-pink-950{--tw-ring-opacity:1;--tw-ring-color:rgb(80 7 36/var(--tw-ring-opacity))}.ring-purple-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 232 255/var(--tw-ring-opacity))}.ring-purple-200{--tw-ring-opacity:1;--tw-ring-color:rgb(233 213 255/var(--tw-ring-opacity))}.ring-purple-300{--tw-ring-opacity:1;--tw-ring-color:rgb(216 180 254/var(--tw-ring-opacity))}.ring-purple-400{--tw-ring-opacity:1;--tw-ring-color:rgb(192 132 252/var(--tw-ring-opacity))}.ring-purple-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 245 255/var(--tw-ring-opacity))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity))}.ring-purple-600{--tw-ring-opacity:1;--tw-ring-color:rgb(147 51 234/var(--tw-ring-opacity))}.ring-purple-700{--tw-ring-opacity:1;--tw-ring-color:rgb(126 34 206/var(--tw-ring-opacity))}.ring-purple-800{--tw-ring-opacity:1;--tw-ring-color:rgb(107 33 168/var(--tw-ring-opacity))}.ring-purple-900{--tw-ring-opacity:1;--tw-ring-color:rgb(88 28 135/var(--tw-ring-opacity))}.ring-purple-950{--tw-ring-opacity:1;--tw-ring-color:rgb(59 7 100/var(--tw-ring-opacity))}.ring-red-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 226 226/var(--tw-ring-opacity))}.ring-red-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity))}.ring-red-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity))}.ring-red-400{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity))}.ring-red-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 242 242/var(--tw-ring-opacity))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.ring-red-600{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.ring-red-700{--tw-ring-opacity:1;--tw-ring-color:rgb(185 28 28/var(--tw-ring-opacity))}.ring-red-800{--tw-ring-opacity:1;--tw-ring-color:rgb(153 27 27/var(--tw-ring-opacity))}.ring-red-900{--tw-ring-opacity:1;--tw-ring-color:rgb(127 29 29/var(--tw-ring-opacity))}.ring-red-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 10 10/var(--tw-ring-opacity))}.ring-rose-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 228 230/var(--tw-ring-opacity))}.ring-rose-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 205 211/var(--tw-ring-opacity))}.ring-rose-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 164 175/var(--tw-ring-opacity))}.ring-rose-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 113 133/var(--tw-ring-opacity))}.ring-rose-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 241 242/var(--tw-ring-opacity))}.ring-rose-500{--tw-ring-opacity:1;--tw-ring-color:rgb(244 63 94/var(--tw-ring-opacity))}.ring-rose-600{--tw-ring-opacity:1;--tw-ring-color:rgb(225 29 72/var(--tw-ring-opacity))}.ring-rose-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 18 60/var(--tw-ring-opacity))}.ring-rose-800{--tw-ring-opacity:1;--tw-ring-color:rgb(159 18 57/var(--tw-ring-opacity))}.ring-rose-900{--tw-ring-opacity:1;--tw-ring-color:rgb(136 19 55/var(--tw-ring-opacity))}.ring-rose-950{--tw-ring-opacity:1;--tw-ring-color:rgb(76 5 25/var(--tw-ring-opacity))}.ring-sky-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 242 254/var(--tw-ring-opacity))}.ring-sky-200{--tw-ring-opacity:1;--tw-ring-color:rgb(186 230 253/var(--tw-ring-opacity))}.ring-sky-300{--tw-ring-opacity:1;--tw-ring-color:rgb(125 211 252/var(--tw-ring-opacity))}.ring-sky-400{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.ring-sky-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 249 255/var(--tw-ring-opacity))}.ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.ring-sky-600{--tw-ring-opacity:1;--tw-ring-color:rgb(2 132 199/var(--tw-ring-opacity))}.ring-sky-700{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.ring-sky-800{--tw-ring-opacity:1;--tw-ring-color:rgb(7 89 133/var(--tw-ring-opacity))}.ring-sky-900{--tw-ring-opacity:1;--tw-ring-color:rgb(12 74 110/var(--tw-ring-opacity))}.ring-sky-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 47 73/var(--tw-ring-opacity))}.ring-slate-100{--tw-ring-opacity:1;--tw-ring-color:rgb(241 245 249/var(--tw-ring-opacity))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-slate-300{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity))}.ring-slate-400{--tw-ring-opacity:1;--tw-ring-color:rgb(148 163 184/var(--tw-ring-opacity))}.ring-slate-50{--tw-ring-opacity:1;--tw-ring-color:rgb(248 250 252/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.ring-slate-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 41 59/var(--tw-ring-opacity))}.ring-slate-900{--tw-ring-opacity:1;--tw-ring-color:rgb(15 23 42/var(--tw-ring-opacity))}.ring-slate-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity))}.ring-stone-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 244/var(--tw-ring-opacity))}.ring-stone-200{--tw-ring-opacity:1;--tw-ring-color:rgb(231 229 228/var(--tw-ring-opacity))}.ring-stone-300{--tw-ring-opacity:1;--tw-ring-color:rgb(214 211 209/var(--tw-ring-opacity))}.ring-stone-400{--tw-ring-opacity:1;--tw-ring-color:rgb(168 162 158/var(--tw-ring-opacity))}.ring-stone-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 249/var(--tw-ring-opacity))}.ring-stone-500{--tw-ring-opacity:1;--tw-ring-color:rgb(120 113 108/var(--tw-ring-opacity))}.ring-stone-600{--tw-ring-opacity:1;--tw-ring-color:rgb(87 83 78/var(--tw-ring-opacity))}.ring-stone-700{--tw-ring-opacity:1;--tw-ring-color:rgb(68 64 60/var(--tw-ring-opacity))}.ring-stone-800{--tw-ring-opacity:1;--tw-ring-color:rgb(41 37 36/var(--tw-ring-opacity))}.ring-stone-900{--tw-ring-opacity:1;--tw-ring-color:rgb(28 25 23/var(--tw-ring-opacity))}.ring-stone-950{--tw-ring-opacity:1;--tw-ring-color:rgb(12 10 9/var(--tw-ring-opacity))}.ring-teal-100{--tw-ring-opacity:1;--tw-ring-color:rgb(204 251 241/var(--tw-ring-opacity))}.ring-teal-200{--tw-ring-opacity:1;--tw-ring-color:rgb(153 246 228/var(--tw-ring-opacity))}.ring-teal-300{--tw-ring-opacity:1;--tw-ring-color:rgb(94 234 212/var(--tw-ring-opacity))}.ring-teal-400{--tw-ring-opacity:1;--tw-ring-color:rgb(45 212 191/var(--tw-ring-opacity))}.ring-teal-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 250/var(--tw-ring-opacity))}.ring-teal-500{--tw-ring-opacity:1;--tw-ring-color:rgb(20 184 166/var(--tw-ring-opacity))}.ring-teal-600{--tw-ring-opacity:1;--tw-ring-color:rgb(13 148 136/var(--tw-ring-opacity))}.ring-teal-700{--tw-ring-opacity:1;--tw-ring-color:rgb(15 118 110/var(--tw-ring-opacity))}.ring-teal-800{--tw-ring-opacity:1;--tw-ring-color:rgb(17 94 89/var(--tw-ring-opacity))}.ring-teal-900{--tw-ring-opacity:1;--tw-ring-color:rgb(19 78 74/var(--tw-ring-opacity))}.ring-teal-950{--tw-ring-opacity:1;--tw-ring-color:rgb(4 47 46/var(--tw-ring-opacity))}.ring-tremor-brand-inverted{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-tremor-brand-muted{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.ring-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-violet-100{--tw-ring-opacity:1;--tw-ring-color:rgb(237 233 254/var(--tw-ring-opacity))}.ring-violet-200{--tw-ring-opacity:1;--tw-ring-color:rgb(221 214 254/var(--tw-ring-opacity))}.ring-violet-300{--tw-ring-opacity:1;--tw-ring-color:rgb(196 181 253/var(--tw-ring-opacity))}.ring-violet-400{--tw-ring-opacity:1;--tw-ring-color:rgb(167 139 250/var(--tw-ring-opacity))}.ring-violet-50{--tw-ring-opacity:1;--tw-ring-color:rgb(245 243 255/var(--tw-ring-opacity))}.ring-violet-500{--tw-ring-opacity:1;--tw-ring-color:rgb(139 92 246/var(--tw-ring-opacity))}.ring-violet-600{--tw-ring-opacity:1;--tw-ring-color:rgb(124 58 237/var(--tw-ring-opacity))}.ring-violet-700{--tw-ring-opacity:1;--tw-ring-color:rgb(109 40 217/var(--tw-ring-opacity))}.ring-violet-800{--tw-ring-opacity:1;--tw-ring-color:rgb(91 33 182/var(--tw-ring-opacity))}.ring-violet-900{--tw-ring-opacity:1;--tw-ring-color:rgb(76 29 149/var(--tw-ring-opacity))}.ring-violet-950{--tw-ring-opacity:1;--tw-ring-color:rgb(46 16 101/var(--tw-ring-opacity))}.ring-yellow-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 249 195/var(--tw-ring-opacity))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity))}.ring-yellow-400{--tw-ring-opacity:1;--tw-ring-color:rgb(250 204 21/var(--tw-ring-opacity))}.ring-yellow-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 252 232/var(--tw-ring-opacity))}.ring-yellow-500{--tw-ring-opacity:1;--tw-ring-color:rgb(234 179 8/var(--tw-ring-opacity))}.ring-yellow-600{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity))}.ring-yellow-700{--tw-ring-opacity:1;--tw-ring-color:rgb(161 98 7/var(--tw-ring-opacity))}.ring-yellow-800{--tw-ring-opacity:1;--tw-ring-color:rgb(133 77 14/var(--tw-ring-opacity))}.ring-yellow-900{--tw-ring-opacity:1;--tw-ring-color:rgb(113 63 18/var(--tw-ring-opacity))}.ring-yellow-950{--tw-ring-opacity:1;--tw-ring-color:rgb(66 32 6/var(--tw-ring-opacity))}.ring-zinc-100{--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity))}.ring-zinc-200{--tw-ring-opacity:1;--tw-ring-color:rgb(228 228 231/var(--tw-ring-opacity))}.ring-zinc-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity))}.ring-zinc-400{--tw-ring-opacity:1;--tw-ring-color:rgb(161 161 170/var(--tw-ring-opacity))}.ring-zinc-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-zinc-500{--tw-ring-opacity:1;--tw-ring-color:rgb(113 113 122/var(--tw-ring-opacity))}.ring-zinc-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 91/var(--tw-ring-opacity))}.ring-zinc-700{--tw-ring-opacity:1;--tw-ring-color:rgb(63 63 70/var(--tw-ring-opacity))}.ring-zinc-800{--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42/var(--tw-ring-opacity))}.ring-zinc-900{--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity))}.ring-zinc-950{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity))}.ring-opacity-40{--tw-ring-opacity:0.4}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.\[scrollbar-width\:none\]{scrollbar-width:none}:root{--foreground-rgb:0,0,0;--background-start-rgb:255,255,255;--background-end-rgb:255,255,255}body{color:rgb(var(--foreground-rgb));background:linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb))}.placeholder\:text-tremor-content::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.first\:rounded-l-\[4px\]:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.last\:rounded-r-\[4px\]:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.focus-within\:relative:focus-within{position:relative}.hover\:border-b-2:hover{border-bottom-width:2px}.hover\:border-amber-100:hover{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.hover\:border-amber-200:hover{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.hover\:border-amber-300:hover{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.hover\:border-amber-400:hover{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.hover\:border-amber-50:hover{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.hover\:border-amber-500:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.hover\:border-amber-600:hover{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.hover\:border-amber-700:hover{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.hover\:border-amber-800:hover{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.hover\:border-amber-900:hover{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.hover\:border-amber-950:hover{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.hover\:border-blue-100:hover{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.hover\:border-blue-200:hover{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.hover\:border-blue-50:hover{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.hover\:border-blue-500:hover{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.hover\:border-blue-700:hover{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.hover\:border-blue-800:hover{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.hover\:border-blue-900:hover{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.hover\:border-blue-950:hover{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.hover\:border-cyan-100:hover{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.hover\:border-cyan-200:hover{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.hover\:border-cyan-300:hover{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.hover\:border-cyan-400:hover{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.hover\:border-cyan-50:hover{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.hover\:border-cyan-500:hover{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.hover\:border-cyan-600:hover{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.hover\:border-cyan-700:hover{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.hover\:border-cyan-800:hover{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.hover\:border-cyan-900:hover{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.hover\:border-cyan-950:hover{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.hover\:border-emerald-100:hover{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.hover\:border-emerald-200:hover{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.hover\:border-emerald-300:hover{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.hover\:border-emerald-400:hover{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.hover\:border-emerald-50:hover{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.hover\:border-emerald-500:hover{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.hover\:border-emerald-600:hover{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.hover\:border-emerald-700:hover{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.hover\:border-emerald-800:hover{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.hover\:border-emerald-900:hover{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.hover\:border-emerald-950:hover{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.hover\:border-fuchsia-100:hover{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.hover\:border-fuchsia-200:hover{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.hover\:border-fuchsia-300:hover{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.hover\:border-fuchsia-400:hover{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.hover\:border-fuchsia-50:hover{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.hover\:border-fuchsia-500:hover{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.hover\:border-fuchsia-600:hover{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.hover\:border-fuchsia-700:hover{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.hover\:border-fuchsia-800:hover{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.hover\:border-fuchsia-900:hover{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.hover\:border-fuchsia-950:hover{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.hover\:border-gray-100:hover{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.hover\:border-gray-50:hover{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.hover\:border-gray-700:hover{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.hover\:border-gray-900:hover{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.hover\:border-gray-950:hover{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.hover\:border-green-100:hover{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.hover\:border-green-200:hover{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.hover\:border-green-300:hover{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.hover\:border-green-400:hover{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.hover\:border-green-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.hover\:border-green-500:hover{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.hover\:border-green-600:hover{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.hover\:border-green-700:hover{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.hover\:border-green-800:hover{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.hover\:border-green-900:hover{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.hover\:border-green-950:hover{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.hover\:border-indigo-100:hover{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.hover\:border-indigo-200:hover{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.hover\:border-indigo-300:hover{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.hover\:border-indigo-400:hover{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.hover\:border-indigo-50:hover{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.hover\:border-indigo-500:hover{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.hover\:border-indigo-600:hover{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.hover\:border-indigo-700:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-indigo-800:hover{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.hover\:border-indigo-900:hover{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.hover\:border-indigo-950:hover{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.hover\:border-lime-100:hover{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.hover\:border-lime-200:hover{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.hover\:border-lime-300:hover{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.hover\:border-lime-400:hover{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.hover\:border-lime-50:hover{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.hover\:border-lime-500:hover{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.hover\:border-lime-600:hover{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.hover\:border-lime-700:hover{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.hover\:border-lime-800:hover{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.hover\:border-lime-900:hover{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.hover\:border-lime-950:hover{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.hover\:border-neutral-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.hover\:border-neutral-200:hover{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.hover\:border-neutral-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.hover\:border-neutral-400:hover{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.hover\:border-neutral-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-neutral-500:hover{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.hover\:border-neutral-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.hover\:border-neutral-700:hover{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.hover\:border-neutral-800:hover{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.hover\:border-neutral-900:hover{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.hover\:border-neutral-950:hover{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.hover\:border-orange-100:hover{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.hover\:border-orange-200:hover{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.hover\:border-orange-300:hover{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.hover\:border-orange-400:hover{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.hover\:border-orange-50:hover{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.hover\:border-orange-500:hover{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.hover\:border-orange-600:hover{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.hover\:border-orange-700:hover{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.hover\:border-orange-800:hover{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.hover\:border-orange-900:hover{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.hover\:border-orange-950:hover{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.hover\:border-pink-100:hover{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.hover\:border-pink-200:hover{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.hover\:border-pink-300:hover{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.hover\:border-pink-400:hover{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.hover\:border-pink-50:hover{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.hover\:border-pink-500:hover{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.hover\:border-pink-600:hover{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.hover\:border-pink-700:hover{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.hover\:border-pink-800:hover{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.hover\:border-pink-900:hover{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.hover\:border-pink-950:hover{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.hover\:border-purple-100:hover{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.hover\:border-purple-200:hover{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.hover\:border-purple-300:hover{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.hover\:border-purple-400:hover{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.hover\:border-purple-50:hover{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.hover\:border-purple-500:hover{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.hover\:border-purple-600:hover{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.hover\:border-purple-700:hover{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.hover\:border-purple-800:hover{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.hover\:border-purple-900:hover{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.hover\:border-purple-950:hover{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.hover\:border-red-100:hover{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.hover\:border-red-200:hover{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.hover\:border-red-300:hover{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.hover\:border-red-400:hover{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.hover\:border-red-50:hover{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.hover\:border-red-600:hover{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.hover\:border-red-800:hover{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.hover\:border-red-900:hover{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.hover\:border-red-950:hover{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.hover\:border-rose-100:hover{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.hover\:border-rose-200:hover{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.hover\:border-rose-300:hover{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.hover\:border-rose-400:hover{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.hover\:border-rose-50:hover{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.hover\:border-rose-500:hover{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.hover\:border-rose-600:hover{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.hover\:border-rose-700:hover{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.hover\:border-rose-800:hover{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.hover\:border-rose-900:hover{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.hover\:border-rose-950:hover{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.hover\:border-sky-100:hover{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.hover\:border-sky-200:hover{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.hover\:border-sky-300:hover{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.hover\:border-sky-400:hover{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.hover\:border-sky-50:hover{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.hover\:border-sky-500:hover{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.hover\:border-sky-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-sky-700:hover{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.hover\:border-sky-800:hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.hover\:border-sky-900:hover{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.hover\:border-sky-950:hover{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.hover\:border-slate-100:hover{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.hover\:border-slate-200:hover{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.hover\:border-slate-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.hover\:border-slate-50:hover{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.hover\:border-slate-500:hover{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.hover\:border-slate-600:hover{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.hover\:border-slate-700:hover{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.hover\:border-slate-800:hover{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.hover\:border-slate-900:hover{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.hover\:border-slate-950:hover{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.hover\:border-stone-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.hover\:border-stone-200:hover{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.hover\:border-stone-300:hover{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.hover\:border-stone-400:hover{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.hover\:border-stone-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.hover\:border-stone-500:hover{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.hover\:border-stone-600:hover{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.hover\:border-stone-700:hover{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.hover\:border-stone-800:hover{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.hover\:border-stone-900:hover{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.hover\:border-stone-950:hover{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.hover\:border-teal-100:hover{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.hover\:border-teal-200:hover{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.hover\:border-teal-300:hover{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.hover\:border-teal-400:hover{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.hover\:border-teal-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.hover\:border-teal-500:hover{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.hover\:border-teal-600:hover{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.hover\:border-teal-700:hover{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.hover\:border-teal-800:hover{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.hover\:border-teal-900:hover{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.hover\:border-teal-950:hover{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.hover\:border-tremor-brand-emphasis:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-tremor-content:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-violet-100:hover{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.hover\:border-violet-200:hover{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.hover\:border-violet-300:hover{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.hover\:border-violet-400:hover{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.hover\:border-violet-50:hover{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.hover\:border-violet-500:hover{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.hover\:border-violet-600:hover{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.hover\:border-violet-700:hover{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.hover\:border-violet-800:hover{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.hover\:border-violet-900:hover{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.hover\:border-violet-950:hover{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.hover\:border-yellow-100:hover{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.hover\:border-yellow-200:hover{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.hover\:border-yellow-300:hover{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.hover\:border-yellow-400:hover{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.hover\:border-yellow-50:hover{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.hover\:border-yellow-500:hover{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.hover\:border-yellow-600:hover{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.hover\:border-yellow-700:hover{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.hover\:border-yellow-800:hover{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.hover\:border-yellow-900:hover{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.hover\:border-yellow-950:hover{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.hover\:border-zinc-100:hover{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.hover\:border-zinc-200:hover{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.hover\:border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:border-zinc-400:hover{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.hover\:border-zinc-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-zinc-500:hover{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.hover\:border-zinc-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-zinc-700:hover{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.hover\:border-zinc-800:hover{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.hover\:border-zinc-900:hover{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.hover\:border-zinc-950:hover{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.hover\:bg-amber-300:hover{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.hover\:bg-amber-400:hover{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.hover\:bg-amber-500:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.hover\:bg-amber-700:hover{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.hover\:bg-amber-800:hover{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.hover\:bg-amber-900:hover{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.hover\:bg-amber-950:hover{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.hover\:bg-blue-300:hover{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.hover\:bg-blue-900:hover{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.hover\:bg-blue-950:hover{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.hover\:bg-cyan-100:hover{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.hover\:bg-cyan-200:hover{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.hover\:bg-cyan-300:hover{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.hover\:bg-cyan-400:hover{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.hover\:bg-cyan-50:hover{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.hover\:bg-cyan-500:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.hover\:bg-cyan-600:hover{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.hover\:bg-cyan-700:hover{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.hover\:bg-cyan-800:hover{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.hover\:bg-cyan-900:hover{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.hover\:bg-cyan-950:hover{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.hover\:bg-emerald-100:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.hover\:bg-emerald-200:hover{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.hover\:bg-emerald-300:hover{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.hover\:bg-emerald-400:hover{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.hover\:bg-emerald-500:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.hover\:bg-emerald-800:hover{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.hover\:bg-emerald-900:hover{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.hover\:bg-emerald-950:hover{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.hover\:bg-fuchsia-100:hover{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-200:hover{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.hover\:bg-fuchsia-300:hover{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.hover\:bg-fuchsia-400:hover{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.hover\:bg-fuchsia-50:hover{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-500:hover{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.hover\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.hover\:bg-fuchsia-700:hover{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.hover\:bg-fuchsia-800:hover{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.hover\:bg-fuchsia-900:hover{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.hover\:bg-fuchsia-950:hover{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.hover\:bg-gray-950:hover{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.hover\:bg-green-200:hover{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.hover\:bg-green-300:hover{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.hover\:bg-green-400:hover{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.hover\:bg-green-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.hover\:bg-green-500:hover{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-green-800:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.hover\:bg-green-900:hover{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.hover\:bg-green-950:hover{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.hover\:bg-indigo-200:hover{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.hover\:bg-indigo-300:hover{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.hover\:bg-indigo-400:hover{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.hover\:bg-indigo-50:hover{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.hover\:bg-indigo-500:hover{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.hover\:bg-indigo-600:hover{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-indigo-800:hover{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.hover\:bg-indigo-900:hover{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.hover\:bg-indigo-950:hover{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.hover\:bg-lime-100:hover{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.hover\:bg-lime-200:hover{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.hover\:bg-lime-300:hover{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.hover\:bg-lime-400:hover{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.hover\:bg-lime-50:hover{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.hover\:bg-lime-500:hover{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.hover\:bg-lime-600:hover{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.hover\:bg-lime-700:hover{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.hover\:bg-lime-800:hover{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.hover\:bg-lime-900:hover{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.hover\:bg-lime-950:hover{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.hover\:bg-neutral-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.hover\:bg-neutral-200:hover{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.hover\:bg-neutral-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.hover\:bg-neutral-400:hover{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.hover\:bg-neutral-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-neutral-500:hover{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.hover\:bg-neutral-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.hover\:bg-neutral-700:hover{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.hover\:bg-neutral-800:hover{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.hover\:bg-neutral-900:hover{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.hover\:bg-neutral-950:hover{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.hover\:bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.hover\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.hover\:bg-orange-300:hover{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.hover\:bg-orange-400:hover{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.hover\:bg-orange-50:hover{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.hover\:bg-orange-500:hover{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.hover\:bg-orange-700:hover{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.hover\:bg-orange-800:hover{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.hover\:bg-orange-900:hover{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.hover\:bg-orange-950:hover{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.hover\:bg-pink-200:hover{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.hover\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.hover\:bg-pink-400:hover{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.hover\:bg-pink-50:hover{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-pink-600:hover{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.hover\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.hover\:bg-pink-800:hover{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.hover\:bg-pink-900:hover{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.hover\:bg-pink-950:hover{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.hover\:bg-purple-200:hover{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.hover\:bg-purple-300:hover{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.hover\:bg-purple-400:hover{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.hover\:bg-purple-50:hover{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.hover\:bg-purple-500:hover{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.hover\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.hover\:bg-purple-800:hover{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.hover\:bg-purple-900:hover{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.hover\:bg-purple-950:hover{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.hover\:bg-red-300:hover{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.hover\:bg-red-400:hover{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:bg-red-800:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.hover\:bg-red-950:hover{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.hover\:bg-rose-100:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.hover\:bg-rose-200:hover{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.hover\:bg-rose-300:hover{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.hover\:bg-rose-400:hover{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.hover\:bg-rose-500:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.hover\:bg-rose-600:hover{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.hover\:bg-rose-700:hover{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.hover\:bg-rose-800:hover{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.hover\:bg-rose-900:hover{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.hover\:bg-rose-950:hover{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.hover\:bg-sky-100:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.hover\:bg-sky-200:hover{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.hover\:bg-sky-300:hover{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.hover\:bg-sky-400:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.hover\:bg-sky-50:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.hover\:bg-sky-500:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.hover\:bg-sky-600:hover{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.hover\:bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:bg-sky-800:hover{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.hover\:bg-sky-900:hover{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.hover\:bg-sky-950:hover{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\:bg-slate-300:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.hover\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-slate-500:hover{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.hover\:bg-slate-600:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.hover\:bg-slate-900:hover{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.hover\:bg-slate-950:hover{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.hover\:bg-stone-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.hover\:bg-stone-200:hover{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.hover\:bg-stone-300:hover{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.hover\:bg-stone-400:hover{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.hover\:bg-stone-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.hover\:bg-stone-500:hover{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.hover\:bg-stone-600:hover{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.hover\:bg-stone-700:hover{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.hover\:bg-stone-800:hover{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.hover\:bg-stone-900:hover{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.hover\:bg-stone-950:hover{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.hover\:bg-teal-100:hover{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.hover\:bg-teal-200:hover{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.hover\:bg-teal-300:hover{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.hover\:bg-teal-400:hover{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.hover\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.hover\:bg-teal-500:hover{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.hover\:bg-teal-600:hover{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.hover\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.hover\:bg-teal-800:hover{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.hover\:bg-teal-900:hover{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.hover\:bg-teal-950:hover{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.hover\:bg-tremor-background-muted:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-tremor-background-subtle:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-emphasis:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-faint:hover{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.hover\:bg-violet-100:hover{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.hover\:bg-violet-200:hover{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.hover\:bg-violet-300:hover{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.hover\:bg-violet-400:hover{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.hover\:bg-violet-50:hover{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.hover\:bg-violet-500:hover{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.hover\:bg-violet-600:hover{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.hover\:bg-violet-800:hover{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.hover\:bg-violet-900:hover{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.hover\:bg-violet-950:hover{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-yellow-200:hover{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.hover\:bg-yellow-300:hover{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.hover\:bg-yellow-400:hover{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.hover\:bg-yellow-50:hover{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.hover\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.hover\:bg-yellow-700:hover{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.hover\:bg-yellow-800:hover{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.hover\:bg-yellow-900:hover{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.hover\:bg-yellow-950:hover{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.hover\:bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.hover\:bg-zinc-200:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.hover\:bg-zinc-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.hover\:bg-zinc-400:hover{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-zinc-500:hover{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.hover\:bg-zinc-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.hover\:bg-zinc-700:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.hover\:bg-zinc-800:hover{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.hover\:bg-zinc-900:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.hover\:bg-zinc-950:hover{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.hover\:bg-opacity-20:hover{--tw-bg-opacity:0.2}.hover\:text-amber-100:hover{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.hover\:text-amber-200:hover{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.hover\:text-amber-300:hover{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.hover\:text-amber-400:hover{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.hover\:text-amber-50:hover{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.hover\:text-amber-500:hover{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.hover\:text-amber-700:hover{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.hover\:text-amber-800:hover{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.hover\:text-amber-900:hover{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.hover\:text-amber-950:hover{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.hover\:text-blue-100:hover{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.hover\:text-blue-200:hover{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.hover\:text-blue-50:hover{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.hover\:text-blue-900:hover{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.hover\:text-blue-950:hover{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.hover\:text-cyan-100:hover{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.hover\:text-cyan-200:hover{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.hover\:text-cyan-300:hover{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.hover\:text-cyan-400:hover{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.hover\:text-cyan-50:hover{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.hover\:text-cyan-500:hover{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.hover\:text-cyan-600:hover{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.hover\:text-cyan-700:hover{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.hover\:text-cyan-800:hover{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.hover\:text-cyan-900:hover{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.hover\:text-cyan-950:hover{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.hover\:text-emerald-100:hover{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.hover\:text-emerald-200:hover{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.hover\:text-emerald-300:hover{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.hover\:text-emerald-400:hover{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.hover\:text-emerald-50:hover{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.hover\:text-emerald-500:hover{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.hover\:text-emerald-600:hover{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.hover\:text-emerald-700:hover{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.hover\:text-emerald-800:hover{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.hover\:text-emerald-900:hover{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.hover\:text-emerald-950:hover{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.hover\:text-fuchsia-100:hover{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.hover\:text-fuchsia-200:hover{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.hover\:text-fuchsia-300:hover{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.hover\:text-fuchsia-400:hover{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.hover\:text-fuchsia-50:hover{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.hover\:text-fuchsia-500:hover{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.hover\:text-fuchsia-600:hover{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.hover\:text-fuchsia-700:hover{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.hover\:text-fuchsia-800:hover{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.hover\:text-fuchsia-900:hover{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.hover\:text-fuchsia-950:hover{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.hover\:text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-gray-950:hover{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.hover\:text-green-100:hover{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.hover\:text-green-200:hover{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.hover\:text-green-300:hover{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.hover\:text-green-400:hover{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.hover\:text-green-50:hover{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.hover\:text-green-600:hover{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.hover\:text-green-700:hover{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.hover\:text-green-800:hover{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.hover\:text-green-900:hover{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.hover\:text-green-950:hover{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.hover\:text-indigo-100:hover{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.hover\:text-indigo-200:hover{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.hover\:text-indigo-300:hover{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.hover\:text-indigo-400:hover{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.hover\:text-indigo-50:hover{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.hover\:text-indigo-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-indigo-800:hover{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.hover\:text-indigo-950:hover{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.hover\:text-lime-100:hover{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.hover\:text-lime-200:hover{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.hover\:text-lime-300:hover{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.hover\:text-lime-400:hover{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.hover\:text-lime-50:hover{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.hover\:text-lime-500:hover{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.hover\:text-lime-600:hover{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.hover\:text-lime-700:hover{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.hover\:text-lime-800:hover{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.hover\:text-lime-900:hover{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.hover\:text-lime-950:hover{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.hover\:text-neutral-100:hover{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.hover\:text-neutral-200:hover{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.hover\:text-neutral-300:hover{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.hover\:text-neutral-400:hover{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.hover\:text-neutral-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-neutral-500:hover{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.hover\:text-neutral-600:hover{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.hover\:text-neutral-700:hover{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.hover\:text-neutral-900:hover{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.hover\:text-neutral-950:hover{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.hover\:text-orange-100:hover{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.hover\:text-orange-200:hover{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.hover\:text-orange-400:hover{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.hover\:text-orange-50:hover{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.hover\:text-orange-500:hover{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.hover\:text-orange-600:hover{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.hover\:text-orange-700:hover{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.hover\:text-orange-800:hover{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.hover\:text-orange-900:hover{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.hover\:text-orange-950:hover{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.hover\:text-pink-100:hover{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.hover\:text-pink-200:hover{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.hover\:text-pink-300:hover{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.hover\:text-pink-400:hover{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.hover\:text-pink-50:hover{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.hover\:text-pink-500:hover{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.hover\:text-pink-600:hover{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.hover\:text-pink-700:hover{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.hover\:text-pink-800:hover{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.hover\:text-pink-900:hover{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.hover\:text-pink-950:hover{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.hover\:text-purple-100:hover{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.hover\:text-purple-200:hover{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.hover\:text-purple-300:hover{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.hover\:text-purple-400:hover{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.hover\:text-purple-50:hover{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.hover\:text-purple-500:hover{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.hover\:text-purple-600:hover{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.hover\:text-purple-700:hover{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.hover\:text-purple-800:hover{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.hover\:text-purple-900:hover{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.hover\:text-purple-950:hover{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.hover\:text-red-100:hover{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.hover\:text-red-200:hover{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.hover\:text-red-800:hover{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.hover\:text-red-900:hover{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.hover\:text-red-950:hover{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.hover\:text-rose-100:hover{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.hover\:text-rose-200:hover{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.hover\:text-rose-300:hover{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.hover\:text-rose-400:hover{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.hover\:text-rose-50:hover{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.hover\:text-rose-600:hover{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.hover\:text-rose-700:hover{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.hover\:text-rose-800:hover{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.hover\:text-rose-900:hover{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.hover\:text-rose-950:hover{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.hover\:text-sky-100:hover{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.hover\:text-sky-200:hover{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.hover\:text-sky-300:hover{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.hover\:text-sky-400:hover{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.hover\:text-sky-50:hover{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.hover\:text-sky-500:hover{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.hover\:text-sky-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.hover\:text-sky-700:hover{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.hover\:text-sky-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-sky-900:hover{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.hover\:text-sky-950:hover{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.hover\:text-slate-100:hover{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.hover\:text-slate-200:hover{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.hover\:text-slate-300:hover{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.hover\:text-slate-400:hover{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:text-slate-50:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.hover\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-slate-950:hover{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.hover\:text-stone-100:hover{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.hover\:text-stone-200:hover{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.hover\:text-stone-300:hover{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.hover\:text-stone-400:hover{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.hover\:text-stone-50:hover{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.hover\:text-stone-500:hover{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.hover\:text-stone-600:hover{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.hover\:text-stone-700:hover{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.hover\:text-stone-800:hover{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.hover\:text-stone-900:hover{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.hover\:text-stone-950:hover{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.hover\:text-teal-100:hover{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.hover\:text-teal-200:hover{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.hover\:text-teal-300:hover{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.hover\:text-teal-400:hover{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.hover\:text-teal-50:hover{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.hover\:text-teal-500:hover{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.hover\:text-teal-600:hover{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.hover\:text-teal-700:hover{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.hover\:text-teal-800:hover{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.hover\:text-teal-900:hover{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.hover\:text-teal-950:hover{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.hover\:text-tremor-brand-emphasis:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-tremor-content:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-tremor-content-emphasis:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-violet-100:hover{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.hover\:text-violet-200:hover{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.hover\:text-violet-300:hover{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.hover\:text-violet-400:hover{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.hover\:text-violet-50:hover{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.hover\:text-violet-500:hover{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.hover\:text-violet-600:hover{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.hover\:text-violet-700:hover{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.hover\:text-violet-800:hover{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.hover\:text-violet-900:hover{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.hover\:text-violet-950:hover{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.hover\:text-yellow-100:hover{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.hover\:text-yellow-200:hover{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.hover\:text-yellow-300:hover{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.hover\:text-yellow-400:hover{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.hover\:text-yellow-50:hover{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.hover\:text-yellow-500:hover{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.hover\:text-yellow-600:hover{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.hover\:text-yellow-700:hover{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.hover\:text-yellow-800:hover{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.hover\:text-yellow-900:hover{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.hover\:text-yellow-950:hover{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.hover\:text-zinc-100:hover{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.hover\:text-zinc-200:hover{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.hover\:text-zinc-300:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.hover\:text-zinc-400:hover{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.hover\:text-zinc-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-zinc-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-zinc-600:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.hover\:text-zinc-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.hover\:text-zinc-800:hover{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.hover\:text-zinc-950:hover{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-tremor-brand-subtle:focus{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-tremor-brand-muted:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.group:hover .group-hover\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.group:active .group-active\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.aria-selected\:\!bg-tremor-background-subtle[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(243 244 246/var(--tw-bg-opacity))!important}.aria-selected\:bg-tremor-background-emphasis[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.aria-selected\:\!text-tremor-content[aria-selected=true]{--tw-text-opacity:1!important;color:rgb(107 114 128/var(--tw-text-opacity))!important}.aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.aria-selected\:text-tremor-brand-inverted[aria-selected=true],.aria-selected\:text-tremor-content-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.ui-open\:underline[data-headlessui-state~=open]{text-decoration-line:underline}:where([data-headlessui-state~=open]) .ui-open\:underline{text-decoration-line:underline}.ui-selected\:border-b-2[data-headlessui-state~=selected]{border-bottom-width:2px}.ui-selected\:border-amber-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.ui-selected\:border-amber-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.ui-selected\:border-amber-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.ui-selected\:border-amber-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.ui-selected\:border-amber-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.ui-selected\:border-amber-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.ui-selected\:border-amber-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.ui-selected\:border-amber-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.ui-selected\:border-amber-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.ui-selected\:border-amber-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.ui-selected\:border-amber-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.ui-selected\:border-blue-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.ui-selected\:border-blue-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.ui-selected\:border-blue-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.ui-selected\:border-blue-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.ui-selected\:border-blue-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.ui-selected\:border-blue-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.ui-selected\:border-blue-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.ui-selected\:border-blue-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.ui-selected\:border-blue-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.ui-selected\:border-blue-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.ui-selected\:border-blue-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.ui-selected\:border-cyan-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.ui-selected\:border-cyan-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.ui-selected\:border-cyan-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.ui-selected\:border-cyan-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.ui-selected\:border-cyan-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.ui-selected\:border-cyan-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.ui-selected\:border-cyan-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.ui-selected\:border-cyan-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.ui-selected\:border-cyan-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.ui-selected\:border-cyan-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.ui-selected\:border-cyan-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.ui-selected\:border-emerald-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.ui-selected\:border-emerald-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.ui-selected\:border-emerald-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.ui-selected\:border-emerald-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.ui-selected\:border-emerald-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.ui-selected\:border-emerald-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.ui-selected\:border-emerald-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.ui-selected\:border-emerald-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.ui-selected\:border-emerald-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.ui-selected\:border-emerald-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.ui-selected\:border-emerald-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.ui-selected\:border-gray-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.ui-selected\:border-gray-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-gray-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.ui-selected\:border-gray-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.ui-selected\:border-gray-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.ui-selected\:border-gray-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.ui-selected\:border-gray-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.ui-selected\:border-gray-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.ui-selected\:border-gray-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.ui-selected\:border-gray-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.ui-selected\:border-gray-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.ui-selected\:border-green-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.ui-selected\:border-green-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.ui-selected\:border-green-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.ui-selected\:border-green-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.ui-selected\:border-green-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.ui-selected\:border-green-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.ui-selected\:border-green-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.ui-selected\:border-green-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.ui-selected\:border-green-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.ui-selected\:border-green-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.ui-selected\:border-green-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.ui-selected\:border-indigo-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.ui-selected\:border-indigo-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.ui-selected\:border-indigo-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.ui-selected\:border-indigo-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-indigo-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.ui-selected\:border-indigo-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.ui-selected\:border-indigo-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.ui-selected\:border-indigo-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.ui-selected\:border-indigo-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.ui-selected\:border-lime-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.ui-selected\:border-lime-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.ui-selected\:border-lime-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.ui-selected\:border-lime-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.ui-selected\:border-lime-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.ui-selected\:border-lime-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.ui-selected\:border-lime-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.ui-selected\:border-lime-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.ui-selected\:border-lime-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.ui-selected\:border-lime-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.ui-selected\:border-lime-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.ui-selected\:border-neutral-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.ui-selected\:border-neutral-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.ui-selected\:border-neutral-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.ui-selected\:border-neutral-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.ui-selected\:border-neutral-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-neutral-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.ui-selected\:border-neutral-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.ui-selected\:border-neutral-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.ui-selected\:border-neutral-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.ui-selected\:border-neutral-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.ui-selected\:border-neutral-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.ui-selected\:border-orange-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.ui-selected\:border-orange-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.ui-selected\:border-orange-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.ui-selected\:border-orange-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.ui-selected\:border-orange-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.ui-selected\:border-orange-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.ui-selected\:border-orange-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.ui-selected\:border-orange-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.ui-selected\:border-orange-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.ui-selected\:border-orange-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.ui-selected\:border-orange-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.ui-selected\:border-pink-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.ui-selected\:border-pink-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.ui-selected\:border-pink-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.ui-selected\:border-pink-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.ui-selected\:border-pink-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.ui-selected\:border-pink-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.ui-selected\:border-pink-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.ui-selected\:border-pink-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.ui-selected\:border-pink-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.ui-selected\:border-pink-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.ui-selected\:border-pink-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.ui-selected\:border-purple-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.ui-selected\:border-purple-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.ui-selected\:border-purple-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.ui-selected\:border-purple-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.ui-selected\:border-purple-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.ui-selected\:border-purple-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.ui-selected\:border-purple-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.ui-selected\:border-purple-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.ui-selected\:border-purple-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.ui-selected\:border-purple-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.ui-selected\:border-purple-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.ui-selected\:border-red-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.ui-selected\:border-red-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.ui-selected\:border-red-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.ui-selected\:border-red-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.ui-selected\:border-red-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.ui-selected\:border-red-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.ui-selected\:border-red-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.ui-selected\:border-red-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.ui-selected\:border-red-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.ui-selected\:border-red-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.ui-selected\:border-red-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.ui-selected\:border-rose-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.ui-selected\:border-rose-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.ui-selected\:border-rose-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.ui-selected\:border-rose-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.ui-selected\:border-rose-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.ui-selected\:border-rose-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.ui-selected\:border-rose-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.ui-selected\:border-rose-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.ui-selected\:border-rose-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.ui-selected\:border-rose-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.ui-selected\:border-rose-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.ui-selected\:border-sky-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.ui-selected\:border-sky-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.ui-selected\:border-sky-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.ui-selected\:border-sky-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.ui-selected\:border-sky-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.ui-selected\:border-sky-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.ui-selected\:border-sky-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.ui-selected\:border-sky-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.ui-selected\:border-sky-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.ui-selected\:border-sky-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.ui-selected\:border-sky-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.ui-selected\:border-slate-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.ui-selected\:border-slate-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.ui-selected\:border-slate-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.ui-selected\:border-slate-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.ui-selected\:border-slate-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.ui-selected\:border-slate-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.ui-selected\:border-slate-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.ui-selected\:border-slate-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.ui-selected\:border-slate-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.ui-selected\:border-slate-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.ui-selected\:border-slate-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.ui-selected\:border-stone-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.ui-selected\:border-stone-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.ui-selected\:border-stone-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.ui-selected\:border-stone-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.ui-selected\:border-stone-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.ui-selected\:border-stone-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.ui-selected\:border-stone-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.ui-selected\:border-stone-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.ui-selected\:border-stone-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.ui-selected\:border-stone-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.ui-selected\:border-stone-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.ui-selected\:border-teal-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.ui-selected\:border-teal-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.ui-selected\:border-teal-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.ui-selected\:border-teal-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.ui-selected\:border-teal-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.ui-selected\:border-teal-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.ui-selected\:border-teal-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.ui-selected\:border-teal-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.ui-selected\:border-teal-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.ui-selected\:border-teal-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.ui-selected\:border-teal-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.ui-selected\:border-tremor-border[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-tremor-brand[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-violet-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.ui-selected\:border-violet-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.ui-selected\:border-violet-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.ui-selected\:border-violet-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.ui-selected\:border-violet-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.ui-selected\:border-violet-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.ui-selected\:border-violet-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.ui-selected\:border-violet-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.ui-selected\:border-violet-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.ui-selected\:border-violet-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.ui-selected\:border-violet-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.ui-selected\:border-yellow-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.ui-selected\:border-yellow-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.ui-selected\:border-yellow-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.ui-selected\:border-yellow-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.ui-selected\:border-yellow-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.ui-selected\:border-yellow-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.ui-selected\:border-yellow-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.ui-selected\:border-yellow-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.ui-selected\:border-yellow-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.ui-selected\:border-yellow-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.ui-selected\:border-yellow-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.ui-selected\:border-zinc-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.ui-selected\:border-zinc-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.ui-selected\:border-zinc-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.ui-selected\:border-zinc-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.ui-selected\:border-zinc-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-zinc-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.ui-selected\:border-zinc-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.ui-selected\:border-zinc-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.ui-selected\:border-zinc-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.ui-selected\:border-zinc-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.ui-selected\:border-zinc-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.ui-selected\:bg-amber-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.ui-selected\:bg-amber-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.ui-selected\:bg-amber-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.ui-selected\:bg-amber-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.ui-selected\:bg-amber-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.ui-selected\:bg-amber-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.ui-selected\:bg-amber-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.ui-selected\:bg-amber-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.ui-selected\:bg-amber-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.ui-selected\:bg-amber-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.ui-selected\:bg-amber-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.ui-selected\:bg-blue-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.ui-selected\:bg-blue-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.ui-selected\:bg-blue-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.ui-selected\:bg-blue-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.ui-selected\:bg-blue-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.ui-selected\:bg-blue-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.ui-selected\:bg-blue-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.ui-selected\:bg-blue-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.ui-selected\:bg-blue-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.ui-selected\:bg-gray-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.ui-selected\:bg-gray-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.ui-selected\:bg-gray-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.ui-selected\:bg-gray-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.ui-selected\:bg-gray-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-gray-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.ui-selected\:bg-gray-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.ui-selected\:bg-gray-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.ui-selected\:bg-gray-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.ui-selected\:bg-gray-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.ui-selected\:bg-gray-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.ui-selected\:bg-green-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.ui-selected\:bg-green-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.ui-selected\:bg-green-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.ui-selected\:bg-green-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.ui-selected\:bg-green-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.ui-selected\:bg-green-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.ui-selected\:bg-green-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.ui-selected\:bg-green-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.ui-selected\:bg-green-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.ui-selected\:bg-green-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.ui-selected\:bg-green-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.ui-selected\:bg-lime-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.ui-selected\:bg-lime-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.ui-selected\:bg-lime-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.ui-selected\:bg-lime-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.ui-selected\:bg-lime-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.ui-selected\:bg-lime-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.ui-selected\:bg-lime-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.ui-selected\:bg-lime-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.ui-selected\:bg-lime-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.ui-selected\:bg-lime-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.ui-selected\:bg-lime-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-orange-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.ui-selected\:bg-orange-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.ui-selected\:bg-orange-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.ui-selected\:bg-orange-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.ui-selected\:bg-orange-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.ui-selected\:bg-orange-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.ui-selected\:bg-orange-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.ui-selected\:bg-pink-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.ui-selected\:bg-pink-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.ui-selected\:bg-pink-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.ui-selected\:bg-pink-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.ui-selected\:bg-pink-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.ui-selected\:bg-pink-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.ui-selected\:bg-pink-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.ui-selected\:bg-pink-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.ui-selected\:bg-pink-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.ui-selected\:bg-pink-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.ui-selected\:bg-pink-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.ui-selected\:bg-purple-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.ui-selected\:bg-purple-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.ui-selected\:bg-purple-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.ui-selected\:bg-purple-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.ui-selected\:bg-purple-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.ui-selected\:bg-purple-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.ui-selected\:bg-purple-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.ui-selected\:bg-purple-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.ui-selected\:bg-red-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.ui-selected\:bg-red-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.ui-selected\:bg-red-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.ui-selected\:bg-red-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.ui-selected\:bg-red-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.ui-selected\:bg-red-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.ui-selected\:bg-red-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-red-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.ui-selected\:bg-red-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.ui-selected\:bg-red-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.ui-selected\:bg-red-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-rose-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.ui-selected\:bg-rose-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.ui-selected\:bg-rose-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.ui-selected\:bg-rose-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.ui-selected\:bg-rose-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.ui-selected\:bg-rose-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.ui-selected\:bg-rose-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.ui-selected\:bg-rose-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.ui-selected\:bg-rose-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.ui-selected\:bg-rose-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.ui-selected\:bg-rose-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.ui-selected\:bg-sky-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.ui-selected\:bg-sky-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.ui-selected\:bg-sky-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.ui-selected\:bg-sky-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.ui-selected\:bg-sky-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.ui-selected\:bg-sky-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.ui-selected\:bg-sky-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.ui-selected\:bg-sky-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.ui-selected\:bg-sky-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.ui-selected\:bg-sky-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.ui-selected\:bg-sky-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.ui-selected\:bg-slate-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.ui-selected\:bg-slate-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.ui-selected\:bg-slate-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.ui-selected\:bg-slate-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.ui-selected\:bg-slate-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.ui-selected\:bg-slate-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.ui-selected\:bg-slate-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.ui-selected\:bg-slate-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.ui-selected\:bg-slate-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.ui-selected\:bg-slate-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.ui-selected\:bg-slate-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.ui-selected\:bg-stone-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.ui-selected\:bg-stone-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.ui-selected\:bg-stone-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.ui-selected\:bg-stone-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.ui-selected\:bg-stone-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.ui-selected\:bg-stone-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.ui-selected\:bg-stone-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.ui-selected\:bg-stone-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.ui-selected\:bg-stone-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.ui-selected\:bg-teal-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.ui-selected\:bg-teal-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.ui-selected\:bg-teal-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.ui-selected\:bg-teal-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.ui-selected\:bg-teal-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.ui-selected\:bg-teal-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.ui-selected\:bg-teal-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.ui-selected\:bg-teal-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.ui-selected\:bg-teal-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.ui-selected\:bg-teal-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.ui-selected\:bg-teal-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background-muted[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-violet-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.ui-selected\:bg-violet-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.ui-selected\:bg-violet-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.ui-selected\:bg-violet-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.ui-selected\:bg-violet-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.ui-selected\:bg-violet-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.ui-selected\:bg-violet-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.ui-selected\:bg-violet-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.ui-selected\:bg-violet-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.ui-selected\:text-amber-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.ui-selected\:text-amber-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.ui-selected\:text-amber-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.ui-selected\:text-amber-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.ui-selected\:text-amber-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.ui-selected\:text-amber-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.ui-selected\:text-amber-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.ui-selected\:text-amber-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.ui-selected\:text-amber-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.ui-selected\:text-amber-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.ui-selected\:text-amber-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.ui-selected\:text-blue-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.ui-selected\:text-blue-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.ui-selected\:text-blue-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.ui-selected\:text-blue-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.ui-selected\:text-blue-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.ui-selected\:text-blue-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.ui-selected\:text-blue-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.ui-selected\:text-blue-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.ui-selected\:text-blue-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.ui-selected\:text-blue-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.ui-selected\:text-blue-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.ui-selected\:text-cyan-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.ui-selected\:text-cyan-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.ui-selected\:text-cyan-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.ui-selected\:text-cyan-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.ui-selected\:text-cyan-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.ui-selected\:text-cyan-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.ui-selected\:text-cyan-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.ui-selected\:text-cyan-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.ui-selected\:text-cyan-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.ui-selected\:text-cyan-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.ui-selected\:text-cyan-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-emerald-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.ui-selected\:text-emerald-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.ui-selected\:text-emerald-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.ui-selected\:text-emerald-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.ui-selected\:text-emerald-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.ui-selected\:text-emerald-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.ui-selected\:text-emerald-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.ui-selected\:text-emerald-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.ui-selected\:text-emerald-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.ui-selected\:text-emerald-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.ui-selected\:text-emerald-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.ui-selected\:text-gray-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.ui-selected\:text-gray-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.ui-selected\:text-gray-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.ui-selected\:text-gray-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.ui-selected\:text-gray-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.ui-selected\:text-gray-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.ui-selected\:text-gray-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.ui-selected\:text-gray-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-gray-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.ui-selected\:text-gray-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-gray-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.ui-selected\:text-green-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.ui-selected\:text-green-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.ui-selected\:text-green-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.ui-selected\:text-green-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.ui-selected\:text-green-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.ui-selected\:text-green-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.ui-selected\:text-green-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.ui-selected\:text-green-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.ui-selected\:text-green-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.ui-selected\:text-green-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.ui-selected\:text-green-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.ui-selected\:text-indigo-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.ui-selected\:text-indigo-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.ui-selected\:text-indigo-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.ui-selected\:text-indigo-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-indigo-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.ui-selected\:text-indigo-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.ui-selected\:text-indigo-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.ui-selected\:text-indigo-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.ui-selected\:text-indigo-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.ui-selected\:text-lime-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.ui-selected\:text-lime-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.ui-selected\:text-lime-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.ui-selected\:text-lime-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.ui-selected\:text-lime-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.ui-selected\:text-lime-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.ui-selected\:text-lime-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.ui-selected\:text-lime-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.ui-selected\:text-lime-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.ui-selected\:text-lime-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.ui-selected\:text-lime-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.ui-selected\:text-neutral-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.ui-selected\:text-neutral-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.ui-selected\:text-neutral-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.ui-selected\:text-neutral-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.ui-selected\:text-neutral-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-neutral-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.ui-selected\:text-neutral-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.ui-selected\:text-neutral-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.ui-selected\:text-neutral-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.ui-selected\:text-neutral-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.ui-selected\:text-neutral-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.ui-selected\:text-orange-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.ui-selected\:text-orange-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.ui-selected\:text-orange-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.ui-selected\:text-orange-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.ui-selected\:text-orange-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.ui-selected\:text-orange-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.ui-selected\:text-orange-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.ui-selected\:text-orange-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.ui-selected\:text-orange-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.ui-selected\:text-orange-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.ui-selected\:text-orange-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.ui-selected\:text-pink-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.ui-selected\:text-pink-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.ui-selected\:text-pink-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.ui-selected\:text-pink-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.ui-selected\:text-pink-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.ui-selected\:text-pink-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.ui-selected\:text-pink-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.ui-selected\:text-pink-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.ui-selected\:text-pink-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.ui-selected\:text-pink-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.ui-selected\:text-pink-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.ui-selected\:text-purple-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.ui-selected\:text-purple-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.ui-selected\:text-purple-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.ui-selected\:text-purple-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.ui-selected\:text-purple-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.ui-selected\:text-purple-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.ui-selected\:text-purple-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.ui-selected\:text-purple-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.ui-selected\:text-purple-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.ui-selected\:text-purple-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.ui-selected\:text-purple-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.ui-selected\:text-red-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.ui-selected\:text-red-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.ui-selected\:text-red-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.ui-selected\:text-red-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.ui-selected\:text-red-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.ui-selected\:text-red-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.ui-selected\:text-red-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.ui-selected\:text-red-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.ui-selected\:text-red-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.ui-selected\:text-red-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.ui-selected\:text-red-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.ui-selected\:text-rose-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.ui-selected\:text-rose-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.ui-selected\:text-rose-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.ui-selected\:text-rose-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.ui-selected\:text-rose-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.ui-selected\:text-rose-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.ui-selected\:text-rose-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.ui-selected\:text-rose-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.ui-selected\:text-rose-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.ui-selected\:text-rose-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.ui-selected\:text-rose-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.ui-selected\:text-sky-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.ui-selected\:text-sky-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.ui-selected\:text-sky-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.ui-selected\:text-sky-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.ui-selected\:text-sky-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.ui-selected\:text-sky-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.ui-selected\:text-sky-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.ui-selected\:text-sky-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.ui-selected\:text-sky-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.ui-selected\:text-sky-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.ui-selected\:text-sky-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.ui-selected\:text-slate-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.ui-selected\:text-slate-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.ui-selected\:text-slate-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.ui-selected\:text-slate-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.ui-selected\:text-slate-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.ui-selected\:text-slate-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.ui-selected\:text-slate-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.ui-selected\:text-slate-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.ui-selected\:text-slate-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.ui-selected\:text-slate-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.ui-selected\:text-slate-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.ui-selected\:text-stone-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.ui-selected\:text-stone-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.ui-selected\:text-stone-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.ui-selected\:text-stone-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.ui-selected\:text-stone-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.ui-selected\:text-stone-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.ui-selected\:text-stone-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.ui-selected\:text-stone-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.ui-selected\:text-stone-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.ui-selected\:text-stone-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.ui-selected\:text-stone-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.ui-selected\:text-teal-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.ui-selected\:text-teal-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.ui-selected\:text-teal-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.ui-selected\:text-teal-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.ui-selected\:text-teal-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.ui-selected\:text-teal-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.ui-selected\:text-teal-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.ui-selected\:text-teal-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.ui-selected\:text-teal-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.ui-selected\:text-teal-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.ui-selected\:text-teal-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.ui-selected\:text-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-emphasis[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-strong[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-violet-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.ui-selected\:text-violet-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.ui-selected\:text-violet-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.ui-selected\:text-violet-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.ui-selected\:text-violet-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.ui-selected\:text-violet-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.ui-selected\:text-violet-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.ui-selected\:text-violet-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.ui-selected\:text-violet-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.ui-selected\:text-violet-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.ui-selected\:text-violet-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.ui-selected\:text-yellow-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.ui-selected\:text-yellow-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.ui-selected\:text-yellow-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.ui-selected\:text-yellow-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.ui-selected\:text-yellow-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.ui-selected\:text-yellow-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.ui-selected\:text-yellow-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.ui-selected\:text-yellow-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.ui-selected\:text-yellow-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.ui-selected\:text-yellow-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.ui-selected\:text-yellow-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.ui-selected\:text-zinc-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.ui-selected\:text-zinc-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.ui-selected\:text-zinc-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.ui-selected\:text-zinc-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.ui-selected\:text-zinc-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-zinc-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.ui-selected\:text-zinc-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.ui-selected\:text-zinc-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.ui-selected\:text-zinc-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.ui-selected\:text-zinc-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.ui-selected\:text-zinc-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.ui-selected\:shadow-tremor-input[data-headlessui-state~=selected]{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:where([data-headlessui-state~=selected]) .ui-selected\:border-b-2{border-bottom-width:2px}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ui-active\:bg-tremor-background-muted[data-headlessui-state~=active]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-active\:text-tremor-content-strong[data-headlessui-state~=active]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=active]) .ui-active\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=active]) .ui-active\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:is(.dark .dark\:divide-dark-tremor-border)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(55 65 81/var(--tw-divide-opacity))}:is(.dark .dark\:border-dark-tremor-background){--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-emphasis){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-inverted){--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-subtle){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-emphasis){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-subtle){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-border){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted){--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted\/70){background-color:rgba(30,27,75,.7)}:is(.dark .dark\:bg-dark-tremor-brand-subtle){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content-subtle){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-10){--tw-bg-opacity:0.1}:is(.dark .dark\:bg-opacity-25){--tw-bg-opacity:0.25}:is(.dark .dark\:bg-opacity-30){--tw-bg-opacity:0.3}:is(.dark .dark\:fill-dark-tremor-content){fill:#6b7280}:is(.dark .dark\:fill-dark-tremor-content-emphasis){fill:#e5e7eb}:is(.dark .dark\:stroke-dark-tremor-background){stroke:#111827}:is(.dark .dark\:stroke-dark-tremor-border){stroke:#374151}:is(.dark .dark\:stroke-dark-tremor-brand){stroke:#6366f1}:is(.dark .dark\:stroke-dark-tremor-brand-muted){stroke:#1e1b4b}:is(.dark .dark\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-emphasis){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-inverted){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-subtle){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:accent-dark-tremor-brand){accent-color:#6366f1}:is(.dark .dark\:opacity-25){opacity:.25}:is(.dark .dark\:shadow-dark-tremor-card){--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-dropdown){--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:outline-dark-tremor-brand){outline-color:#6366f1}:is(.dark .dark\:ring-dark-tremor-brand-inverted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-brand-muted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-ring){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-brand-emphasis:hover){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-content-emphasis:hover){--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-muted:hover){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-subtle:hover){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-emphasis:hover){--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-faint:hover){--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-opacity-20:hover){--tw-bg-opacity:0.2}:is(.dark .dark\:hover\:text-dark-tremor-brand-emphasis:hover){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:is(.dark .hover\:dark\:text-dark-tremor-content):hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:focus\:border-dark-tremor-brand-subtle:focus){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .focus\:dark\:border-dark-tremor-brand-subtle):focus{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:focus\:ring-dark-tremor-brand-muted:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .focus\:dark\:ring-dark-tremor-brand-muted):focus{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .aria-selected\:dark\:\!bg-dark-tremor-background-subtle)[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(31 41 55/var(--tw-bg-opacity))!important}:is(.dark .dark\:aria-selected\:bg-dark-tremor-background-emphasis[aria-selected=true]){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-content-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-border[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-brand[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background-muted[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-emphasis[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-strong[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:shadow-dark-tremor-input[data-headlessui-state~=selected]){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:ui-active\:bg-dark-tremor-background-muted[data-headlessui-state~=active]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-active\:text-dark-tremor-content-strong[data-headlessui-state~=active]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}@media (min-width:640px){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:h-screen{height:100vh}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-lg{max-width:32rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-start{align-items:flex-start}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}}@media (min-width:768px){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}}@media (min-width:1024px){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:max-w-\[200px\]{max-width:200px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button,.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/ec159349637c90ad-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/513657b02c5c193f-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/fd4db3eb5472fc27-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/51ed15f9841b9f9d-s.woff2) format("woff2");unicode-range:u+0370-03ff}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/05a31a2ca4975f99-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/d6b16ce4a6175f26-s.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Inter_c23dc8;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ui/_next/static/media/c9a5bc6a7c948fb0-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Inter_Fallback_c23dc8;src:local("Arial");ascent-override:90.20%;descent-override:22.48%;line-gap-override:0.00%;size-adjust:107.40%}.__className_c23dc8{font-family:__Inter_c23dc8,__Inter_Fallback_c23dc8;font-style:normal} \ No newline at end of file +*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af}input::placeholder,textarea::placeholder{color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow:0 0 #0000}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors:active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors:active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media (forced-colors:active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.right-0{right:0}.right-1{right:.25rem}.right-1\/2{right:50%}.right-10{right:2.5rem}.top-0{top:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.m-2{margin:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-0{margin-left:0}.-ml-0\.5{margin-left:-.125rem}.-ml-1{margin-left:-.25rem}.-ml-1\.5{margin-left:-.375rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-2\.5{margin-left:.625rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-2\.5{margin-right:.625rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-8{margin-right:2rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[75vh\]{height:75vh}.h-\[80vh\]{height:80vh}.h-full{height:100%}.max-h-\[228px\]{max-height:228px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.min-h-\[300px\]{min-height:300px}.min-h-\[400px\]{min-height:400px}.min-h-\[500px\]{min-height:500px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:.25rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-9{width:2.25rem}.w-\[90\%\]{width:90%}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-\[10rem\]{min-width:10rem}.min-w-min{min-width:-moz-min-content;min-width:min-content}.max-w-\[100px\]{max-width:100px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-4{--tw-translate-y:-1rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/2{--tw-translate-x:50%}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.-rotate-180{--tw-rotate:-180deg}.-rotate-180,.-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate:-90deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-none{grid-template-columns:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.125rem * var(--tw-space-x-reverse));margin-left:calc(.125rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.375rem * var(--tw-space-x-reverse));margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.625rem * var(--tw-space-x-reverse));margin-left:calc(.625rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-tremor-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[1px\]{border-radius:1px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-tremor-default{border-radius:.5rem}.rounded-tremor-full{border-radius:9999px}.rounded-tremor-small{border-radius:.375rem}.rounded-b-tremor-default{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-l-tremor-default{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-tremor-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-tremor-small{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-r-tremor-default{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-r-tremor-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-r-tremor-small{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-tremor-default{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-r-4{border-right-width:4px}.border-t-4{border-top-width:4px}.border-t-\[1px\]{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.border-dark-tremor-background{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-dark-tremor-border{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-dark-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-dark-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-dark-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-dark-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-tremor-background{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-tremor-brand-emphasis{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.border-tremor-brand-inverted{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-tremor-brand-subtle{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.bg-dark-tremor-background{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-dark-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-dark-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-dark-tremor-brand-emphasis{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-dark-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}.bg-dark-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-dark-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-tremor-background-emphasis{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-tremor-background-subtle{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-tremor-border{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-tremor-brand{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-tremor-brand-faint{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.bg-tremor-brand-muted{--tw-bg-opacity:1;background-color:rgb(134 136 239/var(--tw-bg-opacity))}.bg-tremor-brand-muted\/50{background-color:rgba(134,136,239,.5)}.bg-tremor-brand-subtle{--tw-bg-opacity:1;background-color:rgb(142 145 235/var(--tw-bg-opacity))}.bg-tremor-content{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-tremor-content-subtle{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-20{--tw-bg-opacity:0.2}.bg-opacity-30{--tw-bg-opacity:0.3}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.fill-amber-100{fill:#fef3c7}.fill-amber-200{fill:#fde68a}.fill-amber-300{fill:#fcd34d}.fill-amber-400{fill:#fbbf24}.fill-amber-50{fill:#fffbeb}.fill-amber-500{fill:#f59e0b}.fill-amber-600{fill:#d97706}.fill-amber-700{fill:#b45309}.fill-amber-800{fill:#92400e}.fill-amber-900{fill:#78350f}.fill-amber-950{fill:#451a03}.fill-blue-100{fill:#dbeafe}.fill-blue-200{fill:#bfdbfe}.fill-blue-300{fill:#93c5fd}.fill-blue-400{fill:#60a5fa}.fill-blue-50{fill:#eff6ff}.fill-blue-500{fill:#3b82f6}.fill-blue-600{fill:#2563eb}.fill-blue-700{fill:#1d4ed8}.fill-blue-800{fill:#1e40af}.fill-blue-900{fill:#1e3a8a}.fill-blue-950{fill:#172554}.fill-cyan-100{fill:#cffafe}.fill-cyan-200{fill:#a5f3fc}.fill-cyan-300{fill:#67e8f9}.fill-cyan-400{fill:#22d3ee}.fill-cyan-50{fill:#ecfeff}.fill-cyan-500{fill:#06b6d4}.fill-cyan-600{fill:#0891b2}.fill-cyan-700{fill:#0e7490}.fill-cyan-800{fill:#155e75}.fill-cyan-900{fill:#164e63}.fill-cyan-950{fill:#083344}.fill-emerald-100{fill:#d1fae5}.fill-emerald-200{fill:#a7f3d0}.fill-emerald-300{fill:#6ee7b7}.fill-emerald-400{fill:#34d399}.fill-emerald-50{fill:#ecfdf5}.fill-emerald-500{fill:#10b981}.fill-emerald-600{fill:#059669}.fill-emerald-700{fill:#047857}.fill-emerald-800{fill:#065f46}.fill-emerald-900{fill:#064e3b}.fill-emerald-950{fill:#022c22}.fill-fuchsia-100{fill:#fae8ff}.fill-fuchsia-200{fill:#f5d0fe}.fill-fuchsia-300{fill:#f0abfc}.fill-fuchsia-400{fill:#e879f9}.fill-fuchsia-50{fill:#fdf4ff}.fill-fuchsia-500{fill:#d946ef}.fill-fuchsia-600{fill:#c026d3}.fill-fuchsia-700{fill:#a21caf}.fill-fuchsia-800{fill:#86198f}.fill-fuchsia-900{fill:#701a75}.fill-fuchsia-950{fill:#4a044e}.fill-gray-100{fill:#f3f4f6}.fill-gray-200{fill:#e5e7eb}.fill-gray-300{fill:#d1d5db}.fill-gray-400{fill:#9ca3af}.fill-gray-50{fill:#f9fafb}.fill-gray-500{fill:#6b7280}.fill-gray-600{fill:#4b5563}.fill-gray-700{fill:#374151}.fill-gray-800{fill:#1f2937}.fill-gray-900{fill:#111827}.fill-gray-950{fill:#030712}.fill-green-100{fill:#dcfce7}.fill-green-200{fill:#bbf7d0}.fill-green-300{fill:#86efac}.fill-green-400{fill:#4ade80}.fill-green-50{fill:#f0fdf4}.fill-green-500{fill:#22c55e}.fill-green-600{fill:#16a34a}.fill-green-700{fill:#15803d}.fill-green-800{fill:#166534}.fill-green-900{fill:#14532d}.fill-green-950{fill:#052e16}.fill-indigo-100{fill:#e0e7ff}.fill-indigo-200{fill:#c7d2fe}.fill-indigo-300{fill:#a5b4fc}.fill-indigo-400{fill:#818cf8}.fill-indigo-50{fill:#eef2ff}.fill-indigo-500{fill:#6366f1}.fill-indigo-600{fill:#4f46e5}.fill-indigo-700{fill:#4338ca}.fill-indigo-800{fill:#3730a3}.fill-indigo-900{fill:#312e81}.fill-indigo-950{fill:#1e1b4b}.fill-lime-100{fill:#ecfccb}.fill-lime-200{fill:#d9f99d}.fill-lime-300{fill:#bef264}.fill-lime-400{fill:#a3e635}.fill-lime-50{fill:#f7fee7}.fill-lime-500{fill:#84cc16}.fill-lime-600{fill:#65a30d}.fill-lime-700{fill:#4d7c0f}.fill-lime-800{fill:#3f6212}.fill-lime-900{fill:#365314}.fill-lime-950{fill:#1a2e05}.fill-neutral-100{fill:#f5f5f5}.fill-neutral-200{fill:#e5e5e5}.fill-neutral-300{fill:#d4d4d4}.fill-neutral-400{fill:#a3a3a3}.fill-neutral-50{fill:#fafafa}.fill-neutral-500{fill:#737373}.fill-neutral-600{fill:#525252}.fill-neutral-700{fill:#404040}.fill-neutral-800{fill:#262626}.fill-neutral-900{fill:#171717}.fill-neutral-950{fill:#0a0a0a}.fill-orange-100{fill:#ffedd5}.fill-orange-200{fill:#fed7aa}.fill-orange-300{fill:#fdba74}.fill-orange-400{fill:#fb923c}.fill-orange-50{fill:#fff7ed}.fill-orange-500{fill:#f97316}.fill-orange-600{fill:#ea580c}.fill-orange-700{fill:#c2410c}.fill-orange-800{fill:#9a3412}.fill-orange-900{fill:#7c2d12}.fill-orange-950{fill:#431407}.fill-pink-100{fill:#fce7f3}.fill-pink-200{fill:#fbcfe8}.fill-pink-300{fill:#f9a8d4}.fill-pink-400{fill:#f472b6}.fill-pink-50{fill:#fdf2f8}.fill-pink-500{fill:#ec4899}.fill-pink-600{fill:#db2777}.fill-pink-700{fill:#be185d}.fill-pink-800{fill:#9d174d}.fill-pink-900{fill:#831843}.fill-pink-950{fill:#500724}.fill-purple-100{fill:#f3e8ff}.fill-purple-200{fill:#e9d5ff}.fill-purple-300{fill:#d8b4fe}.fill-purple-400{fill:#c084fc}.fill-purple-50{fill:#faf5ff}.fill-purple-500{fill:#a855f7}.fill-purple-600{fill:#9333ea}.fill-purple-700{fill:#7e22ce}.fill-purple-800{fill:#6b21a8}.fill-purple-900{fill:#581c87}.fill-purple-950{fill:#3b0764}.fill-red-100{fill:#fee2e2}.fill-red-200{fill:#fecaca}.fill-red-300{fill:#fca5a5}.fill-red-400{fill:#f87171}.fill-red-50{fill:#fef2f2}.fill-red-500{fill:#ef4444}.fill-red-600{fill:#dc2626}.fill-red-700{fill:#b91c1c}.fill-red-800{fill:#991b1b}.fill-red-900{fill:#7f1d1d}.fill-red-950{fill:#450a0a}.fill-rose-100{fill:#ffe4e6}.fill-rose-200{fill:#fecdd3}.fill-rose-300{fill:#fda4af}.fill-rose-400{fill:#fb7185}.fill-rose-50{fill:#fff1f2}.fill-rose-500{fill:#f43f5e}.fill-rose-600{fill:#e11d48}.fill-rose-700{fill:#be123c}.fill-rose-800{fill:#9f1239}.fill-rose-900{fill:#881337}.fill-rose-950{fill:#4c0519}.fill-sky-100{fill:#e0f2fe}.fill-sky-200{fill:#bae6fd}.fill-sky-300{fill:#7dd3fc}.fill-sky-400{fill:#38bdf8}.fill-sky-50{fill:#f0f9ff}.fill-sky-500{fill:#0ea5e9}.fill-sky-600{fill:#0284c7}.fill-sky-700{fill:#0369a1}.fill-sky-800{fill:#075985}.fill-sky-900{fill:#0c4a6e}.fill-sky-950{fill:#082f49}.fill-slate-100{fill:#f1f5f9}.fill-slate-200{fill:#e2e8f0}.fill-slate-300{fill:#cbd5e1}.fill-slate-400{fill:#94a3b8}.fill-slate-50{fill:#f8fafc}.fill-slate-500{fill:#64748b}.fill-slate-600{fill:#475569}.fill-slate-700{fill:#334155}.fill-slate-800{fill:#1e293b}.fill-slate-900{fill:#0f172a}.fill-slate-950{fill:#020617}.fill-stone-100{fill:#f5f5f4}.fill-stone-200{fill:#e7e5e4}.fill-stone-300{fill:#d6d3d1}.fill-stone-400{fill:#a8a29e}.fill-stone-50{fill:#fafaf9}.fill-stone-500{fill:#78716c}.fill-stone-600{fill:#57534e}.fill-stone-700{fill:#44403c}.fill-stone-800{fill:#292524}.fill-stone-900{fill:#1c1917}.fill-stone-950{fill:#0c0a09}.fill-teal-100{fill:#ccfbf1}.fill-teal-200{fill:#99f6e4}.fill-teal-300{fill:#5eead4}.fill-teal-400{fill:#2dd4bf}.fill-teal-50{fill:#f0fdfa}.fill-teal-500{fill:#14b8a6}.fill-teal-600{fill:#0d9488}.fill-teal-700{fill:#0f766e}.fill-teal-800{fill:#115e59}.fill-teal-900{fill:#134e4a}.fill-teal-950{fill:#042f2e}.fill-tremor-content{fill:#6b7280}.fill-tremor-content-emphasis{fill:#374151}.fill-violet-100{fill:#ede9fe}.fill-violet-200{fill:#ddd6fe}.fill-violet-300{fill:#c4b5fd}.fill-violet-400{fill:#a78bfa}.fill-violet-50{fill:#f5f3ff}.fill-violet-500{fill:#8b5cf6}.fill-violet-600{fill:#7c3aed}.fill-violet-700{fill:#6d28d9}.fill-violet-800{fill:#5b21b6}.fill-violet-900{fill:#4c1d95}.fill-violet-950{fill:#2e1065}.fill-yellow-100{fill:#fef9c3}.fill-yellow-200{fill:#fef08a}.fill-yellow-300{fill:#fde047}.fill-yellow-400{fill:#facc15}.fill-yellow-50{fill:#fefce8}.fill-yellow-500{fill:#eab308}.fill-yellow-600{fill:#ca8a04}.fill-yellow-700{fill:#a16207}.fill-yellow-800{fill:#854d0e}.fill-yellow-900{fill:#713f12}.fill-yellow-950{fill:#422006}.fill-zinc-100{fill:#f4f4f5}.fill-zinc-200{fill:#e4e4e7}.fill-zinc-300{fill:#d4d4d8}.fill-zinc-400{fill:#a1a1aa}.fill-zinc-50{fill:#fafafa}.fill-zinc-500{fill:#71717a}.fill-zinc-600{fill:#52525b}.fill-zinc-700{fill:#3f3f46}.fill-zinc-800{fill:#27272a}.fill-zinc-900{fill:#18181b}.fill-zinc-950{fill:#09090b}.stroke-amber-100{stroke:#fef3c7}.stroke-amber-200{stroke:#fde68a}.stroke-amber-300{stroke:#fcd34d}.stroke-amber-400{stroke:#fbbf24}.stroke-amber-50{stroke:#fffbeb}.stroke-amber-500{stroke:#f59e0b}.stroke-amber-600{stroke:#d97706}.stroke-amber-700{stroke:#b45309}.stroke-amber-800{stroke:#92400e}.stroke-amber-900{stroke:#78350f}.stroke-amber-950{stroke:#451a03}.stroke-blue-100{stroke:#dbeafe}.stroke-blue-200{stroke:#bfdbfe}.stroke-blue-300{stroke:#93c5fd}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-50{stroke:#eff6ff}.stroke-blue-500{stroke:#3b82f6}.stroke-blue-600{stroke:#2563eb}.stroke-blue-700{stroke:#1d4ed8}.stroke-blue-800{stroke:#1e40af}.stroke-blue-900{stroke:#1e3a8a}.stroke-blue-950{stroke:#172554}.stroke-cyan-100{stroke:#cffafe}.stroke-cyan-200{stroke:#a5f3fc}.stroke-cyan-300{stroke:#67e8f9}.stroke-cyan-400{stroke:#22d3ee}.stroke-cyan-50{stroke:#ecfeff}.stroke-cyan-500{stroke:#06b6d4}.stroke-cyan-600{stroke:#0891b2}.stroke-cyan-700{stroke:#0e7490}.stroke-cyan-800{stroke:#155e75}.stroke-cyan-900{stroke:#164e63}.stroke-cyan-950{stroke:#083344}.stroke-dark-tremor-background{stroke:#111827}.stroke-dark-tremor-border{stroke:#374151}.stroke-emerald-100{stroke:#d1fae5}.stroke-emerald-200{stroke:#a7f3d0}.stroke-emerald-300{stroke:#6ee7b7}.stroke-emerald-400{stroke:#34d399}.stroke-emerald-50{stroke:#ecfdf5}.stroke-emerald-500{stroke:#10b981}.stroke-emerald-600{stroke:#059669}.stroke-emerald-700{stroke:#047857}.stroke-emerald-800{stroke:#065f46}.stroke-emerald-900{stroke:#064e3b}.stroke-emerald-950{stroke:#022c22}.stroke-fuchsia-100{stroke:#fae8ff}.stroke-fuchsia-200{stroke:#f5d0fe}.stroke-fuchsia-300{stroke:#f0abfc}.stroke-fuchsia-400{stroke:#e879f9}.stroke-fuchsia-50{stroke:#fdf4ff}.stroke-fuchsia-500{stroke:#d946ef}.stroke-fuchsia-600{stroke:#c026d3}.stroke-fuchsia-700{stroke:#a21caf}.stroke-fuchsia-800{stroke:#86198f}.stroke-fuchsia-900{stroke:#701a75}.stroke-fuchsia-950{stroke:#4a044e}.stroke-gray-100{stroke:#f3f4f6}.stroke-gray-200{stroke:#e5e7eb}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-400{stroke:#9ca3af}.stroke-gray-50{stroke:#f9fafb}.stroke-gray-500{stroke:#6b7280}.stroke-gray-600{stroke:#4b5563}.stroke-gray-700{stroke:#374151}.stroke-gray-800{stroke:#1f2937}.stroke-gray-900{stroke:#111827}.stroke-gray-950{stroke:#030712}.stroke-green-100{stroke:#dcfce7}.stroke-green-200{stroke:#bbf7d0}.stroke-green-300{stroke:#86efac}.stroke-green-400{stroke:#4ade80}.stroke-green-50{stroke:#f0fdf4}.stroke-green-500{stroke:#22c55e}.stroke-green-600{stroke:#16a34a}.stroke-green-700{stroke:#15803d}.stroke-green-800{stroke:#166534}.stroke-green-900{stroke:#14532d}.stroke-green-950{stroke:#052e16}.stroke-indigo-100{stroke:#e0e7ff}.stroke-indigo-200{stroke:#c7d2fe}.stroke-indigo-300{stroke:#a5b4fc}.stroke-indigo-400{stroke:#818cf8}.stroke-indigo-50{stroke:#eef2ff}.stroke-indigo-500{stroke:#6366f1}.stroke-indigo-600{stroke:#4f46e5}.stroke-indigo-700{stroke:#4338ca}.stroke-indigo-800{stroke:#3730a3}.stroke-indigo-900{stroke:#312e81}.stroke-indigo-950{stroke:#1e1b4b}.stroke-lime-100{stroke:#ecfccb}.stroke-lime-200{stroke:#d9f99d}.stroke-lime-300{stroke:#bef264}.stroke-lime-400{stroke:#a3e635}.stroke-lime-50{stroke:#f7fee7}.stroke-lime-500{stroke:#84cc16}.stroke-lime-600{stroke:#65a30d}.stroke-lime-700{stroke:#4d7c0f}.stroke-lime-800{stroke:#3f6212}.stroke-lime-900{stroke:#365314}.stroke-lime-950{stroke:#1a2e05}.stroke-neutral-100{stroke:#f5f5f5}.stroke-neutral-200{stroke:#e5e5e5}.stroke-neutral-300{stroke:#d4d4d4}.stroke-neutral-400{stroke:#a3a3a3}.stroke-neutral-50{stroke:#fafafa}.stroke-neutral-500{stroke:#737373}.stroke-neutral-600{stroke:#525252}.stroke-neutral-700{stroke:#404040}.stroke-neutral-800{stroke:#262626}.stroke-neutral-900{stroke:#171717}.stroke-neutral-950{stroke:#0a0a0a}.stroke-orange-100{stroke:#ffedd5}.stroke-orange-200{stroke:#fed7aa}.stroke-orange-300{stroke:#fdba74}.stroke-orange-400{stroke:#fb923c}.stroke-orange-50{stroke:#fff7ed}.stroke-orange-500{stroke:#f97316}.stroke-orange-600{stroke:#ea580c}.stroke-orange-700{stroke:#c2410c}.stroke-orange-800{stroke:#9a3412}.stroke-orange-900{stroke:#7c2d12}.stroke-orange-950{stroke:#431407}.stroke-pink-100{stroke:#fce7f3}.stroke-pink-200{stroke:#fbcfe8}.stroke-pink-300{stroke:#f9a8d4}.stroke-pink-400{stroke:#f472b6}.stroke-pink-50{stroke:#fdf2f8}.stroke-pink-500{stroke:#ec4899}.stroke-pink-600{stroke:#db2777}.stroke-pink-700{stroke:#be185d}.stroke-pink-800{stroke:#9d174d}.stroke-pink-900{stroke:#831843}.stroke-pink-950{stroke:#500724}.stroke-purple-100{stroke:#f3e8ff}.stroke-purple-200{stroke:#e9d5ff}.stroke-purple-300{stroke:#d8b4fe}.stroke-purple-400{stroke:#c084fc}.stroke-purple-50{stroke:#faf5ff}.stroke-purple-500{stroke:#a855f7}.stroke-purple-600{stroke:#9333ea}.stroke-purple-700{stroke:#7e22ce}.stroke-purple-800{stroke:#6b21a8}.stroke-purple-900{stroke:#581c87}.stroke-purple-950{stroke:#3b0764}.stroke-red-100{stroke:#fee2e2}.stroke-red-200{stroke:#fecaca}.stroke-red-300{stroke:#fca5a5}.stroke-red-400{stroke:#f87171}.stroke-red-50{stroke:#fef2f2}.stroke-red-500{stroke:#ef4444}.stroke-red-600{stroke:#dc2626}.stroke-red-700{stroke:#b91c1c}.stroke-red-800{stroke:#991b1b}.stroke-red-900{stroke:#7f1d1d}.stroke-red-950{stroke:#450a0a}.stroke-rose-100{stroke:#ffe4e6}.stroke-rose-200{stroke:#fecdd3}.stroke-rose-300{stroke:#fda4af}.stroke-rose-400{stroke:#fb7185}.stroke-rose-50{stroke:#fff1f2}.stroke-rose-500{stroke:#f43f5e}.stroke-rose-600{stroke:#e11d48}.stroke-rose-700{stroke:#be123c}.stroke-rose-800{stroke:#9f1239}.stroke-rose-900{stroke:#881337}.stroke-rose-950{stroke:#4c0519}.stroke-sky-100{stroke:#e0f2fe}.stroke-sky-200{stroke:#bae6fd}.stroke-sky-300{stroke:#7dd3fc}.stroke-sky-400{stroke:#38bdf8}.stroke-sky-50{stroke:#f0f9ff}.stroke-sky-500{stroke:#0ea5e9}.stroke-sky-600{stroke:#0284c7}.stroke-sky-700{stroke:#0369a1}.stroke-sky-800{stroke:#075985}.stroke-sky-900{stroke:#0c4a6e}.stroke-sky-950{stroke:#082f49}.stroke-slate-100{stroke:#f1f5f9}.stroke-slate-200{stroke:#e2e8f0}.stroke-slate-300{stroke:#cbd5e1}.stroke-slate-400{stroke:#94a3b8}.stroke-slate-50{stroke:#f8fafc}.stroke-slate-500{stroke:#64748b}.stroke-slate-600{stroke:#475569}.stroke-slate-700{stroke:#334155}.stroke-slate-800{stroke:#1e293b}.stroke-slate-900{stroke:#0f172a}.stroke-slate-950{stroke:#020617}.stroke-stone-100{stroke:#f5f5f4}.stroke-stone-200{stroke:#e7e5e4}.stroke-stone-300{stroke:#d6d3d1}.stroke-stone-400{stroke:#a8a29e}.stroke-stone-50{stroke:#fafaf9}.stroke-stone-500{stroke:#78716c}.stroke-stone-600{stroke:#57534e}.stroke-stone-700{stroke:#44403c}.stroke-stone-800{stroke:#292524}.stroke-stone-900{stroke:#1c1917}.stroke-stone-950{stroke:#0c0a09}.stroke-teal-100{stroke:#ccfbf1}.stroke-teal-200{stroke:#99f6e4}.stroke-teal-300{stroke:#5eead4}.stroke-teal-400{stroke:#2dd4bf}.stroke-teal-50{stroke:#f0fdfa}.stroke-teal-500{stroke:#14b8a6}.stroke-teal-600{stroke:#0d9488}.stroke-teal-700{stroke:#0f766e}.stroke-teal-800{stroke:#115e59}.stroke-teal-900{stroke:#134e4a}.stroke-teal-950{stroke:#042f2e}.stroke-tremor-background{stroke:#fff}.stroke-tremor-border{stroke:#e5e7eb}.stroke-tremor-brand{stroke:#6366f1}.stroke-tremor-brand-muted\/50{stroke:rgba(134,136,239,.5)}.stroke-violet-100{stroke:#ede9fe}.stroke-violet-200{stroke:#ddd6fe}.stroke-violet-300{stroke:#c4b5fd}.stroke-violet-400{stroke:#a78bfa}.stroke-violet-50{stroke:#f5f3ff}.stroke-violet-500{stroke:#8b5cf6}.stroke-violet-600{stroke:#7c3aed}.stroke-violet-700{stroke:#6d28d9}.stroke-violet-800{stroke:#5b21b6}.stroke-violet-900{stroke:#4c1d95}.stroke-violet-950{stroke:#2e1065}.stroke-yellow-100{stroke:#fef9c3}.stroke-yellow-200{stroke:#fef08a}.stroke-yellow-300{stroke:#fde047}.stroke-yellow-400{stroke:#facc15}.stroke-yellow-50{stroke:#fefce8}.stroke-yellow-500{stroke:#eab308}.stroke-yellow-600{stroke:#ca8a04}.stroke-yellow-700{stroke:#a16207}.stroke-yellow-800{stroke:#854d0e}.stroke-yellow-900{stroke:#713f12}.stroke-yellow-950{stroke:#422006}.stroke-zinc-100{stroke:#f4f4f5}.stroke-zinc-200{stroke:#e4e4e7}.stroke-zinc-300{stroke:#d4d4d8}.stroke-zinc-400{stroke:#a1a1aa}.stroke-zinc-50{stroke:#fafafa}.stroke-zinc-500{stroke:#71717a}.stroke-zinc-600{stroke:#52525b}.stroke-zinc-700{stroke:#3f3f46}.stroke-zinc-800{stroke:#27272a}.stroke-zinc-900{stroke:#18181b}.stroke-zinc-950{stroke:#09090b}.stroke-1{stroke-width:1}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-1{padding-right:.25rem}.pr-1\.5{padding-right:.375rem}.pr-12{padding-right:3rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[12px\]{font-size:12px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-tremor-default{font-size:.775rem;line-height:1.15rem}.text-tremor-label{font-size:.75rem;line-height:.3rem}.text-tremor-metric{font-size:1.675rem;line-height:2.15rem}.text-tremor-title{font-size:1.025rem;line-height:1.65rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-dark-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-dark-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-dark-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-dark-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-dark-tremor-content-subtle{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-tremor-brand-emphasis{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-tremor-brand-inverted{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-tremor-content{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-tremor-content-subtle{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.accent-dark-tremor-brand,.accent-tremor-brand{accent-color:#6366f1}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow,.shadow-dark-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-dark-tremor-card,.shadow-dark-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-dark-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-tremor-card{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-card{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-tremor-dropdown{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-tremor-dropdown,.shadow-tremor-input{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-tremor-brand{outline-color:#6366f1}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-amber-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 243 199/var(--tw-ring-opacity))}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity))}.ring-amber-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 251 235/var(--tw-ring-opacity))}.ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.ring-amber-600{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity))}.ring-amber-700{--tw-ring-opacity:1;--tw-ring-color:rgb(180 83 9/var(--tw-ring-opacity))}.ring-amber-800{--tw-ring-opacity:1;--tw-ring-color:rgb(146 64 14/var(--tw-ring-opacity))}.ring-amber-900{--tw-ring-opacity:1;--tw-ring-color:rgb(120 53 15/var(--tw-ring-opacity))}.ring-amber-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 26 3/var(--tw-ring-opacity))}.ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity))}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity))}.ring-blue-50{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-blue-600{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity))}.ring-blue-700{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity))}.ring-blue-900{--tw-ring-opacity:1;--tw-ring-color:rgb(30 58 138/var(--tw-ring-opacity))}.ring-blue-950{--tw-ring-opacity:1;--tw-ring-color:rgb(23 37 84/var(--tw-ring-opacity))}.ring-cyan-100{--tw-ring-opacity:1;--tw-ring-color:rgb(207 250 254/var(--tw-ring-opacity))}.ring-cyan-200{--tw-ring-opacity:1;--tw-ring-color:rgb(165 243 252/var(--tw-ring-opacity))}.ring-cyan-300{--tw-ring-opacity:1;--tw-ring-color:rgb(103 232 249/var(--tw-ring-opacity))}.ring-cyan-400{--tw-ring-opacity:1;--tw-ring-color:rgb(34 211 238/var(--tw-ring-opacity))}.ring-cyan-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 254 255/var(--tw-ring-opacity))}.ring-cyan-500{--tw-ring-opacity:1;--tw-ring-color:rgb(6 182 212/var(--tw-ring-opacity))}.ring-cyan-600{--tw-ring-opacity:1;--tw-ring-color:rgb(8 145 178/var(--tw-ring-opacity))}.ring-cyan-700{--tw-ring-opacity:1;--tw-ring-color:rgb(14 116 144/var(--tw-ring-opacity))}.ring-cyan-800{--tw-ring-opacity:1;--tw-ring-color:rgb(21 94 117/var(--tw-ring-opacity))}.ring-cyan-900{--tw-ring-opacity:1;--tw-ring-color:rgb(22 78 99/var(--tw-ring-opacity))}.ring-cyan-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 51 68/var(--tw-ring-opacity))}.ring-dark-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-emerald-100{--tw-ring-opacity:1;--tw-ring-color:rgb(209 250 229/var(--tw-ring-opacity))}.ring-emerald-200{--tw-ring-opacity:1;--tw-ring-color:rgb(167 243 208/var(--tw-ring-opacity))}.ring-emerald-300{--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.ring-emerald-400{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity))}.ring-emerald-50{--tw-ring-opacity:1;--tw-ring-color:rgb(236 253 245/var(--tw-ring-opacity))}.ring-emerald-500{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity))}.ring-emerald-600{--tw-ring-opacity:1;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity))}.ring-emerald-700{--tw-ring-opacity:1;--tw-ring-color:rgb(4 120 87/var(--tw-ring-opacity))}.ring-emerald-800{--tw-ring-opacity:1;--tw-ring-color:rgb(6 95 70/var(--tw-ring-opacity))}.ring-emerald-900{--tw-ring-opacity:1;--tw-ring-color:rgb(6 78 59/var(--tw-ring-opacity))}.ring-emerald-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 44 34/var(--tw-ring-opacity))}.ring-fuchsia-100{--tw-ring-opacity:1;--tw-ring-color:rgb(250 232 255/var(--tw-ring-opacity))}.ring-fuchsia-200{--tw-ring-opacity:1;--tw-ring-color:rgb(245 208 254/var(--tw-ring-opacity))}.ring-fuchsia-300{--tw-ring-opacity:1;--tw-ring-color:rgb(240 171 252/var(--tw-ring-opacity))}.ring-fuchsia-400{--tw-ring-opacity:1;--tw-ring-color:rgb(232 121 249/var(--tw-ring-opacity))}.ring-fuchsia-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 244 255/var(--tw-ring-opacity))}.ring-fuchsia-500{--tw-ring-opacity:1;--tw-ring-color:rgb(217 70 239/var(--tw-ring-opacity))}.ring-fuchsia-600{--tw-ring-opacity:1;--tw-ring-color:rgb(192 38 211/var(--tw-ring-opacity))}.ring-fuchsia-700{--tw-ring-opacity:1;--tw-ring-color:rgb(162 28 175/var(--tw-ring-opacity))}.ring-fuchsia-800{--tw-ring-opacity:1;--tw-ring-color:rgb(134 25 143/var(--tw-ring-opacity))}.ring-fuchsia-900{--tw-ring-opacity:1;--tw-ring-color:rgb(112 26 117/var(--tw-ring-opacity))}.ring-fuchsia-950{--tw-ring-opacity:1;--tw-ring-color:rgb(74 4 78/var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity))}.ring-gray-950{--tw-ring-opacity:1;--tw-ring-color:rgb(3 7 18/var(--tw-ring-opacity))}.ring-green-100{--tw-ring-opacity:1;--tw-ring-color:rgb(220 252 231/var(--tw-ring-opacity))}.ring-green-200{--tw-ring-opacity:1;--tw-ring-color:rgb(187 247 208/var(--tw-ring-opacity))}.ring-green-300{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity))}.ring-green-400{--tw-ring-opacity:1;--tw-ring-color:rgb(74 222 128/var(--tw-ring-opacity))}.ring-green-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 244/var(--tw-ring-opacity))}.ring-green-500{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.ring-green-600{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity))}.ring-green-700{--tw-ring-opacity:1;--tw-ring-color:rgb(21 128 61/var(--tw-ring-opacity))}.ring-green-800{--tw-ring-opacity:1;--tw-ring-color:rgb(22 101 52/var(--tw-ring-opacity))}.ring-green-900{--tw-ring-opacity:1;--tw-ring-color:rgb(20 83 45/var(--tw-ring-opacity))}.ring-green-950{--tw-ring-opacity:1;--tw-ring-color:rgb(5 46 22/var(--tw-ring-opacity))}.ring-indigo-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 231 255/var(--tw-ring-opacity))}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity))}.ring-indigo-300{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity))}.ring-indigo-400{--tw-ring-opacity:1;--tw-ring-color:rgb(129 140 248/var(--tw-ring-opacity))}.ring-indigo-50{--tw-ring-opacity:1;--tw-ring-color:rgb(238 242 255/var(--tw-ring-opacity))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.ring-indigo-700{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity))}.ring-indigo-800{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity))}.ring-indigo-900{--tw-ring-opacity:1;--tw-ring-color:rgb(49 46 129/var(--tw-ring-opacity))}.ring-indigo-950{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}.ring-lime-100{--tw-ring-opacity:1;--tw-ring-color:rgb(236 252 203/var(--tw-ring-opacity))}.ring-lime-200{--tw-ring-opacity:1;--tw-ring-color:rgb(217 249 157/var(--tw-ring-opacity))}.ring-lime-300{--tw-ring-opacity:1;--tw-ring-color:rgb(190 242 100/var(--tw-ring-opacity))}.ring-lime-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 230 53/var(--tw-ring-opacity))}.ring-lime-50{--tw-ring-opacity:1;--tw-ring-color:rgb(247 254 231/var(--tw-ring-opacity))}.ring-lime-500{--tw-ring-opacity:1;--tw-ring-color:rgb(132 204 22/var(--tw-ring-opacity))}.ring-lime-600{--tw-ring-opacity:1;--tw-ring-color:rgb(101 163 13/var(--tw-ring-opacity))}.ring-lime-700{--tw-ring-opacity:1;--tw-ring-color:rgb(77 124 15/var(--tw-ring-opacity))}.ring-lime-800{--tw-ring-opacity:1;--tw-ring-color:rgb(63 98 18/var(--tw-ring-opacity))}.ring-lime-900{--tw-ring-opacity:1;--tw-ring-color:rgb(54 83 20/var(--tw-ring-opacity))}.ring-lime-950{--tw-ring-opacity:1;--tw-ring-color:rgb(26 46 5/var(--tw-ring-opacity))}.ring-neutral-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 245/var(--tw-ring-opacity))}.ring-neutral-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 229 229/var(--tw-ring-opacity))}.ring-neutral-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 212/var(--tw-ring-opacity))}.ring-neutral-400{--tw-ring-opacity:1;--tw-ring-color:rgb(163 163 163/var(--tw-ring-opacity))}.ring-neutral-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-neutral-500{--tw-ring-opacity:1;--tw-ring-color:rgb(115 115 115/var(--tw-ring-opacity))}.ring-neutral-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 82/var(--tw-ring-opacity))}.ring-neutral-700{--tw-ring-opacity:1;--tw-ring-color:rgb(64 64 64/var(--tw-ring-opacity))}.ring-neutral-800{--tw-ring-opacity:1;--tw-ring-color:rgb(38 38 38/var(--tw-ring-opacity))}.ring-neutral-900{--tw-ring-opacity:1;--tw-ring-color:rgb(23 23 23/var(--tw-ring-opacity))}.ring-neutral-950{--tw-ring-opacity:1;--tw-ring-color:rgb(10 10 10/var(--tw-ring-opacity))}.ring-orange-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 237 213/var(--tw-ring-opacity))}.ring-orange-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 215 170/var(--tw-ring-opacity))}.ring-orange-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 186 116/var(--tw-ring-opacity))}.ring-orange-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 146 60/var(--tw-ring-opacity))}.ring-orange-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 247 237/var(--tw-ring-opacity))}.ring-orange-500{--tw-ring-opacity:1;--tw-ring-color:rgb(249 115 22/var(--tw-ring-opacity))}.ring-orange-600{--tw-ring-opacity:1;--tw-ring-color:rgb(234 88 12/var(--tw-ring-opacity))}.ring-orange-700{--tw-ring-opacity:1;--tw-ring-color:rgb(194 65 12/var(--tw-ring-opacity))}.ring-orange-800{--tw-ring-opacity:1;--tw-ring-color:rgb(154 52 18/var(--tw-ring-opacity))}.ring-orange-900{--tw-ring-opacity:1;--tw-ring-color:rgb(124 45 18/var(--tw-ring-opacity))}.ring-orange-950{--tw-ring-opacity:1;--tw-ring-color:rgb(67 20 7/var(--tw-ring-opacity))}.ring-pink-100{--tw-ring-opacity:1;--tw-ring-color:rgb(252 231 243/var(--tw-ring-opacity))}.ring-pink-200{--tw-ring-opacity:1;--tw-ring-color:rgb(251 207 232/var(--tw-ring-opacity))}.ring-pink-300{--tw-ring-opacity:1;--tw-ring-color:rgb(249 168 212/var(--tw-ring-opacity))}.ring-pink-400{--tw-ring-opacity:1;--tw-ring-color:rgb(244 114 182/var(--tw-ring-opacity))}.ring-pink-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 242 248/var(--tw-ring-opacity))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity))}.ring-pink-600{--tw-ring-opacity:1;--tw-ring-color:rgb(219 39 119/var(--tw-ring-opacity))}.ring-pink-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 24 93/var(--tw-ring-opacity))}.ring-pink-800{--tw-ring-opacity:1;--tw-ring-color:rgb(157 23 77/var(--tw-ring-opacity))}.ring-pink-900{--tw-ring-opacity:1;--tw-ring-color:rgb(131 24 67/var(--tw-ring-opacity))}.ring-pink-950{--tw-ring-opacity:1;--tw-ring-color:rgb(80 7 36/var(--tw-ring-opacity))}.ring-purple-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 232 255/var(--tw-ring-opacity))}.ring-purple-200{--tw-ring-opacity:1;--tw-ring-color:rgb(233 213 255/var(--tw-ring-opacity))}.ring-purple-300{--tw-ring-opacity:1;--tw-ring-color:rgb(216 180 254/var(--tw-ring-opacity))}.ring-purple-400{--tw-ring-opacity:1;--tw-ring-color:rgb(192 132 252/var(--tw-ring-opacity))}.ring-purple-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 245 255/var(--tw-ring-opacity))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity))}.ring-purple-600{--tw-ring-opacity:1;--tw-ring-color:rgb(147 51 234/var(--tw-ring-opacity))}.ring-purple-700{--tw-ring-opacity:1;--tw-ring-color:rgb(126 34 206/var(--tw-ring-opacity))}.ring-purple-800{--tw-ring-opacity:1;--tw-ring-color:rgb(107 33 168/var(--tw-ring-opacity))}.ring-purple-900{--tw-ring-opacity:1;--tw-ring-color:rgb(88 28 135/var(--tw-ring-opacity))}.ring-purple-950{--tw-ring-opacity:1;--tw-ring-color:rgb(59 7 100/var(--tw-ring-opacity))}.ring-red-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 226 226/var(--tw-ring-opacity))}.ring-red-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity))}.ring-red-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity))}.ring-red-400{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity))}.ring-red-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 242 242/var(--tw-ring-opacity))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.ring-red-600{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.ring-red-700{--tw-ring-opacity:1;--tw-ring-color:rgb(185 28 28/var(--tw-ring-opacity))}.ring-red-800{--tw-ring-opacity:1;--tw-ring-color:rgb(153 27 27/var(--tw-ring-opacity))}.ring-red-900{--tw-ring-opacity:1;--tw-ring-color:rgb(127 29 29/var(--tw-ring-opacity))}.ring-red-950{--tw-ring-opacity:1;--tw-ring-color:rgb(69 10 10/var(--tw-ring-opacity))}.ring-rose-100{--tw-ring-opacity:1;--tw-ring-color:rgb(255 228 230/var(--tw-ring-opacity))}.ring-rose-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 205 211/var(--tw-ring-opacity))}.ring-rose-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 164 175/var(--tw-ring-opacity))}.ring-rose-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 113 133/var(--tw-ring-opacity))}.ring-rose-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 241 242/var(--tw-ring-opacity))}.ring-rose-500{--tw-ring-opacity:1;--tw-ring-color:rgb(244 63 94/var(--tw-ring-opacity))}.ring-rose-600{--tw-ring-opacity:1;--tw-ring-color:rgb(225 29 72/var(--tw-ring-opacity))}.ring-rose-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 18 60/var(--tw-ring-opacity))}.ring-rose-800{--tw-ring-opacity:1;--tw-ring-color:rgb(159 18 57/var(--tw-ring-opacity))}.ring-rose-900{--tw-ring-opacity:1;--tw-ring-color:rgb(136 19 55/var(--tw-ring-opacity))}.ring-rose-950{--tw-ring-opacity:1;--tw-ring-color:rgb(76 5 25/var(--tw-ring-opacity))}.ring-sky-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 242 254/var(--tw-ring-opacity))}.ring-sky-200{--tw-ring-opacity:1;--tw-ring-color:rgb(186 230 253/var(--tw-ring-opacity))}.ring-sky-300{--tw-ring-opacity:1;--tw-ring-color:rgb(125 211 252/var(--tw-ring-opacity))}.ring-sky-400{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.ring-sky-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 249 255/var(--tw-ring-opacity))}.ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.ring-sky-600{--tw-ring-opacity:1;--tw-ring-color:rgb(2 132 199/var(--tw-ring-opacity))}.ring-sky-700{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.ring-sky-800{--tw-ring-opacity:1;--tw-ring-color:rgb(7 89 133/var(--tw-ring-opacity))}.ring-sky-900{--tw-ring-opacity:1;--tw-ring-color:rgb(12 74 110/var(--tw-ring-opacity))}.ring-sky-950{--tw-ring-opacity:1;--tw-ring-color:rgb(8 47 73/var(--tw-ring-opacity))}.ring-slate-100{--tw-ring-opacity:1;--tw-ring-color:rgb(241 245 249/var(--tw-ring-opacity))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-slate-300{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity))}.ring-slate-400{--tw-ring-opacity:1;--tw-ring-color:rgb(148 163 184/var(--tw-ring-opacity))}.ring-slate-50{--tw-ring-opacity:1;--tw-ring-color:rgb(248 250 252/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.ring-slate-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 41 59/var(--tw-ring-opacity))}.ring-slate-900{--tw-ring-opacity:1;--tw-ring-color:rgb(15 23 42/var(--tw-ring-opacity))}.ring-slate-950{--tw-ring-opacity:1;--tw-ring-color:rgb(2 6 23/var(--tw-ring-opacity))}.ring-stone-100{--tw-ring-opacity:1;--tw-ring-color:rgb(245 245 244/var(--tw-ring-opacity))}.ring-stone-200{--tw-ring-opacity:1;--tw-ring-color:rgb(231 229 228/var(--tw-ring-opacity))}.ring-stone-300{--tw-ring-opacity:1;--tw-ring-color:rgb(214 211 209/var(--tw-ring-opacity))}.ring-stone-400{--tw-ring-opacity:1;--tw-ring-color:rgb(168 162 158/var(--tw-ring-opacity))}.ring-stone-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 249/var(--tw-ring-opacity))}.ring-stone-500{--tw-ring-opacity:1;--tw-ring-color:rgb(120 113 108/var(--tw-ring-opacity))}.ring-stone-600{--tw-ring-opacity:1;--tw-ring-color:rgb(87 83 78/var(--tw-ring-opacity))}.ring-stone-700{--tw-ring-opacity:1;--tw-ring-color:rgb(68 64 60/var(--tw-ring-opacity))}.ring-stone-800{--tw-ring-opacity:1;--tw-ring-color:rgb(41 37 36/var(--tw-ring-opacity))}.ring-stone-900{--tw-ring-opacity:1;--tw-ring-color:rgb(28 25 23/var(--tw-ring-opacity))}.ring-stone-950{--tw-ring-opacity:1;--tw-ring-color:rgb(12 10 9/var(--tw-ring-opacity))}.ring-teal-100{--tw-ring-opacity:1;--tw-ring-color:rgb(204 251 241/var(--tw-ring-opacity))}.ring-teal-200{--tw-ring-opacity:1;--tw-ring-color:rgb(153 246 228/var(--tw-ring-opacity))}.ring-teal-300{--tw-ring-opacity:1;--tw-ring-color:rgb(94 234 212/var(--tw-ring-opacity))}.ring-teal-400{--tw-ring-opacity:1;--tw-ring-color:rgb(45 212 191/var(--tw-ring-opacity))}.ring-teal-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 250/var(--tw-ring-opacity))}.ring-teal-500{--tw-ring-opacity:1;--tw-ring-color:rgb(20 184 166/var(--tw-ring-opacity))}.ring-teal-600{--tw-ring-opacity:1;--tw-ring-color:rgb(13 148 136/var(--tw-ring-opacity))}.ring-teal-700{--tw-ring-opacity:1;--tw-ring-color:rgb(15 118 110/var(--tw-ring-opacity))}.ring-teal-800{--tw-ring-opacity:1;--tw-ring-color:rgb(17 94 89/var(--tw-ring-opacity))}.ring-teal-900{--tw-ring-opacity:1;--tw-ring-color:rgb(19 78 74/var(--tw-ring-opacity))}.ring-teal-950{--tw-ring-opacity:1;--tw-ring-color:rgb(4 47 46/var(--tw-ring-opacity))}.ring-tremor-brand-inverted{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-tremor-brand-muted{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.ring-tremor-ring{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-violet-100{--tw-ring-opacity:1;--tw-ring-color:rgb(237 233 254/var(--tw-ring-opacity))}.ring-violet-200{--tw-ring-opacity:1;--tw-ring-color:rgb(221 214 254/var(--tw-ring-opacity))}.ring-violet-300{--tw-ring-opacity:1;--tw-ring-color:rgb(196 181 253/var(--tw-ring-opacity))}.ring-violet-400{--tw-ring-opacity:1;--tw-ring-color:rgb(167 139 250/var(--tw-ring-opacity))}.ring-violet-50{--tw-ring-opacity:1;--tw-ring-color:rgb(245 243 255/var(--tw-ring-opacity))}.ring-violet-500{--tw-ring-opacity:1;--tw-ring-color:rgb(139 92 246/var(--tw-ring-opacity))}.ring-violet-600{--tw-ring-opacity:1;--tw-ring-color:rgb(124 58 237/var(--tw-ring-opacity))}.ring-violet-700{--tw-ring-opacity:1;--tw-ring-color:rgb(109 40 217/var(--tw-ring-opacity))}.ring-violet-800{--tw-ring-opacity:1;--tw-ring-color:rgb(91 33 182/var(--tw-ring-opacity))}.ring-violet-900{--tw-ring-opacity:1;--tw-ring-color:rgb(76 29 149/var(--tw-ring-opacity))}.ring-violet-950{--tw-ring-opacity:1;--tw-ring-color:rgb(46 16 101/var(--tw-ring-opacity))}.ring-yellow-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 249 195/var(--tw-ring-opacity))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity))}.ring-yellow-400{--tw-ring-opacity:1;--tw-ring-color:rgb(250 204 21/var(--tw-ring-opacity))}.ring-yellow-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 252 232/var(--tw-ring-opacity))}.ring-yellow-500{--tw-ring-opacity:1;--tw-ring-color:rgb(234 179 8/var(--tw-ring-opacity))}.ring-yellow-600{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity))}.ring-yellow-700{--tw-ring-opacity:1;--tw-ring-color:rgb(161 98 7/var(--tw-ring-opacity))}.ring-yellow-800{--tw-ring-opacity:1;--tw-ring-color:rgb(133 77 14/var(--tw-ring-opacity))}.ring-yellow-900{--tw-ring-opacity:1;--tw-ring-color:rgb(113 63 18/var(--tw-ring-opacity))}.ring-yellow-950{--tw-ring-opacity:1;--tw-ring-color:rgb(66 32 6/var(--tw-ring-opacity))}.ring-zinc-100{--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity))}.ring-zinc-200{--tw-ring-opacity:1;--tw-ring-color:rgb(228 228 231/var(--tw-ring-opacity))}.ring-zinc-300{--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity))}.ring-zinc-400{--tw-ring-opacity:1;--tw-ring-color:rgb(161 161 170/var(--tw-ring-opacity))}.ring-zinc-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 250 250/var(--tw-ring-opacity))}.ring-zinc-500{--tw-ring-opacity:1;--tw-ring-color:rgb(113 113 122/var(--tw-ring-opacity))}.ring-zinc-600{--tw-ring-opacity:1;--tw-ring-color:rgb(82 82 91/var(--tw-ring-opacity))}.ring-zinc-700{--tw-ring-opacity:1;--tw-ring-color:rgb(63 63 70/var(--tw-ring-opacity))}.ring-zinc-800{--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42/var(--tw-ring-opacity))}.ring-zinc-900{--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity))}.ring-zinc-950{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity))}.ring-opacity-40{--tw-ring-opacity:0.4}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.\[scrollbar-width\:none\]{scrollbar-width:none}:root{--foreground-rgb:0,0,0;--background-start-rgb:255,255,255;--background-end-rgb:255,255,255}body{color:rgb(var(--foreground-rgb));background:linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb))}.placeholder\:text-tremor-content::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-tremor-content-subtle::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.first\:rounded-l-\[4px\]:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.last\:rounded-r-\[4px\]:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.focus-within\:relative:focus-within{position:relative}.hover\:border-b-2:hover{border-bottom-width:2px}.hover\:border-amber-100:hover{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.hover\:border-amber-200:hover{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.hover\:border-amber-300:hover{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.hover\:border-amber-400:hover{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.hover\:border-amber-50:hover{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.hover\:border-amber-500:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.hover\:border-amber-600:hover{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.hover\:border-amber-700:hover{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.hover\:border-amber-800:hover{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.hover\:border-amber-900:hover{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.hover\:border-amber-950:hover{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.hover\:border-blue-100:hover{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.hover\:border-blue-200:hover{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.hover\:border-blue-50:hover{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.hover\:border-blue-500:hover{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.hover\:border-blue-700:hover{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.hover\:border-blue-800:hover{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.hover\:border-blue-900:hover{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.hover\:border-blue-950:hover{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.hover\:border-cyan-100:hover{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.hover\:border-cyan-200:hover{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.hover\:border-cyan-300:hover{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.hover\:border-cyan-400:hover{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.hover\:border-cyan-50:hover{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.hover\:border-cyan-500:hover{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.hover\:border-cyan-600:hover{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.hover\:border-cyan-700:hover{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.hover\:border-cyan-800:hover{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.hover\:border-cyan-900:hover{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.hover\:border-cyan-950:hover{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.hover\:border-emerald-100:hover{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.hover\:border-emerald-200:hover{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.hover\:border-emerald-300:hover{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.hover\:border-emerald-400:hover{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.hover\:border-emerald-50:hover{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.hover\:border-emerald-500:hover{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.hover\:border-emerald-600:hover{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.hover\:border-emerald-700:hover{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.hover\:border-emerald-800:hover{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.hover\:border-emerald-900:hover{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.hover\:border-emerald-950:hover{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.hover\:border-fuchsia-100:hover{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.hover\:border-fuchsia-200:hover{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.hover\:border-fuchsia-300:hover{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.hover\:border-fuchsia-400:hover{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.hover\:border-fuchsia-50:hover{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.hover\:border-fuchsia-500:hover{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.hover\:border-fuchsia-600:hover{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.hover\:border-fuchsia-700:hover{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.hover\:border-fuchsia-800:hover{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.hover\:border-fuchsia-900:hover{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.hover\:border-fuchsia-950:hover{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.hover\:border-gray-100:hover{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.hover\:border-gray-50:hover{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.hover\:border-gray-700:hover{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.hover\:border-gray-900:hover{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.hover\:border-gray-950:hover{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.hover\:border-green-100:hover{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.hover\:border-green-200:hover{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.hover\:border-green-300:hover{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.hover\:border-green-400:hover{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.hover\:border-green-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.hover\:border-green-500:hover{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.hover\:border-green-600:hover{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.hover\:border-green-700:hover{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.hover\:border-green-800:hover{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.hover\:border-green-900:hover{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.hover\:border-green-950:hover{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.hover\:border-indigo-100:hover{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.hover\:border-indigo-200:hover{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.hover\:border-indigo-300:hover{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.hover\:border-indigo-400:hover{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.hover\:border-indigo-50:hover{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.hover\:border-indigo-500:hover{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.hover\:border-indigo-600:hover{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.hover\:border-indigo-700:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-indigo-800:hover{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.hover\:border-indigo-900:hover{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.hover\:border-indigo-950:hover{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.hover\:border-lime-100:hover{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.hover\:border-lime-200:hover{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.hover\:border-lime-300:hover{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.hover\:border-lime-400:hover{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.hover\:border-lime-50:hover{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.hover\:border-lime-500:hover{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.hover\:border-lime-600:hover{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.hover\:border-lime-700:hover{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.hover\:border-lime-800:hover{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.hover\:border-lime-900:hover{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.hover\:border-lime-950:hover{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.hover\:border-neutral-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.hover\:border-neutral-200:hover{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.hover\:border-neutral-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.hover\:border-neutral-400:hover{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.hover\:border-neutral-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-neutral-500:hover{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.hover\:border-neutral-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.hover\:border-neutral-700:hover{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.hover\:border-neutral-800:hover{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.hover\:border-neutral-900:hover{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.hover\:border-neutral-950:hover{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.hover\:border-orange-100:hover{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.hover\:border-orange-200:hover{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.hover\:border-orange-300:hover{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.hover\:border-orange-400:hover{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.hover\:border-orange-50:hover{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.hover\:border-orange-500:hover{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.hover\:border-orange-600:hover{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.hover\:border-orange-700:hover{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.hover\:border-orange-800:hover{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.hover\:border-orange-900:hover{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.hover\:border-orange-950:hover{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.hover\:border-pink-100:hover{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.hover\:border-pink-200:hover{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.hover\:border-pink-300:hover{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.hover\:border-pink-400:hover{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.hover\:border-pink-50:hover{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.hover\:border-pink-500:hover{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.hover\:border-pink-600:hover{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.hover\:border-pink-700:hover{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.hover\:border-pink-800:hover{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.hover\:border-pink-900:hover{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.hover\:border-pink-950:hover{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.hover\:border-purple-100:hover{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.hover\:border-purple-200:hover{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.hover\:border-purple-300:hover{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.hover\:border-purple-400:hover{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.hover\:border-purple-50:hover{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.hover\:border-purple-500:hover{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.hover\:border-purple-600:hover{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.hover\:border-purple-700:hover{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.hover\:border-purple-800:hover{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.hover\:border-purple-900:hover{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.hover\:border-purple-950:hover{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.hover\:border-red-100:hover{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.hover\:border-red-200:hover{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.hover\:border-red-300:hover{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.hover\:border-red-400:hover{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.hover\:border-red-50:hover{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.hover\:border-red-600:hover{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.hover\:border-red-800:hover{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.hover\:border-red-900:hover{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.hover\:border-red-950:hover{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.hover\:border-rose-100:hover{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.hover\:border-rose-200:hover{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.hover\:border-rose-300:hover{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.hover\:border-rose-400:hover{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.hover\:border-rose-50:hover{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.hover\:border-rose-500:hover{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.hover\:border-rose-600:hover{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.hover\:border-rose-700:hover{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.hover\:border-rose-800:hover{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.hover\:border-rose-900:hover{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.hover\:border-rose-950:hover{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.hover\:border-sky-100:hover{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.hover\:border-sky-200:hover{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.hover\:border-sky-300:hover{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.hover\:border-sky-400:hover{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.hover\:border-sky-50:hover{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.hover\:border-sky-500:hover{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.hover\:border-sky-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-sky-700:hover{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.hover\:border-sky-800:hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.hover\:border-sky-900:hover{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.hover\:border-sky-950:hover{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.hover\:border-slate-100:hover{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.hover\:border-slate-200:hover{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.hover\:border-slate-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.hover\:border-slate-50:hover{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.hover\:border-slate-500:hover{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.hover\:border-slate-600:hover{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.hover\:border-slate-700:hover{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.hover\:border-slate-800:hover{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.hover\:border-slate-900:hover{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.hover\:border-slate-950:hover{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.hover\:border-stone-100:hover{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.hover\:border-stone-200:hover{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.hover\:border-stone-300:hover{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.hover\:border-stone-400:hover{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.hover\:border-stone-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.hover\:border-stone-500:hover{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.hover\:border-stone-600:hover{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.hover\:border-stone-700:hover{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.hover\:border-stone-800:hover{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.hover\:border-stone-900:hover{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.hover\:border-stone-950:hover{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.hover\:border-teal-100:hover{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.hover\:border-teal-200:hover{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.hover\:border-teal-300:hover{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.hover\:border-teal-400:hover{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.hover\:border-teal-50:hover{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.hover\:border-teal-500:hover{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.hover\:border-teal-600:hover{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.hover\:border-teal-700:hover{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.hover\:border-teal-800:hover{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.hover\:border-teal-900:hover{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.hover\:border-teal-950:hover{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.hover\:border-tremor-brand-emphasis:hover{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.hover\:border-tremor-content:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:border-violet-100:hover{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.hover\:border-violet-200:hover{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.hover\:border-violet-300:hover{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.hover\:border-violet-400:hover{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.hover\:border-violet-50:hover{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.hover\:border-violet-500:hover{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.hover\:border-violet-600:hover{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.hover\:border-violet-700:hover{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.hover\:border-violet-800:hover{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.hover\:border-violet-900:hover{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.hover\:border-violet-950:hover{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.hover\:border-yellow-100:hover{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.hover\:border-yellow-200:hover{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.hover\:border-yellow-300:hover{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.hover\:border-yellow-400:hover{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.hover\:border-yellow-50:hover{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.hover\:border-yellow-500:hover{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.hover\:border-yellow-600:hover{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.hover\:border-yellow-700:hover{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.hover\:border-yellow-800:hover{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.hover\:border-yellow-900:hover{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.hover\:border-yellow-950:hover{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.hover\:border-zinc-100:hover{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.hover\:border-zinc-200:hover{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.hover\:border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:border-zinc-400:hover{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.hover\:border-zinc-50:hover{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.hover\:border-zinc-500:hover{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.hover\:border-zinc-600:hover{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-zinc-700:hover{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.hover\:border-zinc-800:hover{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.hover\:border-zinc-900:hover{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.hover\:border-zinc-950:hover{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.hover\:bg-amber-300:hover{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.hover\:bg-amber-400:hover{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.hover\:bg-amber-500:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.hover\:bg-amber-700:hover{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.hover\:bg-amber-800:hover{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.hover\:bg-amber-900:hover{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.hover\:bg-amber-950:hover{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.hover\:bg-blue-300:hover{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.hover\:bg-blue-900:hover{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.hover\:bg-blue-950:hover{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.hover\:bg-cyan-100:hover{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.hover\:bg-cyan-200:hover{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.hover\:bg-cyan-300:hover{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.hover\:bg-cyan-400:hover{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.hover\:bg-cyan-50:hover{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.hover\:bg-cyan-500:hover{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.hover\:bg-cyan-600:hover{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.hover\:bg-cyan-700:hover{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.hover\:bg-cyan-800:hover{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.hover\:bg-cyan-900:hover{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.hover\:bg-cyan-950:hover{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.hover\:bg-emerald-100:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.hover\:bg-emerald-200:hover{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.hover\:bg-emerald-300:hover{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.hover\:bg-emerald-400:hover{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.hover\:bg-emerald-500:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.hover\:bg-emerald-800:hover{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.hover\:bg-emerald-900:hover{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.hover\:bg-emerald-950:hover{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.hover\:bg-fuchsia-100:hover{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-200:hover{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.hover\:bg-fuchsia-300:hover{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.hover\:bg-fuchsia-400:hover{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.hover\:bg-fuchsia-50:hover{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.hover\:bg-fuchsia-500:hover{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.hover\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.hover\:bg-fuchsia-700:hover{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.hover\:bg-fuchsia-800:hover{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.hover\:bg-fuchsia-900:hover{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.hover\:bg-fuchsia-950:hover{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.hover\:bg-gray-950:hover{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.hover\:bg-green-200:hover{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.hover\:bg-green-300:hover{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.hover\:bg-green-400:hover{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.hover\:bg-green-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.hover\:bg-green-500:hover{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-green-800:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.hover\:bg-green-900:hover{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.hover\:bg-green-950:hover{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.hover\:bg-indigo-200:hover{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.hover\:bg-indigo-300:hover{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.hover\:bg-indigo-400:hover{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.hover\:bg-indigo-50:hover{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.hover\:bg-indigo-500:hover{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.hover\:bg-indigo-600:hover{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-indigo-800:hover{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.hover\:bg-indigo-900:hover{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.hover\:bg-indigo-950:hover{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.hover\:bg-lime-100:hover{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.hover\:bg-lime-200:hover{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.hover\:bg-lime-300:hover{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.hover\:bg-lime-400:hover{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.hover\:bg-lime-50:hover{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.hover\:bg-lime-500:hover{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.hover\:bg-lime-600:hover{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.hover\:bg-lime-700:hover{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.hover\:bg-lime-800:hover{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.hover\:bg-lime-900:hover{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.hover\:bg-lime-950:hover{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.hover\:bg-neutral-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.hover\:bg-neutral-200:hover{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.hover\:bg-neutral-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.hover\:bg-neutral-400:hover{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.hover\:bg-neutral-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-neutral-500:hover{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.hover\:bg-neutral-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.hover\:bg-neutral-700:hover{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.hover\:bg-neutral-800:hover{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.hover\:bg-neutral-900:hover{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.hover\:bg-neutral-950:hover{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.hover\:bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.hover\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.hover\:bg-orange-300:hover{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.hover\:bg-orange-400:hover{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.hover\:bg-orange-50:hover{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.hover\:bg-orange-500:hover{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.hover\:bg-orange-700:hover{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.hover\:bg-orange-800:hover{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.hover\:bg-orange-900:hover{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.hover\:bg-orange-950:hover{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.hover\:bg-pink-200:hover{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.hover\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.hover\:bg-pink-400:hover{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.hover\:bg-pink-50:hover{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-pink-600:hover{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.hover\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.hover\:bg-pink-800:hover{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.hover\:bg-pink-900:hover{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.hover\:bg-pink-950:hover{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.hover\:bg-purple-200:hover{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.hover\:bg-purple-300:hover{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.hover\:bg-purple-400:hover{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.hover\:bg-purple-50:hover{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.hover\:bg-purple-500:hover{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.hover\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.hover\:bg-purple-800:hover{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.hover\:bg-purple-900:hover{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.hover\:bg-purple-950:hover{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.hover\:bg-red-300:hover{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.hover\:bg-red-400:hover{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:bg-red-800:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.hover\:bg-red-950:hover{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.hover\:bg-rose-100:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.hover\:bg-rose-200:hover{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.hover\:bg-rose-300:hover{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.hover\:bg-rose-400:hover{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.hover\:bg-rose-500:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.hover\:bg-rose-600:hover{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.hover\:bg-rose-700:hover{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.hover\:bg-rose-800:hover{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.hover\:bg-rose-900:hover{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.hover\:bg-rose-950:hover{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.hover\:bg-sky-100:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.hover\:bg-sky-200:hover{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.hover\:bg-sky-300:hover{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.hover\:bg-sky-400:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.hover\:bg-sky-50:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.hover\:bg-sky-500:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.hover\:bg-sky-600:hover{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.hover\:bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:bg-sky-800:hover{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.hover\:bg-sky-900:hover{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.hover\:bg-sky-950:hover{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\:bg-slate-300:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.hover\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-slate-500:hover{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.hover\:bg-slate-600:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.hover\:bg-slate-900:hover{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.hover\:bg-slate-950:hover{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.hover\:bg-stone-100:hover{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.hover\:bg-stone-200:hover{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.hover\:bg-stone-300:hover{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.hover\:bg-stone-400:hover{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.hover\:bg-stone-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.hover\:bg-stone-500:hover{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.hover\:bg-stone-600:hover{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.hover\:bg-stone-700:hover{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.hover\:bg-stone-800:hover{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.hover\:bg-stone-900:hover{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.hover\:bg-stone-950:hover{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.hover\:bg-teal-100:hover{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.hover\:bg-teal-200:hover{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.hover\:bg-teal-300:hover{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.hover\:bg-teal-400:hover{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.hover\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.hover\:bg-teal-500:hover{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.hover\:bg-teal-600:hover{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.hover\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.hover\:bg-teal-800:hover{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.hover\:bg-teal-900:hover{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.hover\:bg-teal-950:hover{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.hover\:bg-tremor-background-muted:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-tremor-background-subtle:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-emphasis:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-tremor-brand-faint:hover{--tw-bg-opacity:1;background-color:rgb(108 111 237/var(--tw-bg-opacity))}.hover\:bg-violet-100:hover{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.hover\:bg-violet-200:hover{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.hover\:bg-violet-300:hover{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.hover\:bg-violet-400:hover{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.hover\:bg-violet-50:hover{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.hover\:bg-violet-500:hover{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.hover\:bg-violet-600:hover{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.hover\:bg-violet-800:hover{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.hover\:bg-violet-900:hover{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.hover\:bg-violet-950:hover{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-yellow-200:hover{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.hover\:bg-yellow-300:hover{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.hover\:bg-yellow-400:hover{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.hover\:bg-yellow-50:hover{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.hover\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.hover\:bg-yellow-700:hover{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.hover\:bg-yellow-800:hover{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.hover\:bg-yellow-900:hover{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.hover\:bg-yellow-950:hover{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.hover\:bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.hover\:bg-zinc-200:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.hover\:bg-zinc-300:hover{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.hover\:bg-zinc-400:hover{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-zinc-500:hover{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.hover\:bg-zinc-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.hover\:bg-zinc-700:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.hover\:bg-zinc-800:hover{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.hover\:bg-zinc-900:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.hover\:bg-zinc-950:hover{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.hover\:bg-opacity-20:hover{--tw-bg-opacity:0.2}.hover\:text-amber-100:hover{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.hover\:text-amber-200:hover{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.hover\:text-amber-300:hover{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.hover\:text-amber-400:hover{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.hover\:text-amber-50:hover{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.hover\:text-amber-500:hover{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.hover\:text-amber-700:hover{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.hover\:text-amber-800:hover{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.hover\:text-amber-900:hover{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.hover\:text-amber-950:hover{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.hover\:text-blue-100:hover{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.hover\:text-blue-200:hover{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.hover\:text-blue-50:hover{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.hover\:text-blue-900:hover{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.hover\:text-blue-950:hover{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.hover\:text-cyan-100:hover{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.hover\:text-cyan-200:hover{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.hover\:text-cyan-300:hover{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.hover\:text-cyan-400:hover{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.hover\:text-cyan-50:hover{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.hover\:text-cyan-500:hover{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.hover\:text-cyan-600:hover{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.hover\:text-cyan-700:hover{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.hover\:text-cyan-800:hover{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.hover\:text-cyan-900:hover{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.hover\:text-cyan-950:hover{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.hover\:text-emerald-100:hover{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.hover\:text-emerald-200:hover{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.hover\:text-emerald-300:hover{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.hover\:text-emerald-400:hover{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.hover\:text-emerald-50:hover{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.hover\:text-emerald-500:hover{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.hover\:text-emerald-600:hover{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.hover\:text-emerald-700:hover{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.hover\:text-emerald-800:hover{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.hover\:text-emerald-900:hover{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.hover\:text-emerald-950:hover{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.hover\:text-fuchsia-100:hover{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.hover\:text-fuchsia-200:hover{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.hover\:text-fuchsia-300:hover{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.hover\:text-fuchsia-400:hover{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.hover\:text-fuchsia-50:hover{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.hover\:text-fuchsia-500:hover{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.hover\:text-fuchsia-600:hover{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.hover\:text-fuchsia-700:hover{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.hover\:text-fuchsia-800:hover{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.hover\:text-fuchsia-900:hover{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.hover\:text-fuchsia-950:hover{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.hover\:text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-gray-950:hover{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.hover\:text-green-100:hover{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.hover\:text-green-200:hover{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.hover\:text-green-300:hover{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.hover\:text-green-400:hover{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.hover\:text-green-50:hover{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.hover\:text-green-600:hover{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.hover\:text-green-700:hover{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.hover\:text-green-800:hover{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.hover\:text-green-900:hover{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.hover\:text-green-950:hover{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.hover\:text-indigo-100:hover{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.hover\:text-indigo-200:hover{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.hover\:text-indigo-300:hover{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.hover\:text-indigo-400:hover{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.hover\:text-indigo-50:hover{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.hover\:text-indigo-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-indigo-800:hover{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.hover\:text-indigo-950:hover{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.hover\:text-lime-100:hover{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.hover\:text-lime-200:hover{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.hover\:text-lime-300:hover{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.hover\:text-lime-400:hover{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.hover\:text-lime-50:hover{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.hover\:text-lime-500:hover{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.hover\:text-lime-600:hover{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.hover\:text-lime-700:hover{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.hover\:text-lime-800:hover{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.hover\:text-lime-900:hover{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.hover\:text-lime-950:hover{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.hover\:text-neutral-100:hover{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.hover\:text-neutral-200:hover{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.hover\:text-neutral-300:hover{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.hover\:text-neutral-400:hover{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.hover\:text-neutral-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-neutral-500:hover{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.hover\:text-neutral-600:hover{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.hover\:text-neutral-700:hover{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.hover\:text-neutral-900:hover{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.hover\:text-neutral-950:hover{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.hover\:text-orange-100:hover{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.hover\:text-orange-200:hover{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.hover\:text-orange-400:hover{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.hover\:text-orange-50:hover{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.hover\:text-orange-500:hover{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.hover\:text-orange-600:hover{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.hover\:text-orange-700:hover{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.hover\:text-orange-800:hover{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.hover\:text-orange-900:hover{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.hover\:text-orange-950:hover{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.hover\:text-pink-100:hover{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.hover\:text-pink-200:hover{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.hover\:text-pink-300:hover{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.hover\:text-pink-400:hover{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.hover\:text-pink-50:hover{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.hover\:text-pink-500:hover{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.hover\:text-pink-600:hover{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.hover\:text-pink-700:hover{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.hover\:text-pink-800:hover{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.hover\:text-pink-900:hover{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.hover\:text-pink-950:hover{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.hover\:text-purple-100:hover{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.hover\:text-purple-200:hover{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.hover\:text-purple-300:hover{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.hover\:text-purple-400:hover{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.hover\:text-purple-50:hover{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.hover\:text-purple-500:hover{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.hover\:text-purple-600:hover{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.hover\:text-purple-700:hover{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.hover\:text-purple-800:hover{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.hover\:text-purple-900:hover{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.hover\:text-purple-950:hover{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.hover\:text-red-100:hover{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.hover\:text-red-200:hover{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.hover\:text-red-800:hover{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.hover\:text-red-900:hover{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.hover\:text-red-950:hover{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.hover\:text-rose-100:hover{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.hover\:text-rose-200:hover{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.hover\:text-rose-300:hover{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.hover\:text-rose-400:hover{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.hover\:text-rose-50:hover{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.hover\:text-rose-600:hover{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.hover\:text-rose-700:hover{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.hover\:text-rose-800:hover{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.hover\:text-rose-900:hover{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.hover\:text-rose-950:hover{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.hover\:text-sky-100:hover{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.hover\:text-sky-200:hover{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.hover\:text-sky-300:hover{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.hover\:text-sky-400:hover{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.hover\:text-sky-50:hover{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.hover\:text-sky-500:hover{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.hover\:text-sky-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.hover\:text-sky-700:hover{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.hover\:text-sky-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-sky-900:hover{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.hover\:text-sky-950:hover{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.hover\:text-slate-100:hover{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.hover\:text-slate-200:hover{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.hover\:text-slate-300:hover{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.hover\:text-slate-400:hover{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:text-slate-50:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.hover\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-slate-950:hover{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.hover\:text-stone-100:hover{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.hover\:text-stone-200:hover{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.hover\:text-stone-300:hover{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.hover\:text-stone-400:hover{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.hover\:text-stone-50:hover{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.hover\:text-stone-500:hover{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.hover\:text-stone-600:hover{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.hover\:text-stone-700:hover{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.hover\:text-stone-800:hover{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.hover\:text-stone-900:hover{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.hover\:text-stone-950:hover{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.hover\:text-teal-100:hover{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.hover\:text-teal-200:hover{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.hover\:text-teal-300:hover{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.hover\:text-teal-400:hover{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.hover\:text-teal-50:hover{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.hover\:text-teal-500:hover{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.hover\:text-teal-600:hover{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.hover\:text-teal-700:hover{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.hover\:text-teal-800:hover{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.hover\:text-teal-900:hover{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.hover\:text-teal-950:hover{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.hover\:text-tremor-brand-emphasis:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.hover\:text-tremor-content:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\:text-tremor-content-emphasis:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-violet-100:hover{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.hover\:text-violet-200:hover{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.hover\:text-violet-300:hover{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.hover\:text-violet-400:hover{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.hover\:text-violet-50:hover{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.hover\:text-violet-500:hover{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.hover\:text-violet-600:hover{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.hover\:text-violet-700:hover{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.hover\:text-violet-800:hover{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.hover\:text-violet-900:hover{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.hover\:text-violet-950:hover{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.hover\:text-yellow-100:hover{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.hover\:text-yellow-200:hover{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.hover\:text-yellow-300:hover{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.hover\:text-yellow-400:hover{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.hover\:text-yellow-50:hover{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.hover\:text-yellow-500:hover{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.hover\:text-yellow-600:hover{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.hover\:text-yellow-700:hover{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.hover\:text-yellow-800:hover{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.hover\:text-yellow-900:hover{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.hover\:text-yellow-950:hover{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.hover\:text-zinc-100:hover{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.hover\:text-zinc-200:hover{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.hover\:text-zinc-300:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.hover\:text-zinc-400:hover{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.hover\:text-zinc-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.hover\:text-zinc-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-zinc-600:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.hover\:text-zinc-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.hover\:text-zinc-800:hover{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.hover\:text-zinc-950:hover{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-tremor-brand-subtle:focus{--tw-border-opacity:1;border-color:rgb(142 145 235/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-tremor-brand-muted:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(134 136 239/var(--tw-ring-opacity))}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.group:hover .group-hover\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.group:active .group-active\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.aria-selected\:\!bg-tremor-background-subtle[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(243 244 246/var(--tw-bg-opacity))!important}.aria-selected\:bg-tremor-background-emphasis[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.aria-selected\:\!text-tremor-content[aria-selected=true]{--tw-text-opacity:1!important;color:rgb(107 114 128/var(--tw-text-opacity))!important}.aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.aria-selected\:text-tremor-brand-inverted[aria-selected=true],.aria-selected\:text-tremor-content-inverted[aria-selected=true]{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.ui-open\:underline[data-headlessui-state~=open]{text-decoration-line:underline}:where([data-headlessui-state~=open]) .ui-open\:underline{text-decoration-line:underline}.ui-selected\:border-b-2[data-headlessui-state~=selected]{border-bottom-width:2px}.ui-selected\:border-amber-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}.ui-selected\:border-amber-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.ui-selected\:border-amber-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}.ui-selected\:border-amber-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}.ui-selected\:border-amber-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}.ui-selected\:border-amber-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.ui-selected\:border-amber-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.ui-selected\:border-amber-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}.ui-selected\:border-amber-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.ui-selected\:border-amber-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}.ui-selected\:border-amber-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}.ui-selected\:border-blue-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.ui-selected\:border-blue-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}.ui-selected\:border-blue-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}.ui-selected\:border-blue-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}.ui-selected\:border-blue-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}.ui-selected\:border-blue-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.ui-selected\:border-blue-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}.ui-selected\:border-blue-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.ui-selected\:border-blue-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.ui-selected\:border-blue-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}.ui-selected\:border-blue-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}.ui-selected\:border-cyan-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}.ui-selected\:border-cyan-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}.ui-selected\:border-cyan-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}.ui-selected\:border-cyan-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}.ui-selected\:border-cyan-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}.ui-selected\:border-cyan-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}.ui-selected\:border-cyan-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}.ui-selected\:border-cyan-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}.ui-selected\:border-cyan-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}.ui-selected\:border-cyan-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}.ui-selected\:border-cyan-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}.ui-selected\:border-emerald-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}.ui-selected\:border-emerald-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.ui-selected\:border-emerald-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}.ui-selected\:border-emerald-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}.ui-selected\:border-emerald-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}.ui-selected\:border-emerald-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.ui-selected\:border-emerald-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.ui-selected\:border-emerald-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}.ui-selected\:border-emerald-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.ui-selected\:border-emerald-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}.ui-selected\:border-emerald-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}.ui-selected\:border-fuchsia-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}.ui-selected\:border-gray-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.ui-selected\:border-gray-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-gray-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.ui-selected\:border-gray-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.ui-selected\:border-gray-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}.ui-selected\:border-gray-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.ui-selected\:border-gray-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.ui-selected\:border-gray-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.ui-selected\:border-gray-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.ui-selected\:border-gray-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}.ui-selected\:border-gray-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}.ui-selected\:border-green-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}.ui-selected\:border-green-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}.ui-selected\:border-green-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}.ui-selected\:border-green-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}.ui-selected\:border-green-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}.ui-selected\:border-green-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.ui-selected\:border-green-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.ui-selected\:border-green-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.ui-selected\:border-green-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}.ui-selected\:border-green-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.ui-selected\:border-green-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}.ui-selected\:border-indigo-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.ui-selected\:border-indigo-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.ui-selected\:border-indigo-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.ui-selected\:border-indigo-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}.ui-selected\:border-indigo-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-indigo-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}.ui-selected\:border-indigo-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}.ui-selected\:border-indigo-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}.ui-selected\:border-indigo-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}.ui-selected\:border-indigo-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}.ui-selected\:border-lime-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}.ui-selected\:border-lime-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}.ui-selected\:border-lime-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}.ui-selected\:border-lime-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}.ui-selected\:border-lime-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}.ui-selected\:border-lime-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}.ui-selected\:border-lime-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}.ui-selected\:border-lime-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}.ui-selected\:border-lime-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}.ui-selected\:border-lime-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}.ui-selected\:border-lime-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}.ui-selected\:border-neutral-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}.ui-selected\:border-neutral-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}.ui-selected\:border-neutral-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}.ui-selected\:border-neutral-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}.ui-selected\:border-neutral-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-neutral-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}.ui-selected\:border-neutral-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}.ui-selected\:border-neutral-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}.ui-selected\:border-neutral-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.ui-selected\:border-neutral-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}.ui-selected\:border-neutral-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}.ui-selected\:border-orange-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.ui-selected\:border-orange-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}.ui-selected\:border-orange-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.ui-selected\:border-orange-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.ui-selected\:border-orange-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}.ui-selected\:border-orange-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.ui-selected\:border-orange-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.ui-selected\:border-orange-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}.ui-selected\:border-orange-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}.ui-selected\:border-orange-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}.ui-selected\:border-orange-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}.ui-selected\:border-pink-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}.ui-selected\:border-pink-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}.ui-selected\:border-pink-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}.ui-selected\:border-pink-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}.ui-selected\:border-pink-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}.ui-selected\:border-pink-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.ui-selected\:border-pink-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}.ui-selected\:border-pink-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}.ui-selected\:border-pink-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}.ui-selected\:border-pink-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}.ui-selected\:border-pink-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}.ui-selected\:border-purple-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}.ui-selected\:border-purple-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}.ui-selected\:border-purple-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}.ui-selected\:border-purple-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}.ui-selected\:border-purple-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}.ui-selected\:border-purple-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.ui-selected\:border-purple-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.ui-selected\:border-purple-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}.ui-selected\:border-purple-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}.ui-selected\:border-purple-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}.ui-selected\:border-purple-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}.ui-selected\:border-red-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}.ui-selected\:border-red-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.ui-selected\:border-red-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.ui-selected\:border-red-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.ui-selected\:border-red-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}.ui-selected\:border-red-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.ui-selected\:border-red-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.ui-selected\:border-red-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.ui-selected\:border-red-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}.ui-selected\:border-red-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}.ui-selected\:border-red-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}.ui-selected\:border-rose-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}.ui-selected\:border-rose-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.ui-selected\:border-rose-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}.ui-selected\:border-rose-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}.ui-selected\:border-rose-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}.ui-selected\:border-rose-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}.ui-selected\:border-rose-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.ui-selected\:border-rose-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}.ui-selected\:border-rose-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.ui-selected\:border-rose-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}.ui-selected\:border-rose-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}.ui-selected\:border-sky-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}.ui-selected\:border-sky-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.ui-selected\:border-sky-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}.ui-selected\:border-sky-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}.ui-selected\:border-sky-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}.ui-selected\:border-sky-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.ui-selected\:border-sky-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.ui-selected\:border-sky-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.ui-selected\:border-sky-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.ui-selected\:border-sky-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.ui-selected\:border-sky-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}.ui-selected\:border-slate-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.ui-selected\:border-slate-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.ui-selected\:border-slate-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.ui-selected\:border-slate-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.ui-selected\:border-slate-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.ui-selected\:border-slate-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.ui-selected\:border-slate-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.ui-selected\:border-slate-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.ui-selected\:border-slate-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.ui-selected\:border-slate-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.ui-selected\:border-slate-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}.ui-selected\:border-stone-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}.ui-selected\:border-stone-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}.ui-selected\:border-stone-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}.ui-selected\:border-stone-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}.ui-selected\:border-stone-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}.ui-selected\:border-stone-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}.ui-selected\:border-stone-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}.ui-selected\:border-stone-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}.ui-selected\:border-stone-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}.ui-selected\:border-stone-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}.ui-selected\:border-stone-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}.ui-selected\:border-teal-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}.ui-selected\:border-teal-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}.ui-selected\:border-teal-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}.ui-selected\:border-teal-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}.ui-selected\:border-teal-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}.ui-selected\:border-teal-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.ui-selected\:border-teal-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.ui-selected\:border-teal-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}.ui-selected\:border-teal-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}.ui-selected\:border-teal-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}.ui-selected\:border-teal-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}.ui-selected\:border-tremor-border[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.ui-selected\:border-tremor-brand[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.ui-selected\:border-violet-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}.ui-selected\:border-violet-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.ui-selected\:border-violet-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}.ui-selected\:border-violet-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}.ui-selected\:border-violet-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.ui-selected\:border-violet-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}.ui-selected\:border-violet-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}.ui-selected\:border-violet-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}.ui-selected\:border-violet-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}.ui-selected\:border-violet-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}.ui-selected\:border-violet-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}.ui-selected\:border-yellow-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.ui-selected\:border-yellow-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}.ui-selected\:border-yellow-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.ui-selected\:border-yellow-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.ui-selected\:border-yellow-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}.ui-selected\:border-yellow-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}.ui-selected\:border-yellow-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}.ui-selected\:border-yellow-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}.ui-selected\:border-yellow-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.ui-selected\:border-yellow-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}.ui-selected\:border-yellow-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}.ui-selected\:border-zinc-100[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.ui-selected\:border-zinc-200[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.ui-selected\:border-zinc-300[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.ui-selected\:border-zinc-400[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.ui-selected\:border-zinc-50[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}.ui-selected\:border-zinc-500[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}.ui-selected\:border-zinc-600[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.ui-selected\:border-zinc-700[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.ui-selected\:border-zinc-800[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.ui-selected\:border-zinc-900[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}.ui-selected\:border-zinc-950[data-headlessui-state~=selected]{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}.ui-selected\:bg-amber-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.ui-selected\:bg-amber-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}.ui-selected\:bg-amber-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}.ui-selected\:bg-amber-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.ui-selected\:bg-amber-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.ui-selected\:bg-amber-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.ui-selected\:bg-amber-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.ui-selected\:bg-amber-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.ui-selected\:bg-amber-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.ui-selected\:bg-amber-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.ui-selected\:bg-amber-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}.ui-selected\:bg-blue-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.ui-selected\:bg-blue-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.ui-selected\:bg-blue-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.ui-selected\:bg-blue-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.ui-selected\:bg-blue-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.ui-selected\:bg-blue-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.ui-selected\:bg-blue-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.ui-selected\:bg-blue-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.ui-selected\:bg-blue-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}.ui-selected\:bg-blue-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}.ui-selected\:bg-cyan-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.ui-selected\:bg-emerald-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}.ui-selected\:bg-fuchsia-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}.ui-selected\:bg-gray-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.ui-selected\:bg-gray-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.ui-selected\:bg-gray-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.ui-selected\:bg-gray-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.ui-selected\:bg-gray-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-gray-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.ui-selected\:bg-gray-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.ui-selected\:bg-gray-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.ui-selected\:bg-gray-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.ui-selected\:bg-gray-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.ui-selected\:bg-gray-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.ui-selected\:bg-green-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.ui-selected\:bg-green-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.ui-selected\:bg-green-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.ui-selected\:bg-green-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.ui-selected\:bg-green-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.ui-selected\:bg-green-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.ui-selected\:bg-green-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.ui-selected\:bg-green-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.ui-selected\:bg-green-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.ui-selected\:bg-green-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.ui-selected\:bg-green-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.ui-selected\:bg-indigo-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}.ui-selected\:bg-lime-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}.ui-selected\:bg-lime-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}.ui-selected\:bg-lime-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}.ui-selected\:bg-lime-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}.ui-selected\:bg-lime-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}.ui-selected\:bg-lime-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}.ui-selected\:bg-lime-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.ui-selected\:bg-lime-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}.ui-selected\:bg-lime-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}.ui-selected\:bg-lime-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}.ui-selected\:bg-lime-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.ui-selected\:bg-neutral-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-orange-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.ui-selected\:bg-orange-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}.ui-selected\:bg-orange-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}.ui-selected\:bg-orange-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.ui-selected\:bg-orange-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.ui-selected\:bg-orange-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}.ui-selected\:bg-orange-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.ui-selected\:bg-orange-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}.ui-selected\:bg-orange-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}.ui-selected\:bg-pink-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}.ui-selected\:bg-pink-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}.ui-selected\:bg-pink-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}.ui-selected\:bg-pink-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.ui-selected\:bg-pink-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}.ui-selected\:bg-pink-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.ui-selected\:bg-pink-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.ui-selected\:bg-pink-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}.ui-selected\:bg-pink-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}.ui-selected\:bg-pink-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}.ui-selected\:bg-pink-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}.ui-selected\:bg-purple-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}.ui-selected\:bg-purple-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}.ui-selected\:bg-purple-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}.ui-selected\:bg-purple-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}.ui-selected\:bg-purple-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.ui-selected\:bg-purple-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}.ui-selected\:bg-purple-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}.ui-selected\:bg-purple-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}.ui-selected\:bg-purple-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}.ui-selected\:bg-red-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.ui-selected\:bg-red-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.ui-selected\:bg-red-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.ui-selected\:bg-red-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.ui-selected\:bg-red-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.ui-selected\:bg-red-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.ui-selected\:bg-red-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.ui-selected\:bg-red-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.ui-selected\:bg-red-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}.ui-selected\:bg-red-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.ui-selected\:bg-red-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}.ui-selected\:bg-rose-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.ui-selected\:bg-rose-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.ui-selected\:bg-rose-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}.ui-selected\:bg-rose-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.ui-selected\:bg-rose-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.ui-selected\:bg-rose-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.ui-selected\:bg-rose-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.ui-selected\:bg-rose-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.ui-selected\:bg-rose-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.ui-selected\:bg-rose-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.ui-selected\:bg-rose-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}.ui-selected\:bg-sky-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.ui-selected\:bg-sky-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}.ui-selected\:bg-sky-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}.ui-selected\:bg-sky-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.ui-selected\:bg-sky-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.ui-selected\:bg-sky-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.ui-selected\:bg-sky-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.ui-selected\:bg-sky-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.ui-selected\:bg-sky-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.ui-selected\:bg-sky-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.ui-selected\:bg-sky-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}.ui-selected\:bg-slate-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.ui-selected\:bg-slate-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.ui-selected\:bg-slate-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.ui-selected\:bg-slate-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.ui-selected\:bg-slate-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.ui-selected\:bg-slate-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.ui-selected\:bg-slate-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.ui-selected\:bg-slate-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.ui-selected\:bg-slate-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.ui-selected\:bg-slate-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.ui-selected\:bg-slate-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}.ui-selected\:bg-stone-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}.ui-selected\:bg-stone-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}.ui-selected\:bg-stone-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}.ui-selected\:bg-stone-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}.ui-selected\:bg-stone-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}.ui-selected\:bg-stone-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}.ui-selected\:bg-stone-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}.ui-selected\:bg-stone-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}.ui-selected\:bg-stone-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}.ui-selected\:bg-stone-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}.ui-selected\:bg-teal-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.ui-selected\:bg-teal-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}.ui-selected\:bg-teal-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}.ui-selected\:bg-teal-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}.ui-selected\:bg-teal-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}.ui-selected\:bg-teal-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.ui-selected\:bg-teal-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.ui-selected\:bg-teal-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.ui-selected\:bg-teal-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.ui-selected\:bg-teal-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}.ui-selected\:bg-teal-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.ui-selected\:bg-tremor-background-muted[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-selected\:bg-violet-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}.ui-selected\:bg-violet-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}.ui-selected\:bg-violet-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.ui-selected\:bg-violet-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}.ui-selected\:bg-violet-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.ui-selected\:bg-violet-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}.ui-selected\:bg-violet-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.ui-selected\:bg-violet-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}.ui-selected\:bg-violet-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.ui-selected\:bg-violet-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.ui-selected\:bg-yellow-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-100[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-200[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-300[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-400[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-50[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-500[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-600[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-700[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-800[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-900[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.ui-selected\:bg-zinc-950[data-headlessui-state~=selected]{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}.ui-selected\:text-amber-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.ui-selected\:text-amber-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.ui-selected\:text-amber-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}.ui-selected\:text-amber-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.ui-selected\:text-amber-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}.ui-selected\:text-amber-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.ui-selected\:text-amber-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.ui-selected\:text-amber-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.ui-selected\:text-amber-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.ui-selected\:text-amber-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}.ui-selected\:text-amber-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}.ui-selected\:text-blue-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.ui-selected\:text-blue-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.ui-selected\:text-blue-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}.ui-selected\:text-blue-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}.ui-selected\:text-blue-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}.ui-selected\:text-blue-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.ui-selected\:text-blue-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.ui-selected\:text-blue-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.ui-selected\:text-blue-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.ui-selected\:text-blue-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}.ui-selected\:text-blue-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}.ui-selected\:text-cyan-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.ui-selected\:text-cyan-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.ui-selected\:text-cyan-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}.ui-selected\:text-cyan-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}.ui-selected\:text-cyan-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}.ui-selected\:text-cyan-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}.ui-selected\:text-cyan-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}.ui-selected\:text-cyan-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.ui-selected\:text-cyan-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}.ui-selected\:text-cyan-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}.ui-selected\:text-cyan-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}.ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-emerald-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.ui-selected\:text-emerald-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.ui-selected\:text-emerald-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.ui-selected\:text-emerald-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.ui-selected\:text-emerald-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}.ui-selected\:text-emerald-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.ui-selected\:text-emerald-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.ui-selected\:text-emerald-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.ui-selected\:text-emerald-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.ui-selected\:text-emerald-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}.ui-selected\:text-emerald-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}.ui-selected\:text-fuchsia-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}.ui-selected\:text-gray-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.ui-selected\:text-gray-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.ui-selected\:text-gray-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.ui-selected\:text-gray-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.ui-selected\:text-gray-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.ui-selected\:text-gray-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.ui-selected\:text-gray-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.ui-selected\:text-gray-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-gray-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.ui-selected\:text-gray-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-gray-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.ui-selected\:text-green-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}.ui-selected\:text-green-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.ui-selected\:text-green-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}.ui-selected\:text-green-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.ui-selected\:text-green-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}.ui-selected\:text-green-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.ui-selected\:text-green-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.ui-selected\:text-green-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.ui-selected\:text-green-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.ui-selected\:text-green-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}.ui-selected\:text-green-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}.ui-selected\:text-indigo-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.ui-selected\:text-indigo-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.ui-selected\:text-indigo-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.ui-selected\:text-indigo-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}.ui-selected\:text-indigo-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-indigo-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.ui-selected\:text-indigo-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.ui-selected\:text-indigo-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.ui-selected\:text-indigo-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}.ui-selected\:text-indigo-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}.ui-selected\:text-lime-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}.ui-selected\:text-lime-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}.ui-selected\:text-lime-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.ui-selected\:text-lime-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}.ui-selected\:text-lime-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}.ui-selected\:text-lime-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}.ui-selected\:text-lime-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}.ui-selected\:text-lime-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}.ui-selected\:text-lime-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}.ui-selected\:text-lime-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}.ui-selected\:text-lime-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}.ui-selected\:text-neutral-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}.ui-selected\:text-neutral-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}.ui-selected\:text-neutral-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}.ui-selected\:text-neutral-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.ui-selected\:text-neutral-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-neutral-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.ui-selected\:text-neutral-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}.ui-selected\:text-neutral-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.ui-selected\:text-neutral-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}.ui-selected\:text-neutral-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}.ui-selected\:text-neutral-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}.ui-selected\:text-orange-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}.ui-selected\:text-orange-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}.ui-selected\:text-orange-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.ui-selected\:text-orange-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.ui-selected\:text-orange-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.ui-selected\:text-orange-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.ui-selected\:text-orange-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.ui-selected\:text-orange-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.ui-selected\:text-orange-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.ui-selected\:text-orange-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}.ui-selected\:text-orange-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}.ui-selected\:text-pink-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}.ui-selected\:text-pink-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}.ui-selected\:text-pink-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}.ui-selected\:text-pink-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}.ui-selected\:text-pink-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}.ui-selected\:text-pink-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.ui-selected\:text-pink-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}.ui-selected\:text-pink-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}.ui-selected\:text-pink-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}.ui-selected\:text-pink-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}.ui-selected\:text-pink-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}.ui-selected\:text-purple-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.ui-selected\:text-purple-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}.ui-selected\:text-purple-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}.ui-selected\:text-purple-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}.ui-selected\:text-purple-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}.ui-selected\:text-purple-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}.ui-selected\:text-purple-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}.ui-selected\:text-purple-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}.ui-selected\:text-purple-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.ui-selected\:text-purple-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}.ui-selected\:text-purple-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}.ui-selected\:text-red-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}.ui-selected\:text-red-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.ui-selected\:text-red-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.ui-selected\:text-red-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.ui-selected\:text-red-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}.ui-selected\:text-red-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.ui-selected\:text-red-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.ui-selected\:text-red-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.ui-selected\:text-red-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.ui-selected\:text-red-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.ui-selected\:text-red-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}.ui-selected\:text-rose-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.ui-selected\:text-rose-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.ui-selected\:text-rose-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.ui-selected\:text-rose-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.ui-selected\:text-rose-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.ui-selected\:text-rose-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.ui-selected\:text-rose-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.ui-selected\:text-rose-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.ui-selected\:text-rose-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.ui-selected\:text-rose-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}.ui-selected\:text-rose-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}.ui-selected\:text-sky-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.ui-selected\:text-sky-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}.ui-selected\:text-sky-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}.ui-selected\:text-sky-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}.ui-selected\:text-sky-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.ui-selected\:text-sky-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.ui-selected\:text-sky-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.ui-selected\:text-sky-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.ui-selected\:text-sky-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.ui-selected\:text-sky-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}.ui-selected\:text-sky-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}.ui-selected\:text-slate-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.ui-selected\:text-slate-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.ui-selected\:text-slate-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.ui-selected\:text-slate-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.ui-selected\:text-slate-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.ui-selected\:text-slate-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.ui-selected\:text-slate-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.ui-selected\:text-slate-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.ui-selected\:text-slate-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.ui-selected\:text-slate-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.ui-selected\:text-slate-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.ui-selected\:text-stone-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}.ui-selected\:text-stone-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}.ui-selected\:text-stone-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}.ui-selected\:text-stone-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}.ui-selected\:text-stone-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}.ui-selected\:text-stone-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}.ui-selected\:text-stone-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}.ui-selected\:text-stone-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}.ui-selected\:text-stone-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}.ui-selected\:text-stone-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}.ui-selected\:text-stone-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}.ui-selected\:text-teal-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}.ui-selected\:text-teal-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}.ui-selected\:text-teal-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}.ui-selected\:text-teal-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}.ui-selected\:text-teal-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}.ui-selected\:text-teal-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.ui-selected\:text-teal-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.ui-selected\:text-teal-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.ui-selected\:text-teal-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.ui-selected\:text-teal-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}.ui-selected\:text-teal-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}.ui-selected\:text-tremor-brand[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-emphasis[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.ui-selected\:text-tremor-content-strong[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.ui-selected\:text-violet-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}.ui-selected\:text-violet-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.ui-selected\:text-violet-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}.ui-selected\:text-violet-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}.ui-selected\:text-violet-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.ui-selected\:text-violet-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.ui-selected\:text-violet-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}.ui-selected\:text-violet-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.ui-selected\:text-violet-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}.ui-selected\:text-violet-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}.ui-selected\:text-violet-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}.ui-selected\:text-yellow-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}.ui-selected\:text-yellow-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.ui-selected\:text-yellow-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.ui-selected\:text-yellow-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.ui-selected\:text-yellow-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}.ui-selected\:text-yellow-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.ui-selected\:text-yellow-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.ui-selected\:text-yellow-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.ui-selected\:text-yellow-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.ui-selected\:text-yellow-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.ui-selected\:text-yellow-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}.ui-selected\:text-zinc-100[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.ui-selected\:text-zinc-200[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.ui-selected\:text-zinc-300[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.ui-selected\:text-zinc-400[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.ui-selected\:text-zinc-50[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}.ui-selected\:text-zinc-500[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.ui-selected\:text-zinc-600[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.ui-selected\:text-zinc-700[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.ui-selected\:text-zinc-800[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.ui-selected\:text-zinc-900[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.ui-selected\:text-zinc-950[data-headlessui-state~=selected]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.ui-selected\:shadow-tremor-input[data-headlessui-state~=selected]{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:where([data-headlessui-state~=selected]) .ui-selected\:border-b-2{border-bottom-width:2px}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-amber-950{--tw-border-opacity:1;border-color:rgb(69 26 3/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-blue-950{--tw-border-opacity:1;border-color:rgb(23 37 84/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-300{--tw-border-opacity:1;border-color:rgb(103 232 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-50{--tw-border-opacity:1;border-color:rgb(236 254 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-500{--tw-border-opacity:1;border-color:rgb(6 182 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-600{--tw-border-opacity:1;border-color:rgb(8 145 178/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-700{--tw-border-opacity:1;border-color:rgb(14 116 144/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-800{--tw-border-opacity:1;border-color:rgb(21 94 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-900{--tw-border-opacity:1;border-color:rgb(22 78 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-cyan-950{--tw-border-opacity:1;border-color:rgb(8 51 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-50{--tw-border-opacity:1;border-color:rgb(236 253 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-600{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-700{--tw-border-opacity:1;border-color:rgb(4 120 87/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-800{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-900{--tw-border-opacity:1;border-color:rgb(6 78 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-emerald-950{--tw-border-opacity:1;border-color:rgb(2 44 34/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-100{--tw-border-opacity:1;border-color:rgb(250 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-200{--tw-border-opacity:1;border-color:rgb(245 208 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-300{--tw-border-opacity:1;border-color:rgb(240 171 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-400{--tw-border-opacity:1;border-color:rgb(232 121 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-50{--tw-border-opacity:1;border-color:rgb(253 244 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-500{--tw-border-opacity:1;border-color:rgb(217 70 239/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-600{--tw-border-opacity:1;border-color:rgb(192 38 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-700{--tw-border-opacity:1;border-color:rgb(162 28 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-900{--tw-border-opacity:1;border-color:rgb(112 26 117/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-fuchsia-950{--tw-border-opacity:1;border-color:rgb(74 4 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-gray-950{--tw-border-opacity:1;border-color:rgb(3 7 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-green-950{--tw-border-opacity:1;border-color:rgb(5 46 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-indigo-950{--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-100{--tw-border-opacity:1;border-color:rgb(236 252 203/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-200{--tw-border-opacity:1;border-color:rgb(217 249 157/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-300{--tw-border-opacity:1;border-color:rgb(190 242 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-400{--tw-border-opacity:1;border-color:rgb(163 230 53/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-50{--tw-border-opacity:1;border-color:rgb(247 254 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-500{--tw-border-opacity:1;border-color:rgb(132 204 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-600{--tw-border-opacity:1;border-color:rgb(101 163 13/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-700{--tw-border-opacity:1;border-color:rgb(77 124 15/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-800{--tw-border-opacity:1;border-color:rgb(63 98 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-900{--tw-border-opacity:1;border-color:rgb(54 83 20/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-lime-950{--tw-border-opacity:1;border-color:rgb(26 46 5/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-100{--tw-border-opacity:1;border-color:rgb(245 245 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-300{--tw-border-opacity:1;border-color:rgb(212 212 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-400{--tw-border-opacity:1;border-color:rgb(163 163 163/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-500{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-600{--tw-border-opacity:1;border-color:rgb(82 82 82/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-700{--tw-border-opacity:1;border-color:rgb(64 64 64/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-900{--tw-border-opacity:1;border-color:rgb(23 23 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-neutral-950{--tw-border-opacity:1;border-color:rgb(10 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-50{--tw-border-opacity:1;border-color:rgb(255 247 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-800{--tw-border-opacity:1;border-color:rgb(154 52 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-orange-950{--tw-border-opacity:1;border-color:rgb(67 20 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-pink-950{--tw-border-opacity:1;border-color:rgb(80 7 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-purple-950{--tw-border-opacity:1;border-color:rgb(59 7 100/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-red-950{--tw-border-opacity:1;border-color:rgb(69 10 10/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-200{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-400{--tw-border-opacity:1;border-color:rgb(251 113 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-50{--tw-border-opacity:1;border-color:rgb(255 241 242/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-600{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-700{--tw-border-opacity:1;border-color:rgb(190 18 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-800{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-900{--tw-border-opacity:1;border-color:rgb(136 19 55/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-rose-950{--tw-border-opacity:1;border-color:rgb(76 5 25/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-300{--tw-border-opacity:1;border-color:rgb(125 211 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-400{--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-50{--tw-border-opacity:1;border-color:rgb(240 249 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-700{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-sky-950{--tw-border-opacity:1;border-color:rgb(8 47 73/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-slate-950{--tw-border-opacity:1;border-color:rgb(2 6 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-100{--tw-border-opacity:1;border-color:rgb(245 245 244/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-400{--tw-border-opacity:1;border-color:rgb(168 162 158/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-50{--tw-border-opacity:1;border-color:rgb(250 250 249/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-500{--tw-border-opacity:1;border-color:rgb(120 113 108/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-600{--tw-border-opacity:1;border-color:rgb(87 83 78/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-900{--tw-border-opacity:1;border-color:rgb(28 25 23/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-stone-950{--tw-border-opacity:1;border-color:rgb(12 10 9/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-200{--tw-border-opacity:1;border-color:rgb(153 246 228/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-300{--tw-border-opacity:1;border-color:rgb(94 234 212/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-400{--tw-border-opacity:1;border-color:rgb(45 212 191/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-50{--tw-border-opacity:1;border-color:rgb(240 253 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-600{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-700{--tw-border-opacity:1;border-color:rgb(15 118 110/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-800{--tw-border-opacity:1;border-color:rgb(17 94 89/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-900{--tw-border-opacity:1;border-color:rgb(19 78 74/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-teal-950{--tw-border-opacity:1;border-color:rgb(4 47 46/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-border{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-tremor-brand{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-400{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-500{--tw-border-opacity:1;border-color:rgb(139 92 246/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-600{--tw-border-opacity:1;border-color:rgb(124 58 237/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-700{--tw-border-opacity:1;border-color:rgb(109 40 217/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-800{--tw-border-opacity:1;border-color:rgb(91 33 182/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-900{--tw-border-opacity:1;border-color:rgb(76 29 149/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-violet-950{--tw-border-opacity:1;border-color:rgb(46 16 101/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-yellow-950{--tw-border-opacity:1;border-color:rgb(66 32 6/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-400{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-50{--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-500{--tw-border-opacity:1;border-color:rgb(113 113 122/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:border-zinc-950{--tw-border-opacity:1;border-color:rgb(9 9 11/var(--tw-border-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-200{--tw-bg-opacity:1;background-color:rgb(165 243 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-300{--tw-bg-opacity:1;background-color:rgb(103 232 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-700{--tw-bg-opacity:1;background-color:rgb(14 116 144/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-800{--tw-bg-opacity:1;background-color:rgb(21 94 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-900{--tw-bg-opacity:1;background-color:rgb(22 78 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-cyan-950{--tw-bg-opacity:1;background-color:rgb(8 51 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-300{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-800{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-emerald-950{--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-100{--tw-bg-opacity:1;background-color:rgb(250 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-200{--tw-bg-opacity:1;background-color:rgb(245 208 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-300{--tw-bg-opacity:1;background-color:rgb(240 171 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-400{--tw-bg-opacity:1;background-color:rgb(232 121 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-50{--tw-bg-opacity:1;background-color:rgb(253 244 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-500{--tw-bg-opacity:1;background-color:rgb(217 70 239/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-600{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-800{--tw-bg-opacity:1;background-color:rgb(134 25 143/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-900{--tw-bg-opacity:1;background-color:rgb(112 26 117/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-fuchsia-950{--tw-bg-opacity:1;background-color:rgb(74 4 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-indigo-950{--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-100{--tw-bg-opacity:1;background-color:rgb(236 252 203/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-200{--tw-bg-opacity:1;background-color:rgb(217 249 157/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-50{--tw-bg-opacity:1;background-color:rgb(247 254 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-500{--tw-bg-opacity:1;background-color:rgb(132 204 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-600{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-700{--tw-bg-opacity:1;background-color:rgb(77 124 15/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-800{--tw-bg-opacity:1;background-color:rgb(63 98 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-900{--tw-bg-opacity:1;background-color:rgb(54 83 20/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-lime-950{--tw-bg-opacity:1;background-color:rgb(26 46 5/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-300{--tw-bg-opacity:1;background-color:rgb(212 212 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(163 163 163/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-500{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-600{--tw-bg-opacity:1;background-color:rgb(82 82 82/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(64 64 64/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(10 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-300{--tw-bg-opacity:1;background-color:rgb(253 186 116/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-pink-950{--tw-bg-opacity:1;background-color:rgb(80 7 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-300{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-700{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-800{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-rose-950{--tw-bg-opacity:1;background-color:rgb(76 5 25/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-200{--tw-bg-opacity:1;background-color:rgb(186 230 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-300{--tw-bg-opacity:1;background-color:rgb(125 211 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-400{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-700{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-800{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-900{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-200{--tw-bg-opacity:1;background-color:rgb(231 229 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-300{--tw-bg-opacity:1;background-color:rgb(214 211 209/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-400{--tw-bg-opacity:1;background-color:rgb(168 162 158/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-500{--tw-bg-opacity:1;background-color:rgb(120 113 108/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-600{--tw-bg-opacity:1;background-color:rgb(87 83 78/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-700{--tw-bg-opacity:1;background-color:rgb(68 64 60/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-800{--tw-bg-opacity:1;background-color:rgb(41 37 36/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-900{--tw-bg-opacity:1;background-color:rgb(28 25 23/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-200{--tw-bg-opacity:1;background-color:rgb(153 246 228/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-300{--tw-bg-opacity:1;background-color:rgb(94 234 212/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-400{--tw-bg-opacity:1;background-color:rgb(45 212 191/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-800{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-900{--tw-bg-opacity:1;background-color:rgb(19 78 74/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-teal-950{--tw-bg-opacity:1;background-color:rgb(4 47 46/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-300{--tw-bg-opacity:1;background-color:rgb(196 181 253/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-800{--tw-bg-opacity:1;background-color:rgb(91 33 182/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-violet-950{--tw-bg-opacity:1;background-color:rgb(46 16 101/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-600{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-amber-950{--tw-text-opacity:1;color:rgb(69 26 3/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-blue-950{--tw-text-opacity:1;color:rgb(23 37 84/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-50{--tw-text-opacity:1;color:rgb(236 254 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-800{--tw-text-opacity:1;color:rgb(21 94 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-cyan-950{--tw-text-opacity:1;color:rgb(8 51 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-dark-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-emerald-950{--tw-text-opacity:1;color:rgb(2 44 34/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-200{--tw-text-opacity:1;color:rgb(245 208 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-300{--tw-text-opacity:1;color:rgb(240 171 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-400{--tw-text-opacity:1;color:rgb(232 121 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-50{--tw-text-opacity:1;color:rgb(253 244 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-500{--tw-text-opacity:1;color:rgb(217 70 239/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-600{--tw-text-opacity:1;color:rgb(192 38 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-700{--tw-text-opacity:1;color:rgb(162 28 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-800{--tw-text-opacity:1;color:rgb(134 25 143/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-900{--tw-text-opacity:1;color:rgb(112 26 117/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-fuchsia-950{--tw-text-opacity:1;color:rgb(74 4 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-green-950{--tw-text-opacity:1;color:rgb(5 46 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-indigo-950{--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-100{--tw-text-opacity:1;color:rgb(236 252 203/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-200{--tw-text-opacity:1;color:rgb(217 249 157/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-300{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-400{--tw-text-opacity:1;color:rgb(163 230 53/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-50{--tw-text-opacity:1;color:rgb(247 254 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-500{--tw-text-opacity:1;color:rgb(132 204 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-600{--tw-text-opacity:1;color:rgb(101 163 13/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-700{--tw-text-opacity:1;color:rgb(77 124 15/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-800{--tw-text-opacity:1;color:rgb(63 98 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-900{--tw-text-opacity:1;color:rgb(54 83 20/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-lime-950{--tw-text-opacity:1;color:rgb(26 46 5/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-100{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-300{--tw-text-opacity:1;color:rgb(212 212 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-800{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-50{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-900{--tw-text-opacity:1;color:rgb(124 45 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-orange-950{--tw-text-opacity:1;color:rgb(67 20 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-pink-950{--tw-text-opacity:1;color:rgb(80 7 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-purple-950{--tw-text-opacity:1;color:rgb(59 7 100/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-red-950{--tw-text-opacity:1;color:rgb(69 10 10/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-100{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-300{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-400{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-50{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-rose-950{--tw-text-opacity:1;color:rgb(76 5 25/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-100{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-200{--tw-text-opacity:1;color:rgb(186 230 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-300{--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-800{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-900{--tw-text-opacity:1;color:rgb(12 74 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-sky-950{--tw-text-opacity:1;color:rgb(8 47 73/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-100{--tw-text-opacity:1;color:rgb(204 251 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-200{--tw-text-opacity:1;color:rgb(153 246 228/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-400{--tw-text-opacity:1;color:rgb(45 212 191/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-50{--tw-text-opacity:1;color:rgb(240 253 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-900{--tw-text-opacity:1;color:rgb(19 78 74/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-teal-950{--tw-text-opacity:1;color:rgb(4 47 46/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-brand{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-emphasis{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-100{--tw-text-opacity:1;color:rgb(237 233 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-300{--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-400{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-violet-950{--tw-text-opacity:1;color:rgb(46 16 101/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-yellow-950{--tw-text-opacity:1;color:rgb(66 32 6/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-100{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}:where([data-headlessui-state~=selected]) .ui-selected\:shadow-tremor-input{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ui-active\:bg-tremor-background-muted[data-headlessui-state~=active]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.ui-active\:text-tremor-content-strong[data-headlessui-state~=active]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:where([data-headlessui-state~=active]) .ui-active\:bg-tremor-background-muted{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}:where([data-headlessui-state~=active]) .ui-active\:text-tremor-content-strong{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}:is(.dark .dark\:divide-dark-tremor-border)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(55 65 81/var(--tw-divide-opacity))}:is(.dark .dark\:border-dark-tremor-background){--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-emphasis){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-inverted){--tw-border-opacity:1;border-color:rgb(30 27 75/var(--tw-border-opacity))}:is(.dark .dark\:border-dark-tremor-brand-subtle){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-emphasis){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-background-subtle){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-border){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted){--tw-bg-opacity:1;background-color:rgb(30 27 75/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-brand-muted\/70){background-color:rgba(30,27,75,.7)}:is(.dark .dark\:bg-dark-tremor-brand-subtle){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}:is(.dark .dark\:bg-dark-tremor-content-subtle){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-10){--tw-bg-opacity:0.1}:is(.dark .dark\:bg-opacity-25){--tw-bg-opacity:0.25}:is(.dark .dark\:bg-opacity-30){--tw-bg-opacity:0.3}:is(.dark .dark\:fill-dark-tremor-content){fill:#6b7280}:is(.dark .dark\:fill-dark-tremor-content-emphasis){fill:#e5e7eb}:is(.dark .dark\:stroke-dark-tremor-background){stroke:#111827}:is(.dark .dark\:stroke-dark-tremor-border){stroke:#374151}:is(.dark .dark\:stroke-dark-tremor-brand){stroke:#6366f1}:is(.dark .dark\:stroke-dark-tremor-brand-muted){stroke:#1e1b4b}:is(.dark .dark\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-emphasis){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-brand-inverted){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:text-dark-tremor-content-subtle){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:accent-dark-tremor-brand){accent-color:#6366f1}:is(.dark .dark\:opacity-25){opacity:.25}:is(.dark .dark\:shadow-dark-tremor-card){--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-dropdown){--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:outline-dark-tremor-brand){outline-color:#6366f1}:is(.dark .dark\:ring-dark-tremor-brand-inverted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-brand-muted){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .dark\:ring-dark-tremor-ring){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-dark-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-tremor-content-subtle)::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-brand-emphasis:hover){--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}:is(.dark .dark\:hover\:border-dark-tremor-content-emphasis:hover){--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-muted:hover){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-background-subtle:hover){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-emphasis:hover){--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-dark-tremor-brand-faint:hover){--tw-bg-opacity:1;background-color:rgb(11 18 41/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-opacity-20:hover){--tw-bg-opacity:0.2}:is(.dark .dark\:hover\:text-dark-tremor-brand-emphasis:hover){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-dark-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content:hover){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-tremor-content-emphasis:hover){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}:is(.dark .hover\:dark\:text-dark-tremor-content):hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}:is(.dark .dark\:focus\:border-dark-tremor-brand-subtle:focus){--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .focus\:dark\:border-dark-tremor-brand-subtle):focus{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity))}:is(.dark .dark\:focus\:ring-dark-tremor-brand-muted:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .focus\:dark\:ring-dark-tremor-brand-muted):focus{--tw-ring-opacity:1;--tw-ring-color:rgb(30 27 75/var(--tw-ring-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .aria-selected\:dark\:\!bg-dark-tremor-background-subtle)[aria-selected=true]{--tw-bg-opacity:1!important;background-color:rgb(31 41 55/var(--tw-bg-opacity))!important}:is(.dark .dark\:aria-selected\:bg-dark-tremor-background-emphasis[aria-selected=true]){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-brand-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(30 27 75/var(--tw-text-opacity))}:is(.dark .dark\:aria-selected\:text-dark-tremor-content-inverted[aria-selected=true]){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-border[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:border-dark-tremor-brand[data-headlessui-state~=selected]){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:bg-dark-tremor-background-muted[data-headlessui-state~=selected]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-brand[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-emphasis[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:text-dark-tremor-content-strong[data-headlessui-state~=selected]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark .dark\:ui-selected\:shadow-dark-tremor-input[data-headlessui-state~=selected]){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-border){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:border-dark-tremor-brand){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-brand){--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-emphasis){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=selected]) .dark\:ui-selected\:shadow-dark-tremor-input){--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:ui-active\:bg-dark-tremor-background-muted[data-headlessui-state~=active]){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark .dark\:ui-active\:text-dark-tremor-content-strong[data-headlessui-state~=active]){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:bg-dark-tremor-background-muted){--tw-bg-opacity:1;background-color:rgb(19 26 43/var(--tw-bg-opacity))}:is(.dark :where([data-headlessui-state~=active]) .dark\:ui-active\:text-dark-tremor-content-strong){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}@media (min-width:640px){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:h-screen{height:100vh}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-lg{max-width:32rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-start{align-items:flex-start}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}}@media (min-width:768px){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}}@media (min-width:1024px){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:max-w-\[200px\]{max-width:200px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button,.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none} \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_buildManifest.js b/ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js similarity index 100% rename from ui/litellm-dashboard/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_buildManifest.js rename to ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js diff --git a/ui/litellm-dashboard/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_ssgManifest.js b/ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js similarity index 100% rename from ui/litellm-dashboard/out/_next/static/6ZCXBZB2XEIoV3uj74ZuB/_ssgManifest.js rename to ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js diff --git a/ui/litellm-dashboard/out/index.html b/ui/litellm-dashboard/out/index.html index db642e8cb95..930018e0059 100644 --- a/ui/litellm-dashboard/out/index.html +++ b/ui/litellm-dashboard/out/index.html @@ -1 +1 @@ -LiteLLM Dashboard \ No newline at end of file +LiteLLM Dashboard \ No newline at end of file diff --git a/ui/litellm-dashboard/out/index.txt b/ui/litellm-dashboard/out/index.txt index f12af0b3b5b..d67a480b373 100644 --- a/ui/litellm-dashboard/out/index.txt +++ b/ui/litellm-dashboard/out/index.txt @@ -1,7 +1,7 @@ 2:I[77831,[],""] -3:I[7926,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-de58db2e54247c7a.js"],""] +3:I[7926,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-6a39771cacf75ea6.js"],""] 4:I[5613,[],""] 5:I[31778,[],""] -0:["6ZCXBZB2XEIoV3uj74ZuB",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/8c755b71ba117fd6.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] +0:["obp5wqVSVDMiDTC414cR8",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/f04e46b02318b660.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] 6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"LiteLLM Dashboard"}],["$","meta","3",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","4",{"rel":"icon","href":"/ui/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","meta","5",{"name":"next-size-adjust"}]] 1:null From 5488bf4921b44bf3865875c0eb82c0b8b68c9a24 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 17:49:56 -0700 Subject: [PATCH 234/378] feat(router.py): enable default fallbacks allow user to define a generic list of fallbacks, in case a new deployment is bad Closes https://github.com/BerriAI/litellm/issues/3623 --- litellm/router.py | 53 +++++++++++++++++++++----- litellm/tests/test_router_fallbacks.py | 47 +++++++++++++++++++++++ litellm/types/router.py | 43 ++++++++++++++++++++- 3 files changed, 132 insertions(+), 11 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index e524937aea3..fe87092948f 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -9,7 +9,7 @@ import copy, httpx from datetime import datetime -from typing import Dict, List, Optional, Union, Literal, Any, BinaryIO, Tuple +from typing import Dict, List, Optional, Union, Literal, Any, BinaryIO, Tuple, TypedDict from typing_extensions import overload import random, threading, time, traceback, uuid import litellm, openai, hashlib, json @@ -47,6 +47,7 @@ from litellm.types.router import ( updateLiteLLMParams, RetryPolicy, AlertingConfig, + DeploymentTypedDict, ) from litellm.integrations.custom_logger import CustomLogger from litellm.llms.azure import get_azure_ad_token_from_oidc @@ -62,7 +63,7 @@ class Router: def __init__( self, - model_list: Optional[list] = None, + model_list: Optional[List[DeploymentTypedDict]] = None, ## CACHING ## redis_url: Optional[str] = None, redis_host: Optional[str] = None, @@ -83,6 +84,9 @@ class Router: default_max_parallel_requests: Optional[int] = None, set_verbose: bool = False, debug_level: Literal["DEBUG", "INFO"] = "INFO", + default_fallbacks: Optional[ + List[str] + ] = None, # generic fallbacks, works across all deployments fallbacks: List = [], context_window_fallbacks: List = [], model_group_alias: Optional[dict] = {}, @@ -259,6 +263,11 @@ class Router: self.retry_after = retry_after self.routing_strategy = routing_strategy self.fallbacks = fallbacks or litellm.fallbacks + if default_fallbacks is not None: + if self.fallbacks is not None: + self.fallbacks.append({"*": default_fallbacks}) + else: + self.fallbacks = [{"*": default_fallbacks}] self.context_window_fallbacks = ( context_window_fallbacks or litellm.context_window_fallbacks ) @@ -1471,13 +1480,21 @@ class Router: pass elif fallbacks is not None: verbose_router_logger.debug(f"inside model fallbacks: {fallbacks}") - for item in fallbacks: - key_list = list(item.keys()) - if len(key_list) == 0: - continue - if key_list[0] == model_group: + generic_fallback_idx: Optional[int] = None + ## check for specific model group-specific fallbacks + for idx, item in enumerate(fallbacks): + if list(item.keys())[0] == model_group: fallback_model_group = item[model_group] break + elif list(item.keys())[0] == "*": + generic_fallback_idx = idx + ## if none, check for generic fallback + if ( + fallback_model_group is None + and generic_fallback_idx is not None + ): + fallback_model_group = fallbacks[generic_fallback_idx]["*"] + if fallback_model_group is None: verbose_router_logger.info( f"No fallback model group found for original model_group={model_group}. Fallbacks={fallbacks}" @@ -1537,7 +1554,7 @@ class Router: """ _healthy_deployments = await self._async_get_healthy_deployments( - model=kwargs.get("model"), + model=kwargs.get("model") or "", ) # raises an exception if this error should not be retries @@ -1644,12 +1661,18 @@ class Router: Try calling the function_with_retries If it fails after num_retries, fall back to another model group """ + mock_testing_fallbacks = kwargs.pop("mock_testing_fallbacks", None) model_group = kwargs.get("model") fallbacks = kwargs.get("fallbacks", self.fallbacks) context_window_fallbacks = kwargs.get( "context_window_fallbacks", self.context_window_fallbacks ) try: + if mock_testing_fallbacks is not None and mock_testing_fallbacks == True: + raise Exception( + f"This is a mock exception for model={model_group}, to trigger a fallback. Fallbacks={fallbacks}" + ) + response = self.function_with_retries(*args, **kwargs) return response except Exception as e: @@ -1658,7 +1681,7 @@ class Router: try: if ( hasattr(e, "status_code") - and e.status_code == 400 + and e.status_code == 400 # type: ignore and not isinstance(e, litellm.ContextWindowExceededError) ): # don't retry a malformed request raise e @@ -1700,10 +1723,20 @@ class Router: elif fallbacks is not None: verbose_router_logger.debug(f"inside model fallbacks: {fallbacks}") fallback_model_group = None - for item in fallbacks: + generic_fallback_idx: Optional[int] = None + ## check for specific model group-specific fallbacks + for idx, item in enumerate(fallbacks): if list(item.keys())[0] == model_group: fallback_model_group = item[model_group] break + elif list(item.keys())[0] == "*": + generic_fallback_idx = idx + ## if none, check for generic fallback + if ( + fallback_model_group is None + and generic_fallback_idx is not None + ): + fallback_model_group = fallbacks[generic_fallback_idx]["*"] if fallback_model_group is None: raise original_exception diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index ce2b014e9cf..4ab97b274d3 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -1007,3 +1007,50 @@ async def test_service_unavailable_fallbacks(sync_mode): ) assert response.model == "gpt-35-turbo" + + +@pytest.mark.parametrize("sync_mode", [True, False]) +@pytest.mark.asyncio +async def test_default_model_fallbacks(sync_mode): + """ + Related issue - https://github.com/BerriAI/litellm/issues/3623 + + If model misconfigured, setup a default model for generic fallback + """ + router = Router( + model_list=[ + { + "model_name": "bad-model", + "litellm_params": { + "model": "openai/my-bad-model", + "api_key": "my-bad-api-key", + }, + }, + { + "model_name": "my-good-model", + "litellm_params": { + "model": "gpt-4o", + "api_key": os.getenv("OPENAI_API_KEY"), + }, + }, + ], + default_fallbacks=["my-good-model"], + ) + + if sync_mode: + response = router.completion( + model="bad-model", + messages=[{"role": "user", "content": "Hey, how's it going?"}], + mock_testing_fallbacks=True, + mock_response="Hey! nice day", + ) + else: + response = await router.acompletion( + model="bad-model", + messages=[{"role": "user", "content": "Hey, how's it going?"}], + mock_testing_fallbacks=True, + mock_response="Hey! nice day", + ) + + assert isinstance(response, litellm.ModelResponse) + assert response.model is not None and response.model == "gpt-4o" diff --git a/litellm/types/router.py b/litellm/types/router.py index e8f3ff64124..68ee387fea0 100644 --- a/litellm/types/router.py +++ b/litellm/types/router.py @@ -1,4 +1,4 @@ -from typing import List, Optional, Union, Dict, Tuple, Literal +from typing import List, Optional, Union, Dict, Tuple, Literal, TypedDict import httpx from pydantic import BaseModel, validator, Field from .completion import CompletionRequest @@ -277,6 +277,47 @@ class updateDeployment(BaseModel): protected_namespaces = () +class LiteLLMParamsTypedDict(TypedDict, total=False): + """ + [TODO] + - allow additional params (not in list) + - set value to none if not set -> don't raise error if value not set + """ + + model: str + custom_llm_provider: Optional[str] + tpm: Optional[int] + rpm: Optional[int] + api_key: Optional[str] + api_base: Optional[str] + api_version: Optional[str] + timeout: Optional[Union[float, str, httpx.Timeout]] + stream_timeout: Optional[Union[float, str]] + max_retries: Optional[int] + organization: Optional[str] # for openai orgs + ## UNIFIED PROJECT/REGION ## + region_name: Optional[str] + ## VERTEX AI ## + vertex_project: Optional[str] + vertex_location: Optional[str] + ## AWS BEDROCK / SAGEMAKER ## + aws_access_key_id: Optional[str] + aws_secret_access_key: Optional[str] + aws_region_name: Optional[str] + ## IBM WATSONX ## + watsonx_region_name: Optional[str] + ## CUSTOM PRICING ## + input_cost_per_token: Optional[float] + output_cost_per_token: Optional[float] + input_cost_per_second: Optional[float] + output_cost_per_second: Optional[float] + + +class DeploymentTypedDict(TypedDict): + model_name: str + litellm_params: LiteLLMParamsTypedDict + + class Deployment(BaseModel): model_name: str litellm_params: LiteLLM_Params From 48779cb341e763e609690ad75dca985aee0e45a0 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 17:58:28 -0700 Subject: [PATCH 235/378] docs(cost_tracking.md): update response object for spend tracking doc --- docs/my-website/docs/proxy/cost_tracking.md | 21 ++++++++++++++++----- docs/my-website/sidebars.js | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/docs/my-website/docs/proxy/cost_tracking.md b/docs/my-website/docs/proxy/cost_tracking.md index 56586361f3c..d4760d83fe9 100644 --- a/docs/my-website/docs/proxy/cost_tracking.md +++ b/docs/my-website/docs/proxy/cost_tracking.md @@ -1,7 +1,9 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Spend Tracking +# 💸 Spend Tracking + +Track spend for keys, users, and teams across 100+ LLMs. ## Getting Spend Reports - To Charge Other Teams, API Keys @@ -27,21 +29,30 @@ curl -X GET 'http://localhost:4000/global/spend/report?start_date=2023-04-01&end { "team_name": "Prod Team", "total_spend": 0.0015265, - "metadata": [ + "metadata": [ # see the spend by unique(key + model) { "model": "gpt-4", "spend": 0.00123, - "total_tokens": 28 + "total_tokens": 28, + "api_key": "88dc28.." # the hashed api key + }, + { + "model": "gpt-4", + "spend": 0.00123, + "total_tokens": 28, + "api_key": "a73dc2.." # the hashed api key }, { "model": "chatgpt-v-2", "spend": 0.000214, - "total_tokens": 122 + "total_tokens": 122, + "api_key": "898c28.." # the hashed api key }, { "model": "gpt-3.5-turbo", "spend": 0.0000825, - "total_tokens": 85 + "total_tokens": 85, + "api_key": "84dc28.." # the hashed api key } ] } diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 3bb5dc88e50..2deca925869 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -39,6 +39,7 @@ const sidebars = { "proxy/demo", "proxy/configs", "proxy/reliability", + "proxy/cost_tracking", "proxy/users", "proxy/user_keys", "proxy/enterprise", @@ -52,7 +53,6 @@ const sidebars = { "proxy/team_based_routing", "proxy/customer_routing", "proxy/ui", - "proxy/cost_tracking", "proxy/token_auth", { type: "category", From 38988f030ac74c8702473a76a43a070fe706635a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:06:10 -0700 Subject: [PATCH 236/378] fix(router.py): fix typing --- litellm/router.py | 2 +- litellm/tests/test_azure_perf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index fe87092948f..b4603c6d07c 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -63,7 +63,7 @@ class Router: def __init__( self, - model_list: Optional[List[DeploymentTypedDict]] = None, + model_list: Optional[List[Union[DeploymentTypedDict, Dict]]] = None, ## CACHING ## redis_url: Optional[str] = None, redis_host: Optional[str] = None, diff --git a/litellm/tests/test_azure_perf.py b/litellm/tests/test_azure_perf.py index 9654f127341..8afc59f929c 100644 --- a/litellm/tests/test_azure_perf.py +++ b/litellm/tests/test_azure_perf.py @@ -26,7 +26,7 @@ model_list = [ } ] -router = litellm.Router(model_list=model_list) +router = litellm.Router(model_list=model_list) # type: ignore async def _openai_completion(): From 3694b5e7c078695a23d673aa28f3001bb869f938 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:12:01 -0700 Subject: [PATCH 237/378] refactor(main.py): trigger new build --- litellm/main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index d2089663112..6156d9c398b 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -15,7 +15,6 @@ import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx import litellm - from ._logging import verbose_logger from litellm import ( # type: ignore client, From 29449aa5c1c70f879ba790dd0eba0c3308840dbc Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:13:13 -0700 Subject: [PATCH 238/378] fix(utils.py): fix watsonx exception mapping --- litellm/tests/test_completion.py | 2 ++ litellm/utils.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 45a53ca56ae..d08a4ae3bab 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -3342,6 +3342,8 @@ def test_completion_watsonx(): print(response) except litellm.APIError as e: pass + except litellm.RateLimitError as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") diff --git a/litellm/utils.py b/litellm/utils.py index 14534147bb5..4a8e7e69154 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -8514,7 +8514,7 @@ def exception_type( request=original_exception.request, ) elif custom_llm_provider == "watsonx": - if "token_quota_reached" in error_response: + if "token_quota_reached" in error_str: exception_mapping_worked = True raise RateLimitError( message=f"WatsonxException: Rate Limit Errror - {error_str}", From 228ed25de594198ee786efbf927e84178daab97b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:16:05 -0700 Subject: [PATCH 239/378] docs(exception_mapping.md): add watsonx exception mapping to docs --- docs/my-website/docs/exception_mapping.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/my-website/docs/exception_mapping.md b/docs/my-website/docs/exception_mapping.md index 2345e9f838a..9ee93269f4f 100644 --- a/docs/my-website/docs/exception_mapping.md +++ b/docs/my-website/docs/exception_mapping.md @@ -111,6 +111,7 @@ Base case - we return the original exception. | custom_llm_provider | Timeout | ContextWindowExceededError | BadRequestError | NotFoundError | ContentPolicyViolationError | AuthenticationError | APIError | RateLimitError | ServiceUnavailableError | PermissionDeniedError | UnprocessableEntityError | |----------------------------|---------|----------------------------|------------------|---------------|-----------------------------|---------------------|----------|----------------|-------------------------|-----------------------|-------------------------| | openai | ✓ | ✓ | ✓ | | ✓ | ✓ | | | | | | +| watsonx | | | | | | | |✓| | | | | text-completion-openai | ✓ | ✓ | ✓ | | ✓ | ✓ | | | | | | | custom_openai | ✓ | ✓ | ✓ | | ✓ | ✓ | | | | | | | openai_compatible_providers| ✓ | ✓ | ✓ | | ✓ | ✓ | | | | | | From 4ec3b4d9a82dee9343c252d6e43eb2ebd49d7380 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:17:02 -0700 Subject: [PATCH 240/378] docs(exception_mapping.md): cleanup docs --- docs/my-website/docs/exception_mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/exception_mapping.md b/docs/my-website/docs/exception_mapping.md index 9ee93269f4f..5e6006ebee9 100644 --- a/docs/my-website/docs/exception_mapping.md +++ b/docs/my-website/docs/exception_mapping.md @@ -106,7 +106,7 @@ To see how it's implemented - [check out the code](https://github.com/BerriAI/li ## Custom mapping list -Base case - we return the original exception. +Base case - we return `litellm.APIConnectionError` exception (inherits from openai's APIConnectionError exception). | custom_llm_provider | Timeout | ContextWindowExceededError | BadRequestError | NotFoundError | ContentPolicyViolationError | AuthenticationError | APIError | RateLimitError | ServiceUnavailableError | PermissionDeniedError | UnprocessableEntityError | |----------------------------|---------|----------------------------|------------------|---------------|-----------------------------|---------------------|----------|----------------|-------------------------|-----------------------|-------------------------| From 155f1f164f1cd7e55eb1430990bbce45b949e6b8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:18:22 -0700 Subject: [PATCH 241/378] refactor(utils.py): trigger local_testing --- litellm/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/utils.py b/litellm/utils.py index 4a8e7e69154..ab0f5c529a5 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -13,6 +13,7 @@ import dotenv, json, traceback, threading, base64, ast import subprocess, os from os.path import abspath, join, dirname import litellm, openai + import itertools import random, uuid, requests # type: ignore from functools import wraps From 3686789c362943e11b4ac1f2119053c0e6be378f Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 18:23:23 -0700 Subject: [PATCH 242/378] feat - reset spend per team, api_key --- enterprise/utils.py | 4 +-- litellm/proxy/proxy_server.py | 57 +++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/enterprise/utils.py b/enterprise/utils.py index 1b5036e96ad..90b14314c27 100644 --- a/enterprise/utils.py +++ b/enterprise/utils.py @@ -44,8 +44,8 @@ async def ui_get_spend_by_tags(start_date: str, end_date: str, prisma_client): # print("tags - spend") # print(response) # Bar Chart 1 - Spend per tag - Top 10 tags by spend - total_spend_per_tag = collections.defaultdict(float) - total_requests_per_tag = collections.defaultdict(int) + total_spend_per_tag: collections.defaultdict = collections.defaultdict(float) + total_requests_per_tag: collections.defaultdict = collections.defaultdict(int) for row in response: tag_name = row["individual_request_tag"] tag_spend = row["total_spend"] diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6388bd5fd16..9b2e01bc847 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -5922,6 +5922,63 @@ async def view_spend_logs( ) +@router.get( + "/global/spend/reset", + tags=["Budget & Spend Tracking"], + dependencies=[Depends(user_api_key_auth)], +) +async def global_spend_reset( + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + ADMIN ONLY / MASTER KEY Only Endpoint + + Globally reset spend for All API Keys and Teams, maintain LiteLLM_SpendLogs + + 1. LiteLLM_SpendLogs will maintain the logs on spend, no data gets deleted from there + 2. LiteLLM_VerificationTokens spend will be set = 0 + 3. LiteLLM_TeamTable spend will be set = 0 + + """ + global prisma_client, master_key + if prisma_client is None: + raise ProxyException( + message="Prisma Client is not initialized", + type="internal_error", + param="None", + code=status.HTTP_401_UNAUTHORIZED, + ) + + if master_key is None: + raise ProxyException( + message="Master key is not initialized, please set LITELLM_MASTER_KEY in .env", + type="internal_error", + param="None", + code=status.HTTP_401_UNAUTHORIZED, + ) + + if user_api_key_dict.api_key is None: + raise ProxyException( + message="no api_key passed", + type="auth_error", + param="master_key", + code=status.HTTP_401_UNAUTHORIZED, + ) + + if not secrets.compare_digest(master_key, user_api_key_dict.api_key): + raise ProxyException( + message="/global/spend/reset Route only allowed for master key", + type="auth_error", + param="master_key", + code=status.HTTP_401_UNAUTHORIZED, + ) + + await prisma_client.db.litellm_verificationtoken.update_many( + data={"spend": 0.0}, where={} + ) + await prisma_client.db.litellm_teamtable.update_many(data={"spend": 0.0}, where={}) + + @router.get( "/global/spend/logs", tags=["Budget & Spend Tracking"], From d4123951d9e9ee463a11c8de3e26c26dc11b0a7e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:27:39 -0700 Subject: [PATCH 243/378] test: handle watsonx rate limit error --- litellm/main.py | 1 + litellm/tests/test_completion.py | 2 ++ litellm/tests/test_embedding.py | 2 ++ litellm/tests/test_streaming.py | 5 ++++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index 6156d9c398b..d2089663112 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -15,6 +15,7 @@ import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx import litellm + from ._logging import verbose_logger from litellm import ( # type: ignore client, diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index d08a4ae3bab..13c0d2f96c3 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -3447,6 +3447,8 @@ async def test_acompletion_stream_watsonx(): # Add any assertions here to check the response async for chunk in response: print(chunk) + except litellm.RateLimitError as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index 8da847b64e0..a441b0e70f8 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -494,6 +494,8 @@ def test_watsonx_embeddings(): ) print(f"response: {response}") assert isinstance(response.usage, litellm.Usage) + except litellm.RateLimitError as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") diff --git a/litellm/tests/test_streaming.py b/litellm/tests/test_streaming.py index a948a5683a5..6dcdbeb1776 100644 --- a/litellm/tests/test_streaming.py +++ b/litellm/tests/test_streaming.py @@ -456,7 +456,8 @@ def test_completion_claude_stream(): print(f"completion_response: {complete_response}") except Exception as e: pytest.fail(f"Error occurred: {e}") - + + # test_completion_claude_stream() def test_completion_claude_2_stream(): litellm.set_verbose = True @@ -1416,6 +1417,8 @@ def test_completion_watsonx_stream(): raise Exception("finish reason not set for last chunk") if complete_response.strip() == "": raise Exception("Empty response received") + except litellm.RateLimitError as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") From 724d880a4513a5790add1674bfe0ae665b414bf7 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 18:40:51 -0700 Subject: [PATCH 244/378] test(test_completion.py): handle async watsonx call fail --- litellm/main.py | 1 - litellm/tests/test_completion.py | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index d2089663112..6156d9c398b 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -15,7 +15,6 @@ import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx import litellm - from ._logging import verbose_logger from litellm import ( # type: ignore client, diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 13c0d2f96c3..5ee2961979a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -3427,6 +3427,8 @@ async def test_acompletion_watsonx(): ) # Add any assertions here to check the response print(response) + except litellm.RateLimitError as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") From 071a70c5fcbc8bcb64b62bbb790d314fbbe82638 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 19:01:19 -0700 Subject: [PATCH 245/378] test: fix watsonx api error --- litellm/tests/test_completion.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 5ee2961979a..aa0baa2b41a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -3363,6 +3363,8 @@ def test_completion_stream_watsonx(): print(chunk) except litellm.APIError as e: pass + except litellm.RateLimitError as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") From 5b51acc77355c9d3b30d0e599592d20b6eee073c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 20:21:23 -0700 Subject: [PATCH 246/378] fix type hints on main --- enterprise/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enterprise/utils.py b/enterprise/utils.py index 1b5036e96ad..90b14314c27 100644 --- a/enterprise/utils.py +++ b/enterprise/utils.py @@ -44,8 +44,8 @@ async def ui_get_spend_by_tags(start_date: str, end_date: str, prisma_client): # print("tags - spend") # print(response) # Bar Chart 1 - Spend per tag - Top 10 tags by spend - total_spend_per_tag = collections.defaultdict(float) - total_requests_per_tag = collections.defaultdict(int) + total_spend_per_tag: collections.defaultdict = collections.defaultdict(float) + total_requests_per_tag: collections.defaultdict = collections.defaultdict(int) for row in response: tag_name = row["individual_request_tag"] tag_spend = row["total_spend"] From da0e10954a1b1849426a1e15ed36340eda1074c3 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 20:31:59 -0700 Subject: [PATCH 247/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 45a53ca56ae..2d4bf0e6879 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -885,7 +885,7 @@ async def test_acompletion_claude2_1(): }, {"role": "user", "content": "Generate a 3 liner joke for me"}, ] - # test without max tokens + # test without max-tokens response = await litellm.acompletion(model="claude-2.1", messages=messages) # Add any assertions here to check the response print(response) From b8cecd4c40217bc8456c470f6af50ffbaaf5bacc Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 20:38:45 -0700 Subject: [PATCH 248/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 2d4bf0e6879..45a53ca56ae 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -885,7 +885,7 @@ async def test_acompletion_claude2_1(): }, {"role": "user", "content": "Generate a 3 liner joke for me"}, ] - # test without max-tokens + # test without max tokens response = await litellm.acompletion(model="claude-2.1", messages=messages) # Add any assertions here to check the response print(response) From 9bde3ccd1d3cba67462ff472b105fc53d357d131 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 20:48:38 -0700 Subject: [PATCH 249/378] (ci/cd) fixes --- litellm/tests/test_completion.py | 2 +- proxy_server_config.yaml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index aa0baa2b41a..ccc73a26036 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -885,7 +885,7 @@ async def test_acompletion_claude2_1(): }, {"role": "user", "content": "Generate a 3 liner joke for me"}, ] - # test without max tokens + # test without max-tokens response = await litellm.acompletion(model="claude-2.1", messages=messages) # Add any assertions here to check the response print(response) diff --git a/proxy_server_config.yaml b/proxy_server_config.yaml index 0673d967d10..9b0e7c9d0cc 100644 --- a/proxy_server_config.yaml +++ b/proxy_server_config.yaml @@ -84,7 +84,6 @@ model_list: model: text-completion-openai/gpt-3.5-turbo-instruct litellm_settings: drop_params: True - enable_preview_features: True # max_budget: 100 # budget_duration: 30d num_retries: 5 From 5de31e9318638174adf916049ba306e5d99bf1f2 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 20:54:50 -0700 Subject: [PATCH 250/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index ccc73a26036..aa0baa2b41a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -885,7 +885,7 @@ async def test_acompletion_claude2_1(): }, {"role": "user", "content": "Generate a 3 liner joke for me"}, ] - # test without max-tokens + # test without max tokens response = await litellm.acompletion(model="claude-2.1", messages=messages) # Add any assertions here to check the response print(response) From 4645451140f24c99143d375335942f4e8a6ab680 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 13 May 2024 21:05:59 -0700 Subject: [PATCH 251/378] Add info about daily reports to alerting.md --- docs/my-website/docs/proxy/alerting.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/alerting.md b/docs/my-website/docs/proxy/alerting.md index 68c89de6247..ea7bdc11013 100644 --- a/docs/my-website/docs/proxy/alerting.md +++ b/docs/my-website/docs/proxy/alerting.md @@ -1,14 +1,21 @@ # 🚨 Alerting Get alerts for: + - Hanging LLM api calls - Failed LLM api calls - Slow LLM api calls - Budget Tracking per key/user: - - When a User/Key crosses their Budget - - When a User/Key is 15% away from crossing their Budget + - When a User/Key crosses their Budget + - When a User/Key is 15% away from crossing their Budget - Failed db read/writes +As a bonus, you can also get "daily reports" posted to your slack channel. +These reports contain key metrics like: + +- Top 5 deployments with most failed requests +- Top 5 slowest deployments + ## Quick Start Set up a slack alert channel to receive alerts from proxy. From ffc637969b791f8b57c4ddf36e1d348642b74fae Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 21:07:12 -0700 Subject: [PATCH 252/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index aa0baa2b41a..ccc73a26036 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -885,7 +885,7 @@ async def test_acompletion_claude2_1(): }, {"role": "user", "content": "Generate a 3 liner joke for me"}, ] - # test without max tokens + # test without max-tokens response = await litellm.acompletion(model="claude-2.1", messages=messages) # Add any assertions here to check the response print(response) From a1536846fe88f6d714242e8e9e5d7a80dcd0e45d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 21:17:07 -0700 Subject: [PATCH 253/378] docs(openai.md): add gpt-4o example --- docs/my-website/docs/providers/openai.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/providers/openai.md b/docs/my-website/docs/providers/openai.md index a8fe541fc8f..c44a67412c6 100644 --- a/docs/my-website/docs/providers/openai.md +++ b/docs/my-website/docs/providers/openai.md @@ -20,7 +20,7 @@ os.environ["OPENAI_API_KEY"] = "your-api-key" # openai call response = completion( - model = "gpt-3.5-turbo", + model = "gpt-4o", messages=[{ "content": "Hello, how are you?","role": "user"}] ) ``` @@ -163,6 +163,8 @@ os.environ["OPENAI_API_BASE"] = "openaiai-api-base" # OPTIONAL | Model Name | Function Call | |-----------------------|-----------------------------------------------------------------| +| gpt-4o | `response = completion(model="gpt-4o", messages=messages)` | +| gpt-4o-2024-05-13 | `response = completion(model="gpt-4o-2024-05-13", messages=messages)` | | gpt-4-turbo | `response = completion(model="gpt-4-turbo", messages=messages)` | | gpt-4-turbo-preview | `response = completion(model="gpt-4-0125-preview", messages=messages)` | | gpt-4-0125-preview | `response = completion(model="gpt-4-0125-preview", messages=messages)` | From 22b9933096fae1e79021e0e914814b18156a31f5 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 13 May 2024 21:28:15 -0700 Subject: [PATCH 254/378] docs(routing.md): add default_fallbacks to routing.md docs --- docs/my-website/docs/routing.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/routing.md b/docs/my-website/docs/routing.md index e4958a7a707..5ba3221c976 100644 --- a/docs/my-website/docs/routing.md +++ b/docs/my-website/docs/routing.md @@ -772,6 +772,8 @@ If the error is a context window exceeded error, fall back to a larger model gro Fallbacks are done in-order - ["gpt-3.5-turbo, "gpt-4", "gpt-4-32k"], will do 'gpt-3.5-turbo' first, then 'gpt-4', etc. +You can also set 'default_fallbacks', in case a specific model group is misconfigured / bad. + ```python from litellm import Router @@ -832,6 +834,7 @@ model_list = [ router = Router(model_list=model_list, fallbacks=[{"azure/gpt-3.5-turbo": ["gpt-3.5-turbo"]}], + default_fallbacks=["gpt-3.5-turbo-16k"], context_window_fallbacks=[{"azure/gpt-3.5-turbo-context-fallback": ["gpt-3.5-turbo-16k"]}, {"gpt-3.5-turbo": ["gpt-3.5-turbo-16k"]}], set_verbose=True) @@ -1311,10 +1314,11 @@ def __init__( num_retries: int = 0, timeout: Optional[float] = None, default_litellm_params={}, # default params for Router.chat.completion.create - fallbacks: List = [], + fallbacks: Optional[List] = None, + default_fallbacks: Optional[List] = None allowed_fails: Optional[int] = None, # Number of times a deployment can failbefore being added to cooldown cooldown_time: float = 1, # (seconds) time to cooldown a deployment after failure - context_window_fallbacks: List = [], + context_window_fallbacks: Optional[List] = None, model_group_alias: Optional[dict] = {}, retry_after: int = 0, # (min) time to wait before retrying a failed request routing_strategy: Literal[ From 30332a6d688c7230d2b9f522e608846f804f1789 Mon Sep 17 00:00:00 2001 From: Anand Taralika <46954145+taralika@users.noreply.github.com> Date: Mon, 13 May 2024 21:29:52 -0700 Subject: [PATCH 255/378] Added tests for ignoring 0 metrics when alerting --- litellm/tests/test_alerting.py | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/litellm/tests/test_alerting.py b/litellm/tests/test_alerting.py index b3232cae163..b3518e012fe 100644 --- a/litellm/tests/test_alerting.py +++ b/litellm/tests/test_alerting.py @@ -359,3 +359,48 @@ async def test_send_llm_exception_to_slack(): ) await asyncio.sleep(3) + + +# test models with 0 metrics are ignored +@pytest.mark.asyncio +async def test_send_daily_reports_ignores_zero_values(): + router = MagicMock() + router.get_model_ids.return_value = ['model1', 'model2', 'model3'] + + slack_alerting = SlackAlerting(internal_usage_cache=MagicMock()) + # model1: failed=None, latency=0; model2: failed=0, latency=0; model3: failed=10, latency=None + slack_alerting.internal_usage_cache.async_batch_get_cache = AsyncMock(return_value=[None, 0, 0, 0, 10, None]) + + router.get_model_info.side_effect = lambda x: {"litellm_params": {"model": x}} + + with patch.object(slack_alerting, 'send_alert', new=AsyncMock()) as mock_send_alert: + result = await slack_alerting.send_daily_reports(router) + + # Check that the send_alert method was called + mock_send_alert.assert_called_once() + message = mock_send_alert.call_args[1]['message'] + + # Ensure the message includes only the non-zero, non-None metrics + assert "model3" in message + assert "model2" not in message + assert "model1" not in message + + assert result == True + + +# test no alert is sent if all None or 0 metrics +@pytest.mark.asyncio +async def test_send_daily_reports_all_zero_or_none(): + router = MagicMock() + router.get_model_ids.return_value = ['model1', 'model2', 'model3'] + + slack_alerting = SlackAlerting(internal_usage_cache=MagicMock()) + slack_alerting.internal_usage_cache.async_batch_get_cache = AsyncMock(return_value=[None, 0, None, 0, None, 0]) + + with patch.object(slack_alerting, 'send_alert', new=AsyncMock()) as mock_send_alert: + result = await slack_alerting.send_daily_reports(router) + + # Check that the send_alert method was not called + mock_send_alert.assert_not_called() + + assert result == False From fde1029423da788ad9123d93b5d123416a190727 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 13 May 2024 21:30:16 -0700 Subject: [PATCH 256/378] docs - slack alerting --- docs/my-website/docs/proxy/alerting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/my-website/docs/proxy/alerting.md b/docs/my-website/docs/proxy/alerting.md index 4275e0bf06f..095d40a17bd 100644 --- a/docs/my-website/docs/proxy/alerting.md +++ b/docs/my-website/docs/proxy/alerting.md @@ -7,6 +7,7 @@ Get alerts for: - Budget Tracking per key/user: - When a User/Key crosses their Budget - When a User/Key is 15% away from crossing their Budget +- Spend Reports - Weekly & Monthly spend per Team, Tag - Failed db read/writes ## Quick Start From bd2e4cdfe00811d67bd8c14400f9bfeee9fec72d Mon Sep 17 00:00:00 2001 From: Anand Taralika Date: Mon, 13 May 2024 22:43:12 -0700 Subject: [PATCH 257/378] Fixed the test alert sequence Also fixed the issue that MagicMock does not create asynchronous mocks by default. --- litellm/tests/test_alerting.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_alerting.py b/litellm/tests/test_alerting.py index b3518e012fe..67706184237 100644 --- a/litellm/tests/test_alerting.py +++ b/litellm/tests/test_alerting.py @@ -368,9 +368,10 @@ async def test_send_daily_reports_ignores_zero_values(): router.get_model_ids.return_value = ['model1', 'model2', 'model3'] slack_alerting = SlackAlerting(internal_usage_cache=MagicMock()) - # model1: failed=None, latency=0; model2: failed=0, latency=0; model3: failed=10, latency=None - slack_alerting.internal_usage_cache.async_batch_get_cache = AsyncMock(return_value=[None, 0, 0, 0, 10, None]) - + # model1:failed=None, model2:failed=0, model3:failed=10, model1:latency=0; model2:latency=0; model3:latency=None + slack_alerting.internal_usage_cache.async_batch_get_cache = AsyncMock(return_value=[None, 0, 10, 0, 0, None]) + slack_alerting.internal_usage_cache.async_batch_set_cache = AsyncMock() + router.get_model_info.side_effect = lambda x: {"litellm_params": {"model": x}} with patch.object(slack_alerting, 'send_alert', new=AsyncMock()) as mock_send_alert: From c4dab4e73556314265527a25a35ef07f47f407fc Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 07:47:33 -0700 Subject: [PATCH 258/378] docs - alerting test /health/services --- docs/my-website/docs/proxy/alerting.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/my-website/docs/proxy/alerting.md b/docs/my-website/docs/proxy/alerting.md index 19f3c88a657..31c1a779054 100644 --- a/docs/my-website/docs/proxy/alerting.md +++ b/docs/my-website/docs/proxy/alerting.md @@ -3,19 +3,16 @@ Get alerts for: - Hanging LLM api calls -- Failed LLM api calls - Slow LLM api calls -- Budget Tracking per key/user: - - When a User/Key crosses their Budget - - When a User/Key is 15% away from crossing their Budget +- Failed LLM api calls +- Budget Tracking per key/user - Spend Reports - Weekly & Monthly spend per Team, Tag - Failed db read/writes +- Daily Reports: + - **LLM** Top 5 slowest deployments + - **LLM** Top 5 deployments with most failed requests + - **Spend** Weekly & Monthly spend per Team, Tag -As a bonus, you can also get "daily reports" posted to your slack channel. -These reports contain key metrics like: - -- Top 5 deployments with most failed requests -- Top 5 slowest deployments ## Quick Start @@ -52,4 +49,13 @@ environment_variables: ```bash $ litellm --config /path/to/config.yaml +``` + +## Testing Alerting is Setup Correctly + +Make a GET request to `/health/services`, expect to see a test slack alert in your provided webhook slack channel + +```shell +curl -X GET 'http://localhost:4000/health/services?service=slack' \ + -H 'Authorization: Bearer sk-1234' ``` \ No newline at end of file From 68637997c728150a773710544bc1c9ade83d9138 Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Tue, 14 May 2024 21:18:00 +0400 Subject: [PATCH 259/378] chore: fix typo --- litellm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index c3cc5b90a90..9c77c445005 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2382,7 +2382,7 @@ class Logging: self, exception, traceback_exception, start_time=None, end_time=None ): print_verbose( - f"eLogging Details LiteLLM-Failure Call: {litellm.failure_callback}" + f"Logging Details LiteLLM-Failure Call: {litellm.failure_callback}" ) try: start_time, end_time = self._failure_handler_helper_fn( From ed7c9e4e8769cc7a6396c50353ee85c366864516 Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Tue, 14 May 2024 21:21:21 +0400 Subject: [PATCH 260/378] refactor: logging class to use continue instead of break for streaming logging --- litellm/utils.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 9c77c445005..792e6c30f1d 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -1617,7 +1617,7 @@ class Logging: # this only logs streaming once, complete_streaming_response exists i.e when stream ends if self.stream: if "complete_streaming_response" not in kwargs: - return + continue else: print_verbose("reaches supabase for streaming logging!") result = kwargs["complete_streaming_response"] @@ -1651,7 +1651,7 @@ class Logging: print_verbose("reaches langsmith for logging!") if self.stream: if "complete_streaming_response" not in kwargs: - break + continue else: print_verbose( "reaches langsmith for streaming logging!" @@ -1677,7 +1677,7 @@ class Logging: # this only logs streaming once, complete_streaming_response exists i.e when stream ends if self.stream: if "complete_streaming_response" not in kwargs: - break + continue else: print_verbose("reaches logfire for streaming logging!") result = kwargs["complete_streaming_response"] @@ -1707,7 +1707,7 @@ class Logging: # this only logs streaming once, complete_streaming_response exists i.e when stream ends if self.stream: if "complete_streaming_response" not in kwargs: - break + continue else: result = kwargs["complete_streaming_response"] @@ -1852,7 +1852,7 @@ class Logging: f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" ) if complete_streaming_response is None: - break + continue else: print_verbose("reaches langfuse for streaming logging!") result = kwargs["complete_streaming_response"] @@ -1881,7 +1881,7 @@ class Logging: f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" ) if complete_streaming_response is None: - break + continue else: print_verbose( "reaches clickhouse for streaming logging!" @@ -1910,7 +1910,7 @@ class Logging: f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" ) if complete_streaming_response is None: - break + continue else: print_verbose( "reaches greenscale for streaming logging!" From 7e56e2722658766fb93c24d4dcd34ea0ab89efc6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 11:04:50 -0700 Subject: [PATCH 261/378] fix security for global_spend_reset --- litellm/proxy/_types.py | 5 +++++ litellm/proxy/proxy_server.py | 39 ++++++++++------------------------- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index f91b768e67a..5dbdd3a7114 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -79,6 +79,11 @@ class LiteLLMRoutes(enum.Enum): "/v1/models", ] + # NOTE: ROUTES ONLY FOR MASTER KEY - only the Master Key should be able to Reset Spend + master_key_only_routes: List = [ + "/global/spend/reset", + ] + info_routes: List = [ "/key/info", "/team/info", diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 9b2e01bc847..30f0275b610 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -589,6 +589,15 @@ async def user_api_key_auth( ) return _user_api_key_obj + + ## IF it's not a master key + ## Route should not be in master_key_only_routes + if route in LiteLLMRoutes.master_key_only_routes.value: + raise Exception( + f"Tried to access route={route}, which is only for MASTER KEY" + ) + + ## Check DB if isinstance( api_key, str ): # if generated token, make sure it starts with sk-. @@ -5927,9 +5936,7 @@ async def view_spend_logs( tags=["Budget & Spend Tracking"], dependencies=[Depends(user_api_key_auth)], ) -async def global_spend_reset( - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): +async def global_spend_reset(): """ ADMIN ONLY / MASTER KEY Only Endpoint @@ -5940,7 +5947,7 @@ async def global_spend_reset( 3. LiteLLM_TeamTable spend will be set = 0 """ - global prisma_client, master_key + global prisma_client if prisma_client is None: raise ProxyException( message="Prisma Client is not initialized", @@ -5949,30 +5956,6 @@ async def global_spend_reset( code=status.HTTP_401_UNAUTHORIZED, ) - if master_key is None: - raise ProxyException( - message="Master key is not initialized, please set LITELLM_MASTER_KEY in .env", - type="internal_error", - param="None", - code=status.HTTP_401_UNAUTHORIZED, - ) - - if user_api_key_dict.api_key is None: - raise ProxyException( - message="no api_key passed", - type="auth_error", - param="master_key", - code=status.HTTP_401_UNAUTHORIZED, - ) - - if not secrets.compare_digest(master_key, user_api_key_dict.api_key): - raise ProxyException( - message="/global/spend/reset Route only allowed for master key", - type="auth_error", - param="master_key", - code=status.HTTP_401_UNAUTHORIZED, - ) - await prisma_client.db.litellm_verificationtoken.update_many( data={"spend": 0.0}, where={} ) From 7557b3e2ffa36df441835f8f18aca5448c76f83f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 11:15:13 -0700 Subject: [PATCH 262/378] fix(init.py): set 'default_fallbacks' as a litellm_setting --- litellm/__init__.py | 1 + litellm/router.py | 7 ++++--- litellm/tests/test_router_fallbacks.py | 9 +++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index 16395b27f3f..c5e407eb1f5 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -219,6 +219,7 @@ max_end_user_budget: Optional[float] = None #### RELIABILITY #### request_timeout: Optional[float] = 6000 num_retries: Optional[int] = None # per model endpoint +default_fallbacks: Optional[List] = None fallbacks: Optional[List] = None context_window_fallbacks: Optional[List] = None allowed_fails: int = 0 diff --git a/litellm/router.py b/litellm/router.py index b4603c6d07c..3c459592cdd 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -263,11 +263,12 @@ class Router: self.retry_after = retry_after self.routing_strategy = routing_strategy self.fallbacks = fallbacks or litellm.fallbacks - if default_fallbacks is not None: + if default_fallbacks is not None or litellm.default_fallbacks is not None: + _fallbacks = default_fallbacks or litellm.default_fallbacks if self.fallbacks is not None: - self.fallbacks.append({"*": default_fallbacks}) + self.fallbacks.append({"*": _fallbacks}) else: - self.fallbacks = [{"*": default_fallbacks}] + self.fallbacks = [{"*": _fallbacks}] self.context_window_fallbacks = ( context_window_fallbacks or litellm.context_window_fallbacks ) diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index 4ab97b274d3..6e483b9fed6 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -1010,13 +1010,16 @@ async def test_service_unavailable_fallbacks(sync_mode): @pytest.mark.parametrize("sync_mode", [True, False]) +@pytest.mark.parametrize("litellm_module_fallbacks", [True, False]) @pytest.mark.asyncio -async def test_default_model_fallbacks(sync_mode): +async def test_default_model_fallbacks(sync_mode, litellm_module_fallbacks): """ Related issue - https://github.com/BerriAI/litellm/issues/3623 If model misconfigured, setup a default model for generic fallback """ + if litellm_module_fallbacks: + litellm.default_fallbacks = ["my-good-model"] router = Router( model_list=[ { @@ -1034,7 +1037,9 @@ async def test_default_model_fallbacks(sync_mode): }, }, ], - default_fallbacks=["my-good-model"], + default_fallbacks=( + ["my-good-model"] if litellm_module_fallbacks == False else None + ), ) if sync_mode: From 151902f7d9ee0a4d0673c6908d6e92908e52470e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 11:20:57 -0700 Subject: [PATCH 263/378] fix(router.py): error string fix --- litellm/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index 3c459592cdd..ec7df1124c3 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -3707,7 +3707,7 @@ class Router: ) asyncio.create_task( proxy_logging_obj.slack_alerting_instance.send_alert( - message=f"Router: Cooling down deployment: {_api_base}, for {self.cooldown_time} seconds. Got exception: {str(exception_status)}. Change 'cooldown_time' + 'allowed_failes' under 'Router Settings' on proxy UI, or via config - https://docs.litellm.ai/docs/proxy/reliability#fallbacks--retries--timeouts--cooldowns", + message=f"Router: Cooling down deployment: {_api_base}, for {self.cooldown_time} seconds. Got exception: {str(exception_status)}. Change 'cooldown_time' + 'allowed_fails' under 'Router Settings' on proxy UI, or via config - https://docs.litellm.ai/docs/proxy/reliability#fallbacks--retries--timeouts--cooldowns", alert_type="cooldown_deployment", level="Low", ) From f41b2a09a41af16aa85641f30377f313cfda832e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 11:25:36 -0700 Subject: [PATCH 264/378] fix(utils.py): fix python 3.8 linting error --- litellm/utils.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 76642a0951f..c9ba9ddadc3 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -43,10 +43,8 @@ try: # New and recommended way to access resources from importlib import resources - filename = str( - resources.files(litellm).joinpath("llms/tokenizers") - ) -except ImportError: + filename = str(resources.files(litellm).joinpath("llms/tokenizers")) +except (ImportError, AttributeError): # Old way to access resources, which setuptools deprecated some time ago import pkg_resources # type: ignore From ca41e6590e3ac4a353a2eb11c936d989c220999c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 11:28:35 -0700 Subject: [PATCH 265/378] test - auth on /reset/spend --- litellm/tests/test_key_generate_prisma.py | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index e6f2437e7d7..2eb693cf450 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -2013,3 +2013,74 @@ async def test_master_key_hashing(prisma_client): except Exception as e: print("Got Exception", e) pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio +async def test_reset_spend_authentication(prisma_client): + """ + 1. Test master key can access this route -> ONLY MASTER KEY SHOULD BE ABLE TO RESET SPEND + 2. Test that non-master key gets rejected + 3. Test that non-master key with role == "proxy_admin" or admin gets rejected + """ + + print("prisma client=", prisma_client) + + master_key = "sk-1234" + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", master_key) + + await litellm.proxy.proxy_server.prisma_client.connect() + from litellm.proxy.proxy_server import user_api_key_cache + + bearer_token = "Bearer " + master_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/global/spend/reset") + + # Test 1 - Master Key + result: UserAPIKeyAuth = await user_api_key_auth( + request=request, api_key=bearer_token + ) + + print("result from user auth with Master key", result) + assert result.token is not None + + # Test 2 - Non-Master Key + _response = await new_user( + data=NewUserRequest( + tpm_limit=20, + ) + ) + + generate_key = "Bearer " + _response.key + + try: + await user_api_key_auth(request=request, api_key=generate_key) + pytest.fail(f"This should have failed!. IT's an expired key") + except Exception as e: + print("Got Exception", e) + assert ( + "Tried to access route=/global/spend/reset, which is only for MASTER KEY" + in e.message + ) + + # Test 3 - Non-Master Key with role == "proxy_admin" or admin + _response = await new_user( + data=NewUserRequest( + user_role="proxy_admin", + tpm_limit=20, + ) + ) + + generate_key = "Bearer " + _response.key + + try: + await user_api_key_auth(request=request, api_key=generate_key) + pytest.fail(f"This should have failed!. IT's an expired key") + except Exception as e: + print("Got Exception", e) + assert ( + "Tried to access route=/global/spend/reset, which is only for MASTER KEY" + in e.message + ) From 4f3c7752f9f75b4a25b4c41b0adc2e9b9d94706d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 11:32:11 -0700 Subject: [PATCH 266/378] ci: test linting change for pydantic v1 --- litellm/types/completion.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/litellm/types/completion.py b/litellm/types/completion.py index aede0bc9ede..4d3f4b4b7f2 100644 --- a/litellm/types/completion.py +++ b/litellm/types/completion.py @@ -1,10 +1,15 @@ from typing import List, Optional, Union, Iterable -from pydantic import ConfigDict, BaseModel, validator +from pydantic import ConfigDict, BaseModel, validator, VERSION from typing_extensions import Literal, Required, TypedDict +# Function to get Pydantic version +def is_pydantic_v2() -> int: + return int(VERSION.split(".")[0]) + + class ChatCompletionSystemMessageParam(TypedDict, total=False): content: Required[str] """The contents of the system message.""" @@ -190,4 +195,9 @@ class CompletionRequest(BaseModel): api_version: Optional[str] = None api_key: Optional[str] = None model_list: Optional[List[str]] = None - model_config = ConfigDict(extra="allow", protected_namespaces=()) + + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", protected_namespaces=()) + else: + model_config = ConfigDict(extra="allow") # No protected_namespaces for v1 From 787c02c8dbf5be6d5e30de1d90e8c7e21a245972 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 11:38:39 -0700 Subject: [PATCH 267/378] fix - return success spend reset --- litellm/proxy/proxy_server.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 30f0275b610..720033419a1 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -5931,7 +5931,7 @@ async def view_spend_logs( ) -@router.get( +@router.post( "/global/spend/reset", tags=["Budget & Spend Tracking"], dependencies=[Depends(user_api_key_auth)], @@ -5961,6 +5961,11 @@ async def global_spend_reset(): ) await prisma_client.db.litellm_teamtable.update_many(data={"spend": 0.0}, where={}) + return { + "message": "Spend for all API Keys and Teams reset successfully", + "status": "success", + } + @router.get( "/global/spend/logs", From fe1f5369ab446760050ca5072dbaf1f95b27f1b8 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 11:47:43 -0700 Subject: [PATCH 268/378] docs - global/spend/reset --- docs/my-website/docs/proxy/cost_tracking.md | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/my-website/docs/proxy/cost_tracking.md b/docs/my-website/docs/proxy/cost_tracking.md index d4760d83fe9..8a43d1c9d7a 100644 --- a/docs/my-website/docs/proxy/cost_tracking.md +++ b/docs/my-website/docs/proxy/cost_tracking.md @@ -126,6 +126,31 @@ Output from script +## Reset Team, API Key Spend - MASTER KEY ONLY + +Use `/global/spend/reset` if you want to: +- Reset the Spend for all API Keys, Teams. The `spend` for ALL Teams and Keys in `LiteLLM_TeamTable` and `LiteLLM_VerificationToken` will be set to `spend=0` + +- LiteLLM will maintain all the logs in `LiteLLMSpendLogs` for Auditing Purposes + +### Request +Only the `LITELLM_MASTER_KEY` you set can access this route +```shell +curl -X POST \ + 'http://localhost:4000/global/spend/reset' \ + -H 'Authorization: Bearer sk-1234' \ + -H 'Content-Type: application/json' +``` + +### Expected Responses + +```shell +{"message":"Spend for all API Keys and Teams reset successfully","status":"success"} +``` + + + + ## Spend Tracking for Azure Set base model for cost tracking azure image-gen call From c80efb856bea0d7a389350f6b48022159a6d1f4d Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 12:58:50 -0700 Subject: [PATCH 269/378] fix(types/completion.py): linting fixes --- litellm/types/completion.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/litellm/types/completion.py b/litellm/types/completion.py index 4d3f4b4b7f2..e3d605c915e 100644 --- a/litellm/types/completion.py +++ b/litellm/types/completion.py @@ -10,6 +10,16 @@ def is_pydantic_v2() -> int: return int(VERSION.split(".")[0]) +def get_model_config() -> ConfigDict: + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", protected_namespaces=()) # type: ignore + else: + model_config = ConfigDict(extra="allow") # No protected_namespaces for v1 + + return model_config + + class ChatCompletionSystemMessageParam(TypedDict, total=False): content: Required[str] """The contents of the system message.""" @@ -196,8 +206,4 @@ class CompletionRequest(BaseModel): api_key: Optional[str] = None model_list: Optional[List[str]] = None - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", protected_namespaces=()) - else: - model_config = ConfigDict(extra="allow") # No protected_namespaces for v1 + model_config = get_model_config() From a7140864618a24b16ff5c943ec9d17c8bc819be9 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 14:43:21 -0700 Subject: [PATCH 270/378] docs - use discord alerting --- docs/my-website/docs/proxy/alerting.md | 39 +++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/alerting.md b/docs/my-website/docs/proxy/alerting.md index 31c1a779054..230a3a22e91 100644 --- a/docs/my-website/docs/proxy/alerting.md +++ b/docs/my-website/docs/proxy/alerting.md @@ -22,6 +22,7 @@ Set up a slack alert channel to receive alerts from proxy. Get a slack webhook url from https://api.slack.com/messaging/webhooks +You can also use Discord Webhooks, see [here](#using-discord-webhooks) ### Step 2: Update config.yaml @@ -58,4 +59,40 @@ Make a GET request to `/health/services`, expect to see a test slack alert in yo ```shell curl -X GET 'http://localhost:4000/health/services?service=slack' \ -H 'Authorization: Bearer sk-1234' -``` \ No newline at end of file +``` + + +## Extras + +### Using Discord Webhooks + +Discord provides a slack compatible webhook url that you can use for alerting + +##### Quick Start + +1. Get a webhook url for your discord channel + +2. Append `/slack` to your discord webhook - it should look like + +``` +"https://discord.com/api/webhooks/1240030362193760286/cTLWt5ATn1gKmcy_982rl5xmYHsrM1IWJdmCL1AyOmU9JdQXazrp8L1_PYgUtgxj8x4f/slack" +``` + +3. Add it to your litellm config + +```yaml +model_list: + model_name: "azure-model" + litellm_params: + model: "azure/gpt-35-turbo" + api_key: "my-bad-key" # 👈 bad key + +general_settings: + alerting: ["slack"] + alerting_threshold: 300 # sends alerts if requests hang for 5min+ and responses take 5min+ + +environment_variables: + SLACK_WEBHOOK_URL: "https://discord.com/api/webhooks/1240030362193760286/cTLWt5ATn1gKmcy_982rl5xmYHsrM1IWJdmCL1AyOmU9JdQXazrp8L1_PYgUtgxj8x4f/slack" +``` + +That's it ! You're ready to go ! From c503c471dc8050c81799c3b88d7b103e5ac97c4c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 16:15:40 -0700 Subject: [PATCH 271/378] fix - cost tracking api --- docs/my-website/docs/proxy/cost_tracking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/proxy/cost_tracking.md b/docs/my-website/docs/proxy/cost_tracking.md index 8a43d1c9d7a..2aaf8116e74 100644 --- a/docs/my-website/docs/proxy/cost_tracking.md +++ b/docs/my-website/docs/proxy/cost_tracking.md @@ -12,7 +12,7 @@ Use the `/global/spend/report` endpoint to get daily spend per team, with a brea ### Example Request ```shell -curl -X GET 'http://localhost:4000/global/spend/report?start_date=2023-04-01&end_date=2024-06-30' \ +curl -X GET 'http://localhost:4000/global/spend/report?start_date=2024-04-01&end_date=2024-06-30' \ -H 'Authorization: Bearer sk-1234' ``` From 811406a2c69bdc41eb21f731906328cd2fc2a4a9 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 16:35:23 -0700 Subject: [PATCH 272/378] fix(types/completion.py): fix completion configdict pydantic v1 error --- litellm/types/completion.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/litellm/types/completion.py b/litellm/types/completion.py index e3d605c915e..87a7629dafe 100644 --- a/litellm/types/completion.py +++ b/litellm/types/completion.py @@ -1,4 +1,4 @@ -from typing import List, Optional, Union, Iterable +from typing import List, Optional, Union, Iterable, cast from pydantic import ConfigDict, BaseModel, validator, VERSION @@ -15,7 +15,9 @@ def get_model_config() -> ConfigDict: if is_pydantic_v2() >= 2: model_config = ConfigDict(extra="allow", protected_namespaces=()) # type: ignore else: - model_config = ConfigDict(extra="allow") # No protected_namespaces for v1 + from pydantic import Extra + + model_config = ConfigDict(extra=Extra.allow) # type: ignore return model_config From 2b41f092688b12a01cd2d42f449452268afd198a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 16:38:45 -0700 Subject: [PATCH 273/378] fix(utils.py): add lru-cache logic to _select_tokenizer speed up tokenizer load times --- litellm/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index f1db8ce6a55..0220fecd733 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -12,10 +12,9 @@ import dotenv, json, traceback, threading, base64, ast import subprocess, os from os.path import abspath, join, dirname import litellm, openai - import itertools import random, uuid, requests # type: ignore -from functools import wraps +from functools import wraps, lru_cache import datetime, time import tiktoken import uuid @@ -3881,6 +3880,7 @@ def get_replicate_completion_pricing(completion_response=None, total_time=0.0): return a100_80gb_price_per_second_public * total_time / 1000 +@lru_cache(maxsize=128) def _select_tokenizer(model: str): from importlib import resources From e5a1050e8d188b6b9bc994f84376dd83bf656cb2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 16:49:55 -0700 Subject: [PATCH 274/378] fix(types/router.py): fix router pydantic v1 errors --- litellm/types/router.py | 62 ++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/litellm/types/router.py b/litellm/types/router.py index f0de6519202..39eaf6994a3 100644 --- a/litellm/types/router.py +++ b/litellm/types/router.py @@ -1,20 +1,42 @@ from typing import List, Optional, Union, Dict, Tuple, Literal, TypedDict import httpx -from pydantic import ConfigDict, BaseModel, validator, Field, __version__ as pydantic_version +from pydantic import ( + ConfigDict, + BaseModel, + validator, + Field, + __version__ as pydantic_version, + VERSION, +) from .completion import CompletionRequest from .embedding import EmbeddingRequest import uuid, enum +# Function to get Pydantic version +def is_pydantic_v2() -> int: + return int(VERSION.split(".")[0]) + + +def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore + else: + from pydantic import Extra + + model_config = ConfigDict(extra=Extra.allow) # type: ignore + + return model_config + + class ModelConfig(BaseModel): model_name: str litellm_params: Union[CompletionRequest, EmbeddingRequest] tpm: int rpm: int - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class RouterConfig(BaseModel): @@ -45,9 +67,7 @@ class RouterConfig(BaseModel): "latency-based-routing", ] = "simple-shuffle" - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class UpdateRouterConfig(BaseModel): @@ -67,9 +87,7 @@ class UpdateRouterConfig(BaseModel): fallbacks: Optional[List[dict]] = None context_window_fallbacks: Optional[List[dict]] = None - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class ModelInfo(BaseModel): @@ -87,9 +105,7 @@ class ModelInfo(BaseModel): id = str(id) super().__init__(id=id, **params) - model_config = ConfigDict( - extra = "allow", - ) + model_config = get_model_config() def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -184,10 +200,7 @@ class GenericLiteLLMParams(BaseModel): max_retries = int(max_retries) # cast to int super().__init__(max_retries=max_retries, **args, **params) - model_config = ConfigDict( - extra = "allow", - arbitrary_types_allowed = True, - ) + model_config = get_model_config() if pydantic_version.startswith("1"): # pydantic v2 warns about using a Config class. # But without this, pydantic v1 will raise an error: @@ -254,10 +267,8 @@ class LiteLLM_Params(GenericLiteLLMParams): max_retries = int(max_retries) # cast to int super().__init__(max_retries=max_retries, **args, **params) - model_config = ConfigDict( - extra = "allow", - arbitrary_types_allowed = True, - ) + model_config = get_model_config(arbitrary_types_allowed=True) + if pydantic_version.startswith("1"): # pydantic v2 warns about using a Config class. # But without this, pydantic v1 will raise an error: @@ -295,9 +306,7 @@ class updateDeployment(BaseModel): litellm_params: Optional[updateLiteLLMParams] = None model_info: Optional[ModelInfo] = None - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class LiteLLMParamsTypedDict(TypedDict, total=False): @@ -371,10 +380,7 @@ class Deployment(BaseModel): # if using pydantic v1 return self.dict(**kwargs) - model_config = ConfigDict( - extra = "allow", - protected_namespaces = (), - ) + model_config = get_model_config() def __contains__(self, key): # Define custom behavior for the 'in' operator From b984fba73f1d54e2bb094d403a884f3777da0435 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 16:53:02 -0700 Subject: [PATCH 275/378] fix(types/router.py): fix arbitrary_types_allowed flag --- litellm/types/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/types/router.py b/litellm/types/router.py index 39eaf6994a3..ee6dd95c0c3 100644 --- a/litellm/types/router.py +++ b/litellm/types/router.py @@ -25,7 +25,7 @@ def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: else: from pydantic import Extra - model_config = ConfigDict(extra=Extra.allow) # type: ignore + model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore return model_config From ad7e289802a6868c8df895103045f63666dcfd90 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 16:56:07 -0700 Subject: [PATCH 276/378] fix(types/router.py): fix python3.8 typing issue --- litellm/types/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/types/router.py b/litellm/types/router.py index ee6dd95c0c3..0cc84d8c300 100644 --- a/litellm/types/router.py +++ b/litellm/types/router.py @@ -200,7 +200,7 @@ class GenericLiteLLMParams(BaseModel): max_retries = int(max_retries) # cast to int super().__init__(max_retries=max_retries, **args, **params) - model_config = get_model_config() + model_config = get_model_config(arbitrary_types_allowed=True) if pydantic_version.startswith("1"): # pydantic v2 warns about using a Config class. # But without this, pydantic v1 will raise an error: From 888c53e774be78052ce45355b3ceff62f3c1a4b9 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 17:02:11 -0700 Subject: [PATCH 277/378] fix(proxy/_types.py): fix linting errors --- litellm/proxy/_types.py | 78 ++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 44 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 7a67d6d79a8..fd166a1757d 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1,4 +1,4 @@ -from pydantic import ConfigDict, BaseModel, Field, root_validator, Json +from pydantic import ConfigDict, BaseModel, Field, root_validator, Json, VERSION import enum from typing import Optional, List, Union, Dict, Literal, Any from datetime import datetime @@ -7,15 +7,32 @@ import json from litellm.types.router import UpdateRouterConfig try: - from pydantic import model_validator # pydantic v2 + from pydantic import model_validator # type: ignore except ImportError: from pydantic import root_validator # pydantic v1 - def model_validator(mode): + def model_validator(mode): # type: ignore pre = mode == "before" return root_validator(pre=pre) +# Function to get Pydantic version +def is_pydantic_v2() -> int: + return int(VERSION.split(".")[0]) + + +def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore + else: + from pydantic import Extra + + model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore + + return model_config + + def hash_token(token: str): import hashlib @@ -44,9 +61,7 @@ class LiteLLMBase(BaseModel): # if using pydantic v1 return self.__fields_set__ - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class LiteLLM_UpperboundKeyGenerateParams(LiteLLMBase): @@ -302,9 +317,7 @@ class ProxyChatCompletionRequest(LiteLLMBase): deployment_id: Optional[str] = None request_timeout: Optional[int] = None - model_config = ConfigDict( - extra = "allow", # allow params not defined here, these fall in litellm.completion(**kwargs) - ) + model_config = get_model_config() class ModelInfoDelete(LiteLLMBase): @@ -331,10 +344,7 @@ class ModelInfo(LiteLLMBase): ] ] - model_config = ConfigDict( - extra = "allow", # Allow extra fields - protected_namespaces = (), - ) + model_config = get_model_config() @model_validator(mode="before") def set_model_info(cls, values): @@ -362,9 +372,7 @@ class ModelParams(LiteLLMBase): litellm_params: dict model_info: ModelInfo - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() @model_validator(mode="before") def set_model_info(cls, values): @@ -402,9 +410,7 @@ class GenerateKeyRequest(GenerateRequestBase): {} ) # {"gpt-4": 5.0, "gpt-3.5-turbo": 5.0}, defaults to {} - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class GenerateKeyResponse(GenerateKeyRequest): @@ -454,9 +460,7 @@ class LiteLLM_ModelTable(LiteLLMBase): created_by: str updated_by: str - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class NewUserRequest(GenerateKeyRequest): @@ -542,9 +546,7 @@ class TeamBase(LiteLLMBase): class NewTeamRequest(TeamBase): model_aliases: Optional[dict] = None - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class GlobalEndUsersSpend(LiteLLMBase): @@ -597,9 +599,7 @@ class LiteLLM_TeamTable(TeamBase): budget_reset_at: Optional[datetime] = None model_id: Optional[int] = None - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() @model_validator(mode="before") def set_model_info(cls, values): @@ -637,9 +637,7 @@ class LiteLLM_BudgetTable(LiteLLMBase): model_max_budget: Optional[dict] = None budget_duration: Optional[str] = None - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class NewOrganizationRequest(LiteLLM_BudgetTable): @@ -690,7 +688,7 @@ class TeamDefaultSettings(LiteLLMBase): team_id: str model_config = ConfigDict( - extra = "allow", # allow params not defined here, these fall in litellm.completion(**kwargs) + extra="allow", # allow params not defined here, these fall in litellm.completion(**kwargs) ) @@ -832,9 +830,7 @@ class ConfigYAML(LiteLLMBase): description="litellm router object settings. See router.py __init__ for all, example router.num_retries=5, router.timeout=5, router.max_retries=5, router.retry_after=5", ) - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class LiteLLM_VerificationToken(LiteLLMBase): @@ -868,9 +864,7 @@ class LiteLLM_VerificationToken(LiteLLMBase): user_id_rate_limits: Optional[dict] = None team_id_rate_limits: Optional[dict] = None - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class LiteLLM_VerificationTokenView(LiteLLM_VerificationToken): @@ -935,9 +929,7 @@ class LiteLLM_UserTable(LiteLLMBase): values.update({"models": []}) return values - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class LiteLLM_EndUserTable(LiteLLMBase): @@ -955,9 +947,7 @@ class LiteLLM_EndUserTable(LiteLLMBase): values.update({"spend": 0.0}) return values - model_config = ConfigDict( - protected_namespaces = (), - ) + model_config = get_model_config() class LiteLLM_SpendLogs(LiteLLMBase): From 1db1af1154a03acc7f6caab601ce02f54277e0a2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 17:09:36 -0700 Subject: [PATCH 278/378] fix(types): fix typing --- litellm/proxy/_types.py | 4 +--- litellm/types/embedding.py | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index fd166a1757d..b1af153e81f 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -687,9 +687,7 @@ class KeyManagementSettings(LiteLLMBase): class TeamDefaultSettings(LiteLLMBase): team_id: str - model_config = ConfigDict( - extra="allow", # allow params not defined here, these fall in litellm.completion(**kwargs) - ) + model_config = get_model_config() class DynamoDBArgs(LiteLLMBase): diff --git a/litellm/types/embedding.py b/litellm/types/embedding.py index 4690b133246..831c4266c32 100644 --- a/litellm/types/embedding.py +++ b/litellm/types/embedding.py @@ -1,6 +1,23 @@ from typing import List, Optional, Union -from pydantic import ConfigDict, BaseModel, validator +from pydantic import ConfigDict, BaseModel, validator, VERSION + + +# Function to get Pydantic version +def is_pydantic_v2() -> int: + return int(VERSION.split(".")[0]) + + +def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore + else: + from pydantic import Extra + + model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore + + return model_config class EmbeddingRequest(BaseModel): @@ -17,4 +34,4 @@ class EmbeddingRequest(BaseModel): litellm_call_id: Optional[str] = None litellm_logging_obj: Optional[dict] = None logger_fn: Optional[str] = None - model_config = ConfigDict(extra="allow") + model_config = get_model_config() From dd0b4b86446a1459feebdbed46500dd6ad5b8779 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 17:17:20 -0700 Subject: [PATCH 279/378] fix(utils.py): fix pydantic v1 error --- litellm/utils.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 0220fecd733..c421ab64b54 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -18,7 +18,7 @@ from functools import wraps, lru_cache import datetime, time import tiktoken import uuid -from pydantic import ConfigDict, BaseModel +from pydantic import ConfigDict, BaseModel, VERSION import aiohttp import textwrap import logging @@ -180,6 +180,23 @@ last_fetched_at_keys = None # } +# Function to get Pydantic version +def is_pydantic_v2() -> int: + return int(VERSION.split(".")[0]) + + +def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore + else: + from pydantic import Extra + + model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore + + return model_config + + class UnsupportedParamsError(Exception): def __init__(self, status_code, message): self.status_code = status_code @@ -326,7 +343,7 @@ class HiddenParams(OpenAIObject): original_response: Optional[str] = None model_id: Optional[str] = None # used in Router for individual deployments api_base: Optional[str] = None # returns api base used for making completion call - model_config = ConfigDict(extra="allow", protected_namespaces=()) + model_config = get_model_config() def get(self, key, default=None): # Custom .get() method to access attributes with a default value if the attribute doesn't exist From 4e30d7cf5ec9ced3d3bf12d1c2c0094616543b1a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 17:30:31 -0700 Subject: [PATCH 280/378] build(model_prices_and_context_window.json): add gemini 1.5 flash model info --- ...model_prices_and_context_window_backup.json | 18 ++++++++++++++++++ .../tests/test_amazing_vertex_completion.py | 2 +- model_prices_and_context_window.json | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 0a262e3108a..10801e9c184 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1110,6 +1110,24 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, + "gemini-1.5-flash-preview-0514": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_images_per_prompt": 3000, + "max_videos_per_prompt": 10, + "max_video_length": 1, + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_pdf_size_mb": 30, + "input_cost_per_token": 0, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, "gemini-1.5-pro-preview-0215": { "max_tokens": 8192, "max_input_tokens": 1000000, diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index c58541a7d0c..ad3fb3cc3e3 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -508,7 +508,7 @@ def test_gemini_pro_vision(): litellm.set_verbose = True litellm.num_retries = 3 resp = litellm.completion( - model="vertex_ai/gemini-pro-vision", + model="vertex_ai/gemini-1.5-flash-preview-0514", messages=[ { "role": "user", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 0a262e3108a..10801e9c184 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1110,6 +1110,24 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, + "gemini-1.5-flash-preview-0514": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_images_per_prompt": 3000, + "max_videos_per_prompt": 10, + "max_video_length": 1, + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_pdf_size_mb": 30, + "input_cost_per_token": 0, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, "gemini-1.5-pro-preview-0215": { "max_tokens": 8192, "max_input_tokens": 1000000, From c0d701a51ea0565c078687af45ee2133d0c618a4 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 17:32:31 -0700 Subject: [PATCH 281/378] test(test_config.py): fix linting error --- litellm/tests/test_config.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/litellm/tests/test_config.py b/litellm/tests/test_config.py index d0cd93d1f63..96c766919e3 100644 --- a/litellm/tests/test_config.py +++ b/litellm/tests/test_config.py @@ -14,19 +14,36 @@ sys.path.insert( 0, os.path.abspath("../..") ) # Adds the parent directory to the, system path import pytest, litellm -from pydantic import BaseModel +from pydantic import BaseModel, VERSION from litellm.proxy.proxy_server import ProxyConfig from litellm.proxy.utils import encrypt_value, ProxyLogging, DualCache from litellm.types.router import Deployment, LiteLLM_Params, ModelInfo from typing import Literal +# Function to get Pydantic version +def is_pydantic_v2() -> int: + return int(VERSION.split(".")[0]) + + +def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: + # Version-specific configuration + if is_pydantic_v2() >= 2: + model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore + else: + from pydantic import Extra + + model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore + + return model_config + + class DBModel(BaseModel): model_id: str model_name: str model_info: dict litellm_params: dict - model_config = ConfigDict(protected_namespaces=()) + model_config = get_model_config() @pytest.mark.asyncio From b04a8d878a6072d5421b6412c1a09930fce95162 Mon Sep 17 00:00:00 2001 From: Krish Dholakia Date: Tue, 14 May 2024 17:38:47 -0700 Subject: [PATCH 282/378] Revert "Logfire Integration" --- .circleci/config.yml | 13 +- .../docs/observability/logfire_integration.md | 60 ------ docs/my-website/img/logfire.png | Bin 711795 -> 0 bytes litellm/integrations/logfire_logger.py | 178 ------------------ litellm/tests/test_logfire.py | 117 ------------ litellm/utils.py | 85 ++------- 6 files changed, 22 insertions(+), 431 deletions(-) delete mode 100644 docs/my-website/docs/observability/logfire_integration.md delete mode 100644 docs/my-website/img/logfire.png delete mode 100644 litellm/integrations/logfire_logger.py delete mode 100644 litellm/tests/test_logfire.py diff --git a/.circleci/config.yml b/.circleci/config.yml index 3a3fbfd53b5..35707dbffd2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -41,7 +41,6 @@ jobs: pip install langchain pip install lunary==0.2.5 pip install "langfuse==2.27.1" - pip install "logfire==0.29.0" pip install numpydoc pip install traceloop-sdk==0.0.69 pip install openai @@ -87,6 +86,7 @@ jobs: exit 1 fi cd .. + # Run pytest and generate JUnit XML report - run: @@ -94,7 +94,7 @@ jobs: command: | pwd ls - python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 + python -m pytest -vv litellm/tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m # Store test results @@ -170,7 +170,6 @@ jobs: pip install "aioboto3==12.3.0" pip install langchain pip install "langfuse>=2.0.0" - pip install "logfire==0.29.0" pip install numpydoc pip install prisma pip install fastapi @@ -223,7 +222,7 @@ jobs: name: Start outputting logs command: docker logs -f my-app background: true - - run: + - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 5m - run: @@ -231,7 +230,7 @@ jobs: command: | pwd ls - python -m pytest -vv tests/ -x --junitxml=test-results/junit.xml --durations=5 + python -m pytest -vv tests/ -x --junitxml=test-results/junit.xml --durations=5 no_output_timeout: 120m # Store test results @@ -253,7 +252,7 @@ jobs: name: Copy model_prices_and_context_window File to model_prices_and_context_window_backup command: | cp model_prices_and_context_window.json litellm/model_prices_and_context_window_backup.json - + - run: name: Check if litellm dir was updated or if pyproject.toml was modified command: | @@ -338,4 +337,4 @@ workflows: filters: branches: only: - - main + - main \ No newline at end of file diff --git a/docs/my-website/docs/observability/logfire_integration.md b/docs/my-website/docs/observability/logfire_integration.md deleted file mode 100644 index c1f425f4251..00000000000 --- a/docs/my-website/docs/observability/logfire_integration.md +++ /dev/null @@ -1,60 +0,0 @@ -import Image from '@theme/IdealImage'; - -# Logfire - Logging LLM Input/Output - -Logfire is open Source Observability & Analytics for LLM Apps -Detailed production traces and a granular view on quality, cost and latency - - - -:::info -We want to learn how we can make the callbacks better! Meet the LiteLLM [founders](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) or -join our [discord](https://discord.gg/wuPM9dRgDw) -::: - -## Pre-Requisites - -Ensure you have run `pip install logfire` for this integration - -```shell -pip install logfire litellm -``` - -## Quick Start - -Get your Logfire token from [Logfire](https://logfire.pydantic.dev/) - -```python -litellm.success_callback = ["logfire"] -litellm.failure_callback = ["logfire"] # logs errors to logfire -``` - -```python -# pip install logfire -import litellm -import os - -# from https://logfire.pydantic.dev/ -os.environ["LOGFIRE_TOKEN"] = "" - -# LLM API Keys -os.environ['OPENAI_API_KEY']="" - -# set logfire as a callback, litellm will send the data to logfire -litellm.success_callback = ["logfire"] - -# openai call -response = litellm.completion( - model="gpt-3.5-turbo", - messages=[ - {"role": "user", "content": "Hi 👋 - i'm openai"} - ] -) -``` - -## Support & Talk to Founders - -- [Schedule Demo 👋](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) -- [Community Discord 💭](https://discord.gg/wuPM9dRgDw) -- Our numbers 📞 +1 (770) 8783-106 / ‭+1 (412) 618-6238‬ -- Our emails ✉️ ishaan@berri.ai / krrish@berri.ai diff --git a/docs/my-website/img/logfire.png b/docs/my-website/img/logfire.png deleted file mode 100644 index 2a6be87e23398c8e0b0fbfe697d7ea0b07580cf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711795 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

|1{QOB}fB$b0J$yatSmE_FklXnC3lX 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ⅇTu^ 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

^sJ0vJkJ>?5lW6K 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

Uuw-Hpp5G{~A5tsR3MVq`0 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 z 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
- General Settings + Loadbalancing Fallbacks + General - - Router Settings - - - - - Setting - Value - - - - {Object.entries(routerSettings).filter(([param, value]) => param != "fallbacks" && param != "context_window_fallbacks" && param != "routing_strategy_args").map(([param, value]) => ( - - - {param} -

{paramExplanation[param]}

-
- - { - param == "routing_strategy" ? - - usage-based-routing - latency-based-routing - simple-shuffle - : - - } - + + Router Settings + +
+ + + Setting + Value + + + + {Object.entries(routerSettings) + .filter( + ([param, value]) => + param != "fallbacks" && + param != "context_window_fallbacks" && + param != "routing_strategy_args" + ) + .map(([param, value]) => ( + + + {param} +

+ {paramExplanation[param]} +

+
+ + {param == "routing_strategy" ? ( + + + usage-based-routing + + + latency-based-routing + + + simple-shuffle + + + ) : ( + + )} + +
+ ))} +
+
+ 0 + ? routerSettings["routing_strategy_args"] + : defaultLowestLatencyArgs // default value when keys length is 0 + } + paramExplanation={paramExplanation} + /> +
+ + + +
+
+ + + + + Model Name + Fallbacks - ))} - -
- 0 - ? routerSettings['routing_strategy_args'] - : defaultLowestLatencyArgs // default value when keys length is 0 - } - paramExplanation={paramExplanation} - /> - - - - - -
- - - - - Model Name - Fallbacks - - + - - { - routerSettings["fallbacks"] && - routerSettings["fallbacks"].map((item: Object, index: number) => - Object.entries(item).map(([key, value]) => ( - - {key} - {Array.isArray(value) ? value.join(', ') : value} - - - - - deleteFallbacks(key)} - /> - - - )) - ) - } - -
- data.model_name) : []} accessToken={accessToken} routerSettings={routerSettings} setRouterSettings={setRouterSettings}/> -
-
-
+ + {routerSettings["fallbacks"] && + routerSettings["fallbacks"].map( + (item: Object, index: number) => + Object.entries(item).map(([key, value]) => ( + + {key} + + {Array.isArray(value) ? value.join(", ") : value} + + + + + + deleteFallbacks(key)} + /> + + + )) + )} + + + data.model_name) + : [] + } + accessToken={accessToken} + routerSettings={routerSettings} + setRouterSettings={setRouterSettings} + /> + + +

General settings for litellm proxy

+
+ +
); }; -export default GeneralSettings; \ No newline at end of file +export default GeneralSettings; From e518b1e6c195d6a081a20ab4d6fe1ea80ae669df Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 15:37:59 -0700 Subject: [PATCH 328/378] fix - vertex exception test --- litellm/tests/test_exceptions.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/litellm/tests/test_exceptions.py b/litellm/tests/test_exceptions.py index 9b02b1b4a58..9ed73cf6cdf 100644 --- a/litellm/tests/test_exceptions.py +++ b/litellm/tests/test_exceptions.py @@ -578,9 +578,6 @@ def test_router_completion_vertex_exception(): pytest.fail("Request should have failed - bad api key") except Exception as e: print("exception: ", e) - assert "Model: gemini-pro" in str(e) - assert "model_group: vertex-gemini-pro" in str(e) - assert "deployment: vertex_ai/gemini-pro" in str(e) def test_litellm_completion_vertex_exception(): @@ -597,8 +594,6 @@ def test_litellm_completion_vertex_exception(): pytest.fail("Request should have failed - bad api key") except Exception as e: print("exception: ", e) - assert "Model: gemini-pro" in str(e) - assert "vertex_project: bad-project" in str(e) # # test_invalid_request_error(model="command-nightly") From 9f43761000173490c93f76f4e2262b291a0ab5b2 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 15:45:21 -0700 Subject: [PATCH 329/378] fix - show alerts on /completions endpoint --- litellm/proxy/proxy_server.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index cc5327b7589..4bdce5fd32d 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -3909,6 +3909,7 @@ async def completion( user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), ): global user_temperature, user_request_timeout, user_max_tokens, user_api_base + data = {} check_request_disconnected = None try: body = await request.body() @@ -4051,6 +4052,9 @@ async def completion( return response except Exception as e: data["litellm_status"] = "fail" # used for alerting + await proxy_logging_obj.post_call_failure_hook( + user_api_key_dict=user_api_key_dict, original_exception=e, request_data=data + ) verbose_proxy_logger.debug("EXCEPTION RAISED IN PROXY MAIN.PY") litellm_debug_info = getattr(e, "litellm_debug_info", "") verbose_proxy_logger.debug( From f2e8b2500fc4c66ee76bfc34a4ae97c96a243ddf Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 16:05:17 -0700 Subject: [PATCH 330/378] fix function calling mistral large latest --- litellm/tests/test_function_calling.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/tests/test_function_calling.py b/litellm/tests/test_function_calling.py index b36762d9cbf..6e4e9d3e864 100644 --- a/litellm/tests/test_function_calling.py +++ b/litellm/tests/test_function_calling.py @@ -105,6 +105,9 @@ def test_parallel_function_call(model): # Step 4: send the info for each function call and function response to the model for tool_call in tool_calls: function_name = tool_call.function.name + if function_name not in available_functions: + # the model called a function that does not exist in available_functions - don't try calling anything + return function_to_call = available_functions[function_name] function_args = json.loads(tool_call.function.arguments) function_response = function_to_call( From f138c15859e8be0c46ec96e4c54c897fc3fa2fd0 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 16:32:40 -0700 Subject: [PATCH 331/378] (ci/cd) fix test_vertex_ai_stream --- litellm/tests/test_amazing_vertex_completion.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index ad3fb3cc3e3..b747ca88034 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -376,9 +376,8 @@ def test_vertex_ai_stream(): print("making request", model) response = completion( model=model, - messages=[ - {"role": "user", "content": "write 10 line code code for saying hi"} - ], + messages=[{"role": "user", "content": "hello tell me a short story"}], + max_tokens=15, stream=True, ) completed_str = "" From b88ad6149043837da361a5e6bbda33d5872a5497 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 16:52:33 -0700 Subject: [PATCH 332/378] feat - predibase exceptions --- litellm/utils.py | 78 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 88b85feff71..02221f9aa51 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -8155,33 +8155,39 @@ def exception_type( # Common Extra information needed for all providers # We pass num retries, api_base, vertex_deployment etc to the exception here ################################################################################ + extra_information = "" + try: + _api_base = litellm.get_api_base( + model=model, optional_params=extra_kwargs + ) + messages = litellm.get_first_chars_messages(kwargs=completion_kwargs) + _vertex_project = extra_kwargs.get("vertex_project") + _vertex_location = extra_kwargs.get("vertex_location") + _metadata = extra_kwargs.get("metadata", {}) or {} + _model_group = _metadata.get("model_group") + _deployment = _metadata.get("deployment") + extra_information = f"\nModel: {model}" + if _api_base: + extra_information += f"\nAPI Base: {_api_base}" + if messages and len(messages) > 0: + extra_information += f"\nMessages: {messages}" - _api_base = litellm.get_api_base(model=model, optional_params=extra_kwargs) - messages = litellm.get_first_chars_messages(kwargs=completion_kwargs) - _vertex_project = extra_kwargs.get("vertex_project") - _vertex_location = extra_kwargs.get("vertex_location") - _metadata = extra_kwargs.get("metadata", {}) or {} - _model_group = _metadata.get("model_group") - _deployment = _metadata.get("deployment") - extra_information = f"\nModel: {model}" - if _api_base: - extra_information += f"\nAPI Base: {_api_base}" - if messages and len(messages) > 0: - extra_information += f"\nMessages: {messages}" + if _model_group is not None: + extra_information += f"\nmodel_group: {_model_group}\n" + if _deployment is not None: + extra_information += f"\ndeployment: {_deployment}\n" + if _vertex_project is not None: + extra_information += f"\nvertex_project: {_vertex_project}\n" + if _vertex_location is not None: + extra_information += f"\nvertex_location: {_vertex_location}\n" - if _model_group is not None: - extra_information += f"\nmodel_group: {_model_group}\n" - if _deployment is not None: - extra_information += f"\ndeployment: {_deployment}\n" - if _vertex_project is not None: - extra_information += f"\nvertex_project: {_vertex_project}\n" - if _vertex_location is not None: - extra_information += f"\nvertex_location: {_vertex_location}\n" - - # on litellm proxy add key name + team to exceptions - extra_information = _add_key_name_and_team_to_alert( - request_info=extra_information, metadata=_metadata - ) + # on litellm proxy add key name + team to exceptions + extra_information = _add_key_name_and_team_to_alert( + request_info=extra_information, metadata=_metadata + ) + except: + # DO NOT LET this Block raising the original exception + pass ################################################################################ # End of Common Extra information Needed for all providers @@ -8546,6 +8552,28 @@ def exception_type( model=model, response=original_exception.response, ) + elif custom_llm_provider == "predibase": + if "authorization denied for" in error_str: + exception_mapping_worked = True + + # Predibase returns the raw API Key in the response - this block ensures it's not returned in the exception + if ( + error_str is not None + and isinstance(error_str, str) + and "bearer" in error_str.lower() + ): + # only keep the first 10 chars after the occurnence of "bearer" + _bearer_token_start_index = error_str.lower().find("bearer") + error_str = error_str[: _bearer_token_start_index + 14] + error_str += "XXXXXXX" + '"' + + raise AuthenticationError( + message=f"PredibaseException: Authentication Error - {error_str}", + llm_provider="predibase", + model=model, + response=original_exception.response, + litellm_debug_info=extra_information, + ) elif custom_llm_provider == "bedrock": if ( "too many tokens" in error_str From ed0a815c2b0d99a498ca1202417cd49e524ae11d Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 16:53:41 -0700 Subject: [PATCH 333/378] test - exceptions predibase --- litellm/tests/test_exceptions.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/litellm/tests/test_exceptions.py b/litellm/tests/test_exceptions.py index 9ed73cf6cdf..ee695dcd7c2 100644 --- a/litellm/tests/test_exceptions.py +++ b/litellm/tests/test_exceptions.py @@ -596,6 +596,26 @@ def test_litellm_completion_vertex_exception(): print("exception: ", e) +def test_litellm_predibase_exception(): + """ + Test - Assert that the Predibase API Key is not returned on Authentication Errors + """ + try: + import litellm + + litellm.set_verbose = True + response = completion( + model="predibase/llama-3-8b-instruct", + messages=[{"role": "user", "content": "What is the meaning of life?"}], + tenant_id="c4768f95", + api_key="hf-rawapikey", + ) + pytest.fail("Request should have failed - bad api key") + except Exception as e: + assert "hf-rawapikey" not in str(e) + print("exception: ", e) + + # # test_invalid_request_error(model="command-nightly") # # Test 3: Rate Limit Errors # def test_model_call(model): From 1262c5cb392532bedc94bad7c616e990378ecbae Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 17:27:46 -0700 Subject: [PATCH 334/378] fix - /organization/new logic --- litellm/proxy/proxy_server.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index cc5327b7589..adc25386a80 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -7809,7 +7809,12 @@ async def new_organization( If none provided, create one based on provided values """ - budget_row = LiteLLM_BudgetTable(**data.json(exclude_none=True)) + budget_params = LiteLLM_BudgetTable.model_fields.keys() + + # Only include Budget Params when creating an entry in litellm_budgettable + _json_data = data.json(exclude_none=True) + _budget_data = {k: v for k, v in _json_data.items() if k in budget_params} + budget_row = LiteLLM_BudgetTable(**_budget_data) new_budget = prisma_client.jsonify_object(budget_row.json(exclude_none=True)) From 240b183d7a405e1ce05f515d65aa09dbace1f604 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 17:31:14 -0700 Subject: [PATCH 335/378] ci/cd run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 2bc167ed099..17a40334eba 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -38,7 +38,7 @@ def reset_callbacks(): @pytest.mark.skip(reason="Local test") def test_response_model_none(): """ - Addresses - https://github.com/BerriAI/litellm/issues/2972 + Addresses-https://github.com/BerriAI/litellm/issues/2972 """ x = completion( model="mymodel", From 89dd1ffee861e1da12f73d99a1b4f307c2bb5827 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 17:34:54 -0700 Subject: [PATCH 336/378] fix deep copy logic in during_call_hook --- litellm/proxy/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 0555a485b50..29a07ba6737 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -252,8 +252,8 @@ class ProxyLogging: """ Runs the CustomLogger's async_moderation_hook() """ + new_data = copy.deepcopy(data) for callback in litellm.callbacks: - new_data = copy.deepcopy(data) try: if isinstance(callback, CustomLogger): await callback.async_moderation_hook( From ddf77656fb5d0e89059c22fc25059677cce7fa4c Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Wed, 15 May 2024 17:36:11 -0700 Subject: [PATCH 337/378] Allow non-admins to use OpenAI routes The problem we were having is non-admin users trying to use `/engines/{model}/chat/completions` were getting an HTTP 401 error. ```shell $ curl -sSL 'http://localhost:4000/engines/gpt-35-turbo-0125/chat/completions' \ --header "Authorization: Bearer ${LITELLM_KEY}" \ --header 'Content-Type: application/json' \ --data ' { "model": "gpt-35-turbo-0125", "messages": [ { "role": "user", "content": "Write a poem about LiteLLM" } ] }' \ | jq '.' { "error": { "message": "Authentication Error, Only proxy admin can be used to generate, delete, update info for new keys/users/teams. Route=/engines/gpt-35-turbo-0125/chat/completions. Your role=unknown. Your user_id=someone@company.com", "type": "auth_error", "param": "None", "code": 401 } } ``` This seems to be related to code in `user_api_key_auth` that checks that the URL matches a list of routes that are allowed for non-admin users, where the list of routes is in `LiteLLMRoutes.openai_routes.value`. The problem is that the route `/engines/{model}/chat/completions` is not in that list and furthermore, that wouldn't even work if it were, because the comparison is done with `request.url.path` and that will have the actual model name in it (e.g.: `gpt-35-turbo-0125`), rather than `{model}`. I added a new list `LiteLLMRoutes.openai_route_names` and added the route **names** to that list. Then I added a check in `user_api_key_auth` to see if the route name is in the list of route names. --- litellm/proxy/_types.py | 10 ++++++++++ litellm/proxy/proxy_server.py | 2 ++ 2 files changed, 12 insertions(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index b1af153e81f..204405cbfd1 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -77,6 +77,16 @@ class LiteLLM_UpperboundKeyGenerateParams(LiteLLMBase): class LiteLLMRoutes(enum.Enum): + openai_route_names: List = [ + "chat_completion", + "completion", + "embeddings", + "image_generation", + "audio_transcriptions", + "moderations", + "model_info_v1", + "model_info_v2", + ] openai_routes: List = [ # chat completions "/openai/deployments/{model}/chat/completions", diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index cc5327b7589..edfe69fa6e9 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1073,6 +1073,8 @@ async def user_api_key_auth( if not _is_user_proxy_admin(user_id_information): # if non-admin if route in LiteLLMRoutes.openai_routes.value: pass + elif request['route'].name in LiteLLMRoutes.openai_route_names.value: + pass elif ( route in LiteLLMRoutes.info_routes.value ): # check if user allowed to call an info route From d208dedb35b2cec4ade6a2acb63f46eb84b49b3c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 17:39:21 -0700 Subject: [PATCH 338/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 17a40334eba..4aa967848f7 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -38,7 +38,7 @@ def reset_callbacks(): @pytest.mark.skip(reason="Local test") def test_response_model_none(): """ - Addresses-https://github.com/BerriAI/litellm/issues/2972 + Addresses: https://github.com/BerriAI/litellm/issues/2972 """ x = completion( model="mymodel", From 153ce0d085e242c61f76036c7ed77f0fae81152a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 19:26:57 -0700 Subject: [PATCH 339/378] build(ui/general_settings.tsx): support updating global max parallel requests on the ui --- litellm/proxy/_types.py | 20 +- litellm/proxy/proxy_server.py | 187 ++++++++++---- .../src/components/general_settings.tsx | 165 ++++++++++++- .../src/components/networking.tsx | 229 +++++++++++++----- 4 files changed, 491 insertions(+), 110 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 47fefa048b9..c1755174f51 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -714,6 +714,20 @@ class DynamoDBArgs(LiteLLMBase): class ConfigFieldUpdate(LiteLLMBase): field_name: str field_value: Any + config_type: Literal["general_settings"] + + +class ConfigFieldDelete(LiteLLMBase): + config_type: Literal["general_settings"] + field_name: str + + +class ConfigList(LiteLLMBase): + field_name: str + field_type: str + field_description: str + field_value: Any + stored_in_db: Optional[bool] class ConfigGeneralSettings(LiteLLMBase): @@ -763,7 +777,11 @@ class ConfigGeneralSettings(LiteLLMBase): description="override user_api_key_auth with your own auth script - https://docs.litellm.ai/docs/proxy/virtual_keys#custom-auth", ) max_parallel_requests: Optional[int] = Field( - None, description="maximum parallel requests for each api key" + None, + description="maximum parallel requests for each api key", + ) + global_max_parallel_requests: Optional[int] = Field( + None, description="global max parallel requests to allow for a proxy instance." ) infer_model_from_keys: Optional[bool] = Field( None, diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 954b3c109a1..7649f74d506 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -567,9 +567,9 @@ async def user_api_key_auth( #### ELSE #### if master_key is None: if isinstance(api_key, str): - return UserAPIKeyAuth(api_key=api_key) + return UserAPIKeyAuth(api_key=api_key, user_role="proxy_admin") else: - return UserAPIKeyAuth() + return UserAPIKeyAuth(user_role="proxy_admin") elif api_key is None: # only require api key if master key is set raise Exception("No api key passed in.") elif api_key == "": @@ -660,6 +660,7 @@ async def user_api_key_auth( verbose_proxy_logger.debug("Token from db: %s", valid_token) elif valid_token is not None: verbose_proxy_logger.debug("API Key Cache Hit!") + user_id_information = None if valid_token: # Got Valid Token from Cache, DB @@ -1188,7 +1189,18 @@ async def user_api_key_auth( # No token was found when looking up in the DB raise Exception("Invalid token passed") if valid_token_dict is not None: - return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) + if user_id_information is not None and _is_user_proxy_admin( + user_id_information + ): + return UserAPIKeyAuth( + api_key=api_key, user_role="proxy_admin", **valid_token_dict + ) + elif _has_user_setup_sso() and route in LiteLLMRoutes.sso_only_routes.value: + return UserAPIKeyAuth( + api_key=api_key, user_role="app_owner", **valid_token_dict + ) + else: + return UserAPIKeyAuth(api_key=api_key, **valid_token_dict) else: raise Exception() except Exception as e: @@ -2796,7 +2808,19 @@ class ProxyConfig: "Error setting env variable: %s - %s", k, str(e) ) - # general_settings + # router settings + if llm_router is not None and prisma_client is not None: + db_router_settings = await prisma_client.db.litellm_config.find_first( + where={"param_name": "router_settings"} + ) + if ( + db_router_settings is not None + and db_router_settings.param_value is not None + ): + _router_settings = db_router_settings.param_value + llm_router.update_settings(**_router_settings) + + ## ALERTING ## [TODO] move this to the _update_general_settings() block _general_settings = config_data.get("general_settings", {}) if "alerting" in _general_settings: general_settings["alerting"] = _general_settings["alerting"] @@ -2820,17 +2844,23 @@ class ProxyConfig: alert_to_webhook_url=general_settings["alert_to_webhook_url"] ) - # router settings - if llm_router is not None and prisma_client is not None: - db_router_settings = await prisma_client.db.litellm_config.find_first( - where={"param_name": "router_settings"} - ) - if ( - db_router_settings is not None - and db_router_settings.param_value is not None - ): - _router_settings = db_router_settings.param_value - llm_router.update_settings(**_router_settings) + async def _update_general_settings(self, db_general_settings: Optional[Json]): + """ + Pull from DB, read general settings value + """ + if db_general_settings is None: + return + _general_settings = dict(db_general_settings) + ## MAX PARALLEL REQUESTS ## + if "max_parallel_requests" in _general_settings: + general_settings["max_parallel_requests"] = _general_settings[ + "max_parallel_requests" + ] + + if "global_max_parallel_requests" in _general_settings: + general_settings["global_max_parallel_requests"] = _general_settings[ + "global_max_parallel_requests" + ] async def add_deployment( self, @@ -2838,7 +2868,7 @@ class ProxyConfig: proxy_logging_obj: ProxyLogging, ): """ - - Check db for new models (last 10 most recently updated) + - Check db for new models - Check if model id's in router already - If not, add to router """ @@ -2851,9 +2881,21 @@ class ProxyConfig: ) verbose_proxy_logger.debug(f"llm_router: {llm_router}") new_models = await prisma_client.db.litellm_proxymodeltable.find_many() + # update llm router await self._update_llm_router( new_models=new_models, proxy_logging_obj=proxy_logging_obj ) + + db_general_settings = await prisma_client.db.litellm_config.find_first( + where={"param_name": "general_settings"} + ) + + # update general settings + if db_general_settings is not None: + await self._update_general_settings( + db_general_settings=db_general_settings.param_value, + ) + except Exception as e: verbose_proxy_logger.error( "{}\nTraceback:{}".format(str(e), traceback.format_exc()) @@ -3053,27 +3095,6 @@ async def generate_key_helper_fn( data=key_data, table_name="key" ) key_data["token_id"] = getattr(create_key_response, "token", None) - elif custom_db_client is not None: - if table_name is None or table_name == "user": - ## CREATE USER (If necessary) - verbose_proxy_logger.debug( - "CustomDBClient: Creating User= %s", user_data - ) - user_row = await custom_db_client.insert_data( - value=user_data, table_name="user" - ) - if user_row is None: - # GET USER ROW - user_row = await custom_db_client.get_data( - key=user_id, table_name="user" # type: ignore - ) - - ## use default user model list if no key-specific model list provided - if len(user_row.models) > 0 and len(key_data["models"]) == 0: # type: ignore - key_data["models"] = user_row.models - ## CREATE KEY - verbose_proxy_logger.debug("CustomDBClient: Creating Key= %s", key_data) - await custom_db_client.insert_data(value=key_data, table_name="key") except Exception as e: traceback.print_exc() if isinstance(e, HTTPException): @@ -9673,13 +9694,88 @@ async def get_config_general_settings( ) +@router.get( + "/config/list", + tags=["config.yaml"], + dependencies=[Depends(user_api_key_auth)], +) +async def get_config_list( + config_type: Literal["general_settings"], + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +) -> List[ConfigList]: + """ + List the available fields + current values for a given type of setting (currently just 'general_settings'user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),) + """ + global prisma_client, general_settings + + ## VALIDATION ## + """ + - Check if prisma_client is None + - Check if user allowed to call this endpoint (admin-only) + - Check if param in general settings + """ + if prisma_client is None: + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + if user_api_key_dict.user_role != "proxy_admin": + raise HTTPException( + status_code=400, + detail={ + "error": "{}, your role={}".format( + CommonProxyErrors.not_allowed_access.value, + user_api_key_dict.user_role, + ) + }, + ) + + ## get general settings from db + db_general_settings = await prisma_client.db.litellm_config.find_first( + where={"param_name": "general_settings"} + ) + + if db_general_settings is not None and db_general_settings.param_value is not None: + db_general_settings_dict = dict(db_general_settings.param_value) + else: + db_general_settings_dict = {} + + allowed_args = { + "max_parallel_requests": {"type": "Integer"}, + "global_max_parallel_requests": {"type": "Integer"}, + } + + return_val = [] + + for field_name, field_info in ConfigGeneralSettings.model_fields.items(): + if field_name in allowed_args: + + _stored_in_db = None + if field_name in db_general_settings_dict: + _stored_in_db = True + elif field_name in general_settings: + _stored_in_db = False + + _response_obj = ConfigList( + field_name=field_name, + field_type=allowed_args[field_name]["type"], + field_description=field_info.description or "", + field_value=general_settings.get(field_name, None), + stored_in_db=_stored_in_db, + ) + return_val.append(_response_obj) + + return return_val + + @router.post( "/config/field/delete", tags=["config.yaml"], dependencies=[Depends(user_api_key_auth)], ) async def delete_config_general_settings( - field_name: str, + data: ConfigFieldDelete, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), ): """ @@ -9701,13 +9797,18 @@ async def delete_config_general_settings( if user_api_key_dict.user_role != "proxy_admin": raise HTTPException( status_code=400, - detail={"error": CommonProxyErrors.not_allowed_access.value}, + detail={ + "error": "{}, your role={}".format( + CommonProxyErrors.not_allowed_access.value, + user_api_key_dict.user_role, + ) + }, ) - if field_name not in ConfigGeneralSettings.model_fields: + if data.field_name not in ConfigGeneralSettings.model_fields: raise HTTPException( status_code=400, - detail={"error": "Invalid field={} passed in.".format(field_name)}, + detail={"error": "Invalid field={} passed in.".format(data.field_name)}, ) ## get general settings from db @@ -9719,14 +9820,14 @@ async def delete_config_general_settings( if db_general_settings is None or db_general_settings.param_value is None: raise HTTPException( status_code=400, - detail={"error": "Field name={} not in config".format(field_name)}, + detail={"error": "Field name={} not in config".format(data.field_name)}, ) else: general_settings = dict(db_general_settings.param_value) ## update db - general_settings.pop(field_name) + general_settings.pop(data.field_name, None) response = await prisma_client.db.litellm_config.upsert( where={"param_name": "general_settings"}, diff --git a/ui/litellm-dashboard/src/components/general_settings.tsx b/ui/litellm-dashboard/src/components/general_settings.tsx index 2063c049888..d16b434b894 100644 --- a/ui/litellm-dashboard/src/components/general_settings.tsx +++ b/ui/litellm-dashboard/src/components/general_settings.tsx @@ -34,9 +34,20 @@ import { import { getCallbacksCall, setCallbacksCall, + getGeneralSettingsCall, serviceHealthCheck, + updateConfigFieldSetting, + deleteConfigFieldSetting, } from "./networking"; -import { Modal, Form, Input, Select, Button as Button2, message } from "antd"; +import { + Modal, + Form, + Input, + Select, + Button as Button2, + message, + InputNumber, +} from "antd"; import { InformationCircleIcon, PencilAltIcon, @@ -44,6 +55,9 @@ import { StatusOnlineIcon, TrashIcon, RefreshIcon, + CheckCircleIcon, + XCircleIcon, + QuestionMarkCircleIcon, } from "@heroicons/react/outline"; import StaticGenerationSearchParamsBailoutProvider from "next/dist/client/components/static-generation-searchparams-bailout-provider"; import AddFallbacks from "./add_fallbacks"; @@ -123,6 +137,14 @@ interface routingStrategyArgs { lowest_latency_buffer?: number; } +interface generalSettingsItem { + field_name: string; + field_type: string; + field_value: any; + field_description: string; + stored_in_db: boolean | null; +} + const defaultLowestLatencyArgs: routingStrategyArgs = { ttl: 3600, lowest_latency_buffer: 0, @@ -194,6 +216,12 @@ const GeneralSettings: React.FC = ({ const [routerSettings, setRouterSettings] = useState<{ [key: string]: any }>( {} ); + const [generalSettingsDict, setGeneralSettingsDict] = useState<{ + [key: string]: any; + }>({}); + const [generalSettings, setGeneralSettings] = useState( + [] + ); const [isModalVisible, setIsModalVisible] = useState(false); const [form] = Form.useForm(); const [selectedCallback, setSelectedCallback] = useState(null); @@ -225,6 +253,10 @@ const GeneralSettings: React.FC = ({ let router_settings = data.router_settings; setRouterSettings(router_settings); }); + getGeneralSettingsCall(accessToken).then((data) => { + let general_settings = data; + setGeneralSettings(general_settings); + }); }, [accessToken, userRole, userID]); const handleAddCallback = () => { @@ -271,6 +303,61 @@ const GeneralSettings: React.FC = ({ } }; + const handleInputChange = (fieldName: string, newValue: any) => { + // Update the value in the state + const updatedSettings = generalSettings.map((setting) => + setting.field_name === fieldName + ? { ...setting, field_value: newValue } + : setting + ); + setGeneralSettings(updatedSettings); + }; + + const handleUpdateField = (fieldName: string, idx: number) => { + if (!accessToken) { + return; + } + + let fieldValue = generalSettings[idx].field_value; + + if (fieldValue == null || fieldValue == undefined) { + return; + } + try { + updateConfigFieldSetting(accessToken, fieldName, fieldValue); + // update value in state + + const updatedSettings = generalSettings.map((setting) => + setting.field_name === fieldName + ? { ...setting, stored_in_db: true } + : setting + ); + setGeneralSettings(updatedSettings); + } catch (error) { + // do something + } + }; + + const handleResetField = (fieldName: string, idx: number) => { + if (!accessToken) { + return; + } + + try { + deleteConfigFieldSetting(accessToken, fieldName); + // update value in state + + const updatedSettings = generalSettings.map((setting) => + setting.field_name === fieldName + ? { ...setting, stored_in_db: null, field_value: null } + : setting + ); + setGeneralSettings(updatedSettings); + } catch (error) { + // do something + } + }; + const handleSaveChanges = (router_settings: any) => { if (!accessToken) { return; @@ -493,7 +580,81 @@ const GeneralSettings: React.FC = ({ /> -

General settings for litellm proxy

+ + + + + Setting + Value + Status + Action + + + + {generalSettings.map((value, index) => ( + + + {value.field_name} +

+ {value.field_description} +

+
+ + {value.field_type == "Integer" ? ( + + handleInputChange(value.field_name, newValue) + } // Handle value change + /> + ) : null} + + + {value.stored_in_db == true ? ( + + In DB + + ) : value.stored_in_db == false ? ( + + In Config + + ) : ( + + Not Set + + )} + + + + + handleResetField(value.field_name, index) + } + > + Reset + + +
+ ))} +
+
+
diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index 1ec131f7260..a405d4440b8 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -14,15 +14,17 @@ export interface Model { export const modelCostMap = async () => { try { - const response = await fetch('https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json'); + const response = await fetch( + "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json" + ); const jsonData = await response.json(); - console.log(`received data: ${jsonData}`) - return jsonData + console.log(`received data: ${jsonData}`); + return jsonData; } catch (error) { console.error("Failed to get model cost map:", error); throw error; } -} +}; export const modelCreateCall = async ( accessToken: string, @@ -50,19 +52,21 @@ export const modelCreateCall = async ( const data = await response.json(); console.log("API Response:", data); - message.success("Model created successfully. Wait 60s and refresh on 'All Models' page"); + message.success( + "Model created successfully. Wait 60s and refresh on 'All Models' page" + ); return data; } catch (error) { console.error("Failed to create key:", error); throw error; } -} +}; -export const modelDeleteCall = async ( +export const modelDeleteCall = async ( accessToken: string, - model_id: string, + model_id: string ) => { - console.log(`model_id in model delete call: ${model_id}`) + console.log(`model_id in model delete call: ${model_id}`); try { const url = proxyBaseUrl ? `${proxyBaseUrl}/model/delete` : `/model/delete`; const response = await fetch(url, { @@ -72,7 +76,7 @@ export const modelDeleteCall = async ( "Content-Type": "application/json", }, body: JSON.stringify({ - "id": model_id, + id: model_id, }), }); @@ -91,7 +95,7 @@ export const modelDeleteCall = async ( console.error("Failed to create key:", error); throw error; } -} +}; export const keyCreateCall = async ( accessToken: string, @@ -280,15 +284,14 @@ export const teamDeleteCall = async (accessToken: String, teamID: String) => { console.error("Failed to delete key:", error); throw error; } - -} +}; export const userInfoCall = async ( accessToken: String, userID: String | null, userRole: String, viewAll: Boolean = false, - page: number | null, + page: number | null, page_size: number | null ) => { try { @@ -300,7 +303,7 @@ export const userInfoCall = async ( url = `${url}?user_id=${userID}`; } console.log("in userInfoCall viewAll=", viewAll); - if (viewAll && page_size && (page != null) && (page != undefined)) { + if (viewAll && page_size && page != null && page != undefined) { url = `${url}?view_all=true&page=${page}&page_size=${page_size}`; } //message.info("Requesting user data"); @@ -329,10 +332,9 @@ export const userInfoCall = async ( } }; - export const teamInfoCall = async ( accessToken: String, - teamID: String | null, + teamID: String | null ) => { try { let url = proxyBaseUrl ? `${proxyBaseUrl}/team/info` : `/team/info`; @@ -364,10 +366,7 @@ export const teamInfoCall = async ( } }; - -export const getTotalSpendCall = async ( - accessToken: String, -) => { +export const getTotalSpendCall = async (accessToken: String) => { /** * Get all models on proxy */ @@ -435,11 +434,10 @@ export const modelInfoCall = async ( } }; - export const modelMetricsCall = async ( accessToken: String, userID: String, - userRole: String, + userRole: String, modelGroup: String | null, startTime: String | undefined, endTime: String | undefined @@ -450,7 +448,7 @@ export const modelMetricsCall = async ( try { let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics` : `/model/metrics`; if (modelGroup) { - url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}` + url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`; } // message.info("Requesting model data"); const response = await fetch(url, { @@ -476,12 +474,10 @@ export const modelMetricsCall = async ( } }; - - export const modelMetricsSlowResponsesCall = async ( accessToken: String, userID: String, - userRole: String, + userRole: String, modelGroup: String | null, startTime: String | undefined, endTime: String | undefined @@ -490,11 +486,13 @@ export const modelMetricsSlowResponsesCall = async ( * Get all models on proxy */ try { - let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics/slow_responses` : `/model/metrics/slow_responses`; + let url = proxyBaseUrl + ? `${proxyBaseUrl}/model/metrics/slow_responses` + : `/model/metrics/slow_responses`; if (modelGroup) { - url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}` + url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`; } - + // message.info("Requesting model data"); const response = await fetch(url, { method: "GET", @@ -519,11 +517,10 @@ export const modelMetricsSlowResponsesCall = async ( } }; - export const modelExceptionsCall = async ( accessToken: String, userID: String, - userRole: String, + userRole: String, modelGroup: String | null, startTime: String | undefined, endTime: String | undefined @@ -532,10 +529,12 @@ export const modelExceptionsCall = async ( * Get all models on proxy */ try { - let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics/exceptions` : `/model/metrics/exceptions`; + let url = proxyBaseUrl + ? `${proxyBaseUrl}/model/metrics/exceptions` + : `/model/metrics/exceptions`; if (modelGroup) { - url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}` + url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`; } const response = await fetch(url, { method: "GET", @@ -560,7 +559,6 @@ export const modelExceptionsCall = async ( } }; - export const modelAvailableCall = async ( accessToken: String, userID: String, @@ -625,7 +623,6 @@ export const keySpendLogsCall = async (accessToken: String, token: String) => { } }; - export const teamSpendLogsCall = async (accessToken: String) => { try { const url = proxyBaseUrl @@ -654,19 +651,18 @@ export const teamSpendLogsCall = async (accessToken: String) => { } }; - export const tagsSpendLogsCall = async ( - accessToken: String, - startTime: String | undefined, - endTime: String | undefined - ) => { + accessToken: String, + startTime: String | undefined, + endTime: String | undefined +) => { try { let url = proxyBaseUrl ? `${proxyBaseUrl}/global/spend/tags` : `/global/spend/tags`; - + if (startTime && endTime) { - url = `${url}?start_date=${startTime}&end_date=${endTime}` + url = `${url}?start_date=${startTime}&end_date=${endTime}`; } console.log("in tagsSpendLogsCall:", url); @@ -692,7 +688,6 @@ export const tagsSpendLogsCall = async ( } }; - export const userSpendLogsCall = async ( accessToken: String, token: String, @@ -806,11 +801,15 @@ export const adminTopEndUsersCall = async ( let body = ""; if (keyToken) { - body = JSON.stringify({ api_key: keyToken, startTime: startTime, endTime: endTime }); + body = JSON.stringify({ + api_key: keyToken, + startTime: startTime, + endTime: endTime, + }); } else { body = JSON.stringify({ startTime: startTime, endTime: endTime }); } - + //message.info("Making top end users request"); // Define requestOptions with body as an optional property @@ -1079,7 +1078,6 @@ export const teamCreateCall = async ( } }; - export const keyUpdateCall = async ( accessToken: string, formValues: Record // Assuming formValues is an object @@ -1240,7 +1238,7 @@ export const userUpdateUserCall = async ( console.log("Form Values in userUpdateUserCall:", formValues); // Log the form values before making the API call const url = proxyBaseUrl ? `${proxyBaseUrl}/user/update` : `/user/update`; - let response_body = {...formValues}; + let response_body = { ...formValues }; if (userRole !== null) { response_body["user_role"] = userRole; } @@ -1333,7 +1331,7 @@ export const slackBudgetAlertsHealthCheck = async (accessToken: String) => { // throw error with message throw new Error(errorData); } - + const data = await response.json(); message.success("Test Slack Alert worked - check your Slack!"); console.log("Service Health Response:", data); @@ -1347,9 +1345,10 @@ export const slackBudgetAlertsHealthCheck = async (accessToken: String) => { } }; - - -export const serviceHealthCheck= async (accessToken: String, service: String) => { +export const serviceHealthCheck = async ( + accessToken: String, + service: String +) => { try { let url = proxyBaseUrl ? `${proxyBaseUrl}/health/services?service=${service}` @@ -1371,9 +1370,11 @@ export const serviceHealthCheck= async (accessToken: String, service: String) => // throw error with message throw new Error(errorData); } - + const data = await response.json(); - message.success(`Test request to ${service} made - check logs/alerts on ${service} to verify`); + message.success( + `Test request to ${service} made - check logs/alerts on ${service} to verify` + ); // You can add additional logic here based on the response if needed return data; } catch (error) { @@ -1382,9 +1383,6 @@ export const serviceHealthCheck= async (accessToken: String, service: String) => } }; - - - export const getCallbacksCall = async ( accessToken: String, userID: String, @@ -1394,7 +1392,9 @@ export const getCallbacksCall = async ( * Get all the models user has access to */ try { - let url = proxyBaseUrl ? `${proxyBaseUrl}/get/config/callbacks` : `/get/config/callbacks`; + let url = proxyBaseUrl + ? `${proxyBaseUrl}/get/config/callbacks` + : `/get/config/callbacks`; //message.info("Requesting model data"); const response = await fetch(url, { @@ -1421,11 +1421,117 @@ export const getCallbacksCall = async ( } }; +export const getGeneralSettingsCall = async (accessToken: String) => { + try { + let url = proxyBaseUrl + ? `${proxyBaseUrl}/config/list?config_type=general_settings` + : `/config/list?config_type=general_settings`; + //message.info("Requesting model data"); + const response = await fetch(url, { + method: "GET", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + }); + if (!response.ok) { + const errorData = await response.text(); + message.error(errorData, 10); + throw new Error("Network response was not ok"); + } + const data = await response.json(); + //message.info("Received model data"); + return data; + // Handle success - you might want to update some state or UI based on the created key + } catch (error) { + console.error("Failed to get callbacks:", error); + throw error; + } +}; +export const updateConfigFieldSetting = async ( + accessToken: String, + fieldName: string, + fieldValue: any +) => { + try { + let url = proxyBaseUrl + ? `${proxyBaseUrl}/config/field/update` + : `/config/field/update`; + let formData = { + field_name: fieldName, + field_value: fieldValue, + config_type: "general_settings", + }; + //message.info("Requesting model data"); + const response = await fetch(url, { + method: "POST", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(formData), + }); + + if (!response.ok) { + const errorData = await response.text(); + message.error(errorData, 10); + throw new Error("Network response was not ok"); + } + + const data = await response.json(); + //message.info("Received model data"); + message.success("Successfully updated value!"); + return data; + // Handle success - you might want to update some state or UI based on the created key + } catch (error) { + console.error("Failed to set callbacks:", error); + throw error; + } +}; + +export const deleteConfigFieldSetting = async ( + accessToken: String, + fieldName: String +) => { + try { + let url = proxyBaseUrl + ? `${proxyBaseUrl}/config/field/delete` + : `/config/field/delete`; + + let formData = { + field_name: fieldName, + config_type: "general_settings", + }; + //message.info("Requesting model data"); + const response = await fetch(url, { + method: "POST", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(formData), + }); + + if (!response.ok) { + const errorData = await response.text(); + message.error(errorData, 10); + throw new Error("Network response was not ok"); + } + + const data = await response.json(); + message.success("Field reset on proxy"); + return data; + // Handle success - you might want to update some state or UI based on the created key + } catch (error) { + console.error("Failed to get callbacks:", error); + throw error; + } +}; export const setCallbacksCall = async ( accessToken: String, formValues: Record @@ -1464,9 +1570,7 @@ export const setCallbacksCall = async ( } }; -export const healthCheckCall = async ( - accessToken: String, -) => { +export const healthCheckCall = async (accessToken: String) => { /** * Get all the models user has access to */ @@ -1497,6 +1601,3 @@ export const healthCheckCall = async ( throw error; } }; - - - From 8e3aa142872a362cc5958a501b5e17323c5aa934 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 19:40:34 -0700 Subject: [PATCH 340/378] fix revert 3600 --- litellm/proxy/_types.py | 109 ++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 60 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index b1af153e81f..0320b0d0f9e 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1,37 +1,11 @@ -from pydantic import ConfigDict, BaseModel, Field, root_validator, Json, VERSION +from pydantic import BaseModel, Extra, Field, root_validator, Json, validator +from dataclasses import fields import enum from typing import Optional, List, Union, Dict, Literal, Any from datetime import datetime -import uuid -import json +import uuid, json, sys, os from litellm.types.router import UpdateRouterConfig -try: - from pydantic import model_validator # type: ignore -except ImportError: - from pydantic import root_validator # pydantic v1 - - def model_validator(mode): # type: ignore - pre = mode == "before" - return root_validator(pre=pre) - - -# Function to get Pydantic version -def is_pydantic_v2() -> int: - return int(VERSION.split(".")[0]) - - -def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore - else: - from pydantic import Extra - - model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore - - return model_config - def hash_token(token: str): import hashlib @@ -61,7 +35,8 @@ class LiteLLMBase(BaseModel): # if using pydantic v1 return self.__fields_set__ - model_config = get_model_config() + class Config: + protected_namespaces = () class LiteLLM_UpperboundKeyGenerateParams(LiteLLMBase): @@ -104,11 +79,6 @@ class LiteLLMRoutes(enum.Enum): "/v1/models", ] - # NOTE: ROUTES ONLY FOR MASTER KEY - only the Master Key should be able to Reset Spend - master_key_only_routes: List = [ - "/global/spend/reset", - ] - info_routes: List = [ "/key/info", "/team/info", @@ -119,6 +89,11 @@ class LiteLLMRoutes(enum.Enum): "/v2/key/info", ] + # NOTE: ROUTES ONLY FOR MASTER KEY - only the Master Key should be able to Reset Spend + master_key_only_routes: List = [ + "/global/spend/reset", + ] + sso_only_routes: List = [ "/key/generate", "/key/update", @@ -259,7 +234,7 @@ class LiteLLMPromptInjectionParams(LiteLLMBase): llm_api_system_prompt: Optional[str] = None llm_api_fail_call_string: Optional[str] = None - @model_validator(mode="before") + @root_validator(pre=True) def check_llm_api_params(cls, values): llm_api_check = values.get("llm_api_check") if llm_api_check is True: @@ -317,7 +292,8 @@ class ProxyChatCompletionRequest(LiteLLMBase): deployment_id: Optional[str] = None request_timeout: Optional[int] = None - model_config = get_model_config() + class Config: + extra = "allow" # allow params not defined here, these fall in litellm.completion(**kwargs) class ModelInfoDelete(LiteLLMBase): @@ -344,9 +320,11 @@ class ModelInfo(LiteLLMBase): ] ] - model_config = get_model_config() + class Config: + extra = Extra.allow # Allow extra fields + protected_namespaces = () - @model_validator(mode="before") + @root_validator(pre=True) def set_model_info(cls, values): if values.get("id") is None: values.update({"id": str(uuid.uuid4())}) @@ -372,9 +350,10 @@ class ModelParams(LiteLLMBase): litellm_params: dict model_info: ModelInfo - model_config = get_model_config() + class Config: + protected_namespaces = () - @model_validator(mode="before") + @root_validator(pre=True) def set_model_info(cls, values): if values.get("model_info") is None: values.update({"model_info": ModelInfo()}) @@ -410,7 +389,8 @@ class GenerateKeyRequest(GenerateRequestBase): {} ) # {"gpt-4": 5.0, "gpt-3.5-turbo": 5.0}, defaults to {} - model_config = get_model_config() + class Config: + protected_namespaces = () class GenerateKeyResponse(GenerateKeyRequest): @@ -420,7 +400,7 @@ class GenerateKeyResponse(GenerateKeyRequest): user_id: Optional[str] = None token_id: Optional[str] = None - @model_validator(mode="before") + @root_validator(pre=True) def set_model_info(cls, values): if values.get("token") is not None: values.update({"key": values.get("token")}) @@ -460,7 +440,8 @@ class LiteLLM_ModelTable(LiteLLMBase): created_by: str updated_by: str - model_config = get_model_config() + class Config: + protected_namespaces = () class NewUserRequest(GenerateKeyRequest): @@ -488,7 +469,7 @@ class UpdateUserRequest(GenerateRequestBase): user_role: Optional[str] = None max_budget: Optional[float] = None - @model_validator(mode="before") + @root_validator(pre=True) def check_user_info(cls, values): if values.get("user_id") is None and values.get("user_email") is None: raise ValueError("Either user id or user email must be provided") @@ -508,7 +489,7 @@ class NewEndUserRequest(LiteLLMBase): None # if no equivalent model in allowed region - default all requests to this model ) - @model_validator(mode="before") + @root_validator(pre=True) def check_user_info(cls, values): if values.get("max_budget") is not None and values.get("budget_id") is not None: raise ValueError("Set either 'max_budget' or 'budget_id', not both.") @@ -521,7 +502,7 @@ class Member(LiteLLMBase): user_id: Optional[str] = None user_email: Optional[str] = None - @model_validator(mode="before") + @root_validator(pre=True) def check_user_info(cls, values): if values.get("user_id") is None and values.get("user_email") is None: raise ValueError("Either user id or user email must be provided") @@ -546,7 +527,8 @@ class TeamBase(LiteLLMBase): class NewTeamRequest(TeamBase): model_aliases: Optional[dict] = None - model_config = get_model_config() + class Config: + protected_namespaces = () class GlobalEndUsersSpend(LiteLLMBase): @@ -565,7 +547,7 @@ class TeamMemberDeleteRequest(LiteLLMBase): user_id: Optional[str] = None user_email: Optional[str] = None - @model_validator(mode="before") + @root_validator(pre=True) def check_user_info(cls, values): if values.get("user_id") is None and values.get("user_email") is None: raise ValueError("Either user id or user email must be provided") @@ -599,9 +581,10 @@ class LiteLLM_TeamTable(TeamBase): budget_reset_at: Optional[datetime] = None model_id: Optional[int] = None - model_config = get_model_config() + class Config: + protected_namespaces = () - @model_validator(mode="before") + @root_validator(pre=True) def set_model_info(cls, values): dict_fields = [ "metadata", @@ -637,7 +620,8 @@ class LiteLLM_BudgetTable(LiteLLMBase): model_max_budget: Optional[dict] = None budget_duration: Optional[str] = None - model_config = get_model_config() + class Config: + protected_namespaces = () class NewOrganizationRequest(LiteLLM_BudgetTable): @@ -687,7 +671,8 @@ class KeyManagementSettings(LiteLLMBase): class TeamDefaultSettings(LiteLLMBase): team_id: str - model_config = get_model_config() + class Config: + extra = "allow" # allow params not defined here, these fall in litellm.completion(**kwargs) class DynamoDBArgs(LiteLLMBase): @@ -828,7 +813,8 @@ class ConfigYAML(LiteLLMBase): description="litellm router object settings. See router.py __init__ for all, example router.num_retries=5, router.timeout=5, router.max_retries=5, router.retry_after=5", ) - model_config = get_model_config() + class Config: + protected_namespaces = () class LiteLLM_VerificationToken(LiteLLMBase): @@ -862,7 +848,8 @@ class LiteLLM_VerificationToken(LiteLLMBase): user_id_rate_limits: Optional[dict] = None team_id_rate_limits: Optional[dict] = None - model_config = get_model_config() + class Config: + protected_namespaces = () class LiteLLM_VerificationTokenView(LiteLLM_VerificationToken): @@ -892,7 +879,7 @@ class UserAPIKeyAuth( user_role: Optional[Literal["proxy_admin", "app_owner", "app_user"]] = None allowed_model_region: Optional[Literal["eu"]] = None - @model_validator(mode="before") + @root_validator(pre=True) def check_api_key(cls, values): if values.get("api_key") is not None: values.update({"token": hash_token(values.get("api_key"))}) @@ -919,7 +906,7 @@ class LiteLLM_UserTable(LiteLLMBase): tpm_limit: Optional[int] = None rpm_limit: Optional[int] = None - @model_validator(mode="before") + @root_validator(pre=True) def set_model_info(cls, values): if values.get("spend") is None: values.update({"spend": 0.0}) @@ -927,7 +914,8 @@ class LiteLLM_UserTable(LiteLLMBase): values.update({"models": []}) return values - model_config = get_model_config() + class Config: + protected_namespaces = () class LiteLLM_EndUserTable(LiteLLMBase): @@ -939,13 +927,14 @@ class LiteLLM_EndUserTable(LiteLLMBase): default_model: Optional[str] = None litellm_budget_table: Optional[LiteLLM_BudgetTable] = None - @model_validator(mode="before") + @root_validator(pre=True) def set_model_info(cls, values): if values.get("spend") is None: values.update({"spend": 0.0}) return values - model_config = get_model_config() + class Config: + protected_namespaces = () class LiteLLM_SpendLogs(LiteLLMBase): From 136746abc985986760cab5dbc54b88c9bbc09cbf Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 19:42:39 -0700 Subject: [PATCH 341/378] fix test config --- litellm/tests/test_config.py | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/litellm/tests/test_config.py b/litellm/tests/test_config.py index 96c766919e3..e38187e0eac 100644 --- a/litellm/tests/test_config.py +++ b/litellm/tests/test_config.py @@ -5,7 +5,6 @@ import sys, os import traceback from dotenv import load_dotenv -from pydantic import ConfigDict load_dotenv() import os, io @@ -14,36 +13,21 @@ sys.path.insert( 0, os.path.abspath("../..") ) # Adds the parent directory to the, system path import pytest, litellm -from pydantic import BaseModel, VERSION +from pydantic import BaseModel from litellm.proxy.proxy_server import ProxyConfig from litellm.proxy.utils import encrypt_value, ProxyLogging, DualCache from litellm.types.router import Deployment, LiteLLM_Params, ModelInfo from typing import Literal -# Function to get Pydantic version -def is_pydantic_v2() -> int: - return int(VERSION.split(".")[0]) - - -def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore - else: - from pydantic import Extra - - model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore - - return model_config - - class DBModel(BaseModel): model_id: str model_name: str model_info: dict litellm_params: dict - model_config = get_model_config() + + class Config: + protected_namespaces = () @pytest.mark.asyncio From 86223bc7038575f56294c952f231233289f64780 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 19:45:16 -0700 Subject: [PATCH 342/378] revert changes to types/completion.py --- litellm/types/completion.py | 25 +++++-------------------- litellm/types/embedding.py | 24 +++++------------------- 2 files changed, 10 insertions(+), 39 deletions(-) diff --git a/litellm/types/completion.py b/litellm/types/completion.py index 87a7629dafe..78af7667bae 100644 --- a/litellm/types/completion.py +++ b/litellm/types/completion.py @@ -1,27 +1,10 @@ -from typing import List, Optional, Union, Iterable, cast +from typing import List, Optional, Union, Iterable -from pydantic import ConfigDict, BaseModel, validator, VERSION +from pydantic import BaseModel, validator from typing_extensions import Literal, Required, TypedDict -# Function to get Pydantic version -def is_pydantic_v2() -> int: - return int(VERSION.split(".")[0]) - - -def get_model_config() -> ConfigDict: - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", protected_namespaces=()) # type: ignore - else: - from pydantic import Extra - - model_config = ConfigDict(extra=Extra.allow) # type: ignore - - return model_config - - class ChatCompletionSystemMessageParam(TypedDict, total=False): content: Required[str] """The contents of the system message.""" @@ -208,4 +191,6 @@ class CompletionRequest(BaseModel): api_key: Optional[str] = None model_list: Optional[List[str]] = None - model_config = get_model_config() + class Config: + extra = "allow" + protected_namespaces = () diff --git a/litellm/types/embedding.py b/litellm/types/embedding.py index 831c4266c32..9db0ef29079 100644 --- a/litellm/types/embedding.py +++ b/litellm/types/embedding.py @@ -1,23 +1,6 @@ from typing import List, Optional, Union -from pydantic import ConfigDict, BaseModel, validator, VERSION - - -# Function to get Pydantic version -def is_pydantic_v2() -> int: - return int(VERSION.split(".")[0]) - - -def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore - else: - from pydantic import Extra - - model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore - - return model_config +from pydantic import BaseModel, validator class EmbeddingRequest(BaseModel): @@ -34,4 +17,7 @@ class EmbeddingRequest(BaseModel): litellm_call_id: Optional[str] = None litellm_logging_obj: Optional[dict] = None logger_fn: Optional[str] = None - model_config = get_model_config() + + class Config: + # allow kwargs + extra = "allow" From 1a67f244fb6df331790e1f15d60663cf534c48ea Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 19:46:30 -0700 Subject: [PATCH 343/378] fix types/router.py --- litellm/types/router.py | 70 ++++++++++++----------------------------- 1 file changed, 20 insertions(+), 50 deletions(-) diff --git a/litellm/types/router.py b/litellm/types/router.py index 0cc84d8c300..68ee387fea0 100644 --- a/litellm/types/router.py +++ b/litellm/types/router.py @@ -1,42 +1,19 @@ from typing import List, Optional, Union, Dict, Tuple, Literal, TypedDict import httpx -from pydantic import ( - ConfigDict, - BaseModel, - validator, - Field, - __version__ as pydantic_version, - VERSION, -) +from pydantic import BaseModel, validator, Field from .completion import CompletionRequest from .embedding import EmbeddingRequest import uuid, enum -# Function to get Pydantic version -def is_pydantic_v2() -> int: - return int(VERSION.split(".")[0]) - - -def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore - else: - from pydantic import Extra - - model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore - - return model_config - - class ModelConfig(BaseModel): model_name: str litellm_params: Union[CompletionRequest, EmbeddingRequest] tpm: int rpm: int - model_config = get_model_config() + class Config: + protected_namespaces = () class RouterConfig(BaseModel): @@ -67,7 +44,8 @@ class RouterConfig(BaseModel): "latency-based-routing", ] = "simple-shuffle" - model_config = get_model_config() + class Config: + protected_namespaces = () class UpdateRouterConfig(BaseModel): @@ -87,7 +65,8 @@ class UpdateRouterConfig(BaseModel): fallbacks: Optional[List[dict]] = None context_window_fallbacks: Optional[List[dict]] = None - model_config = get_model_config() + class Config: + protected_namespaces = () class ModelInfo(BaseModel): @@ -105,7 +84,8 @@ class ModelInfo(BaseModel): id = str(id) super().__init__(id=id, **params) - model_config = get_model_config() + class Config: + extra = "allow" def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -200,15 +180,9 @@ class GenericLiteLLMParams(BaseModel): max_retries = int(max_retries) # cast to int super().__init__(max_retries=max_retries, **args, **params) - model_config = get_model_config(arbitrary_types_allowed=True) - if pydantic_version.startswith("1"): - # pydantic v2 warns about using a Config class. - # But without this, pydantic v1 will raise an error: - # RuntimeError: no validator found for , - # see `arbitrary_types_allowed` in Config - # Putting arbitrary_types_allowed = True in the ConfigDict doesn't work in pydantic v1. - class Config: - arbitrary_types_allowed = True + class Config: + extra = "allow" + arbitrary_types_allowed = True def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -267,16 +241,9 @@ class LiteLLM_Params(GenericLiteLLMParams): max_retries = int(max_retries) # cast to int super().__init__(max_retries=max_retries, **args, **params) - model_config = get_model_config(arbitrary_types_allowed=True) - - if pydantic_version.startswith("1"): - # pydantic v2 warns about using a Config class. - # But without this, pydantic v1 will raise an error: - # RuntimeError: no validator found for , - # see `arbitrary_types_allowed` in Config - # Putting arbitrary_types_allowed = True in the ConfigDict doesn't work in pydantic v1. - class Config: - arbitrary_types_allowed = True + class Config: + extra = "allow" + arbitrary_types_allowed = True def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -306,7 +273,8 @@ class updateDeployment(BaseModel): litellm_params: Optional[updateLiteLLMParams] = None model_info: Optional[ModelInfo] = None - model_config = get_model_config() + class Config: + protected_namespaces = () class LiteLLMParamsTypedDict(TypedDict, total=False): @@ -380,7 +348,9 @@ class Deployment(BaseModel): # if using pydantic v1 return self.dict(**kwargs) - model_config = get_model_config() + class Config: + extra = "allow" + protected_namespaces = () def __contains__(self, key): # Define custom behavior for the 'in' operator From 765d43d2414b2c6178868bdbe73e89c3eb749d49 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 19:54:52 -0700 Subject: [PATCH 344/378] fix utils.py --- litellm/utils.py | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 88b85feff71..f82ae1e4491 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -19,7 +19,7 @@ from functools import wraps, lru_cache import datetime, time import tiktoken import uuid -from pydantic import ConfigDict, BaseModel, VERSION +from pydantic import BaseModel import aiohttp import textwrap import logging @@ -185,23 +185,6 @@ last_fetched_at_keys = None # } -# Function to get Pydantic version -def is_pydantic_v2() -> int: - return int(VERSION.split(".")[0]) - - -def get_model_config(arbitrary_types_allowed: bool = False) -> ConfigDict: - # Version-specific configuration - if is_pydantic_v2() >= 2: - model_config = ConfigDict(extra="allow", arbitrary_types_allowed=arbitrary_types_allowed, protected_namespaces=()) # type: ignore - else: - from pydantic import Extra - - model_config = ConfigDict(extra=Extra.allow, arbitrary_types_allowed=arbitrary_types_allowed) # type: ignore - - return model_config - - class UnsupportedParamsError(Exception): def __init__(self, status_code, message): self.status_code = status_code @@ -348,7 +331,10 @@ class HiddenParams(OpenAIObject): original_response: Optional[str] = None model_id: Optional[str] = None # used in Router for individual deployments api_base: Optional[str] = None # returns api base used for making completion call - model_config = get_model_config() + + class Config: + extra = "allow" + protected_namespaces = () def get(self, key, default=None): # Custom .get() method to access attributes with a default value if the attribute doesn't exist From c2a306c4ddab0154b1c892d6bb4150f08e4f5aad Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 20:03:30 -0700 Subject: [PATCH 345/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 4aa967848f7..120a65acbf7 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -38,7 +38,7 @@ def reset_callbacks(): @pytest.mark.skip(reason="Local test") def test_response_model_none(): """ - Addresses: https://github.com/BerriAI/litellm/issues/2972 + Addresses:https://github.com/BerriAI/litellm/issues/2972 """ x = completion( model="mymodel", From 594ca947c8846a0e9f3200663d558add714dc58c Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 20:16:11 -0700 Subject: [PATCH 346/378] fix(parallel_request_limiter.py): fix max parallel request limiter on retries --- .../proxy/hooks/parallel_request_limiter.py | 54 +++++++++++++++++-- litellm/proxy/proxy_server.py | 19 +++++++ .../tests/test_parallel_request_limiter.py | 31 +++++++++++ litellm/utils.py | 2 +- 4 files changed, 100 insertions(+), 6 deletions(-) diff --git a/litellm/proxy/hooks/parallel_request_limiter.py b/litellm/proxy/hooks/parallel_request_limiter.py index 28e6d1853fe..26238b6c089 100644 --- a/litellm/proxy/hooks/parallel_request_limiter.py +++ b/litellm/proxy/hooks/parallel_request_limiter.py @@ -79,6 +79,9 @@ class _PROXY_MaxParallelRequestsHandler(CustomLogger): max_parallel_requests = user_api_key_dict.max_parallel_requests if max_parallel_requests is None: max_parallel_requests = sys.maxsize + global_max_parallel_requests = data.get("metadata", {}).get( + "global_max_parallel_requests", None + ) tpm_limit = getattr(user_api_key_dict, "tpm_limit", sys.maxsize) if tpm_limit is None: tpm_limit = sys.maxsize @@ -91,6 +94,24 @@ class _PROXY_MaxParallelRequestsHandler(CustomLogger): # Setup values # ------------ + if global_max_parallel_requests is not None: + # get value from cache + _key = "global_max_parallel_requests" + current_global_requests = await cache.async_get_cache( + key=_key, local_only=True + ) + # check if below limit + if current_global_requests is None: + current_global_requests = 1 + # if above -> raise error + if current_global_requests >= global_max_parallel_requests: + raise HTTPException( + status_code=429, detail="Max parallel request limit reached." + ) + # if below -> increment + else: + await cache.async_increment_cache(key=_key, value=1, local_only=True) + current_date = datetime.now().strftime("%Y-%m-%d") current_hour = datetime.now().strftime("%H") current_minute = datetime.now().strftime("%M") @@ -207,6 +228,9 @@ class _PROXY_MaxParallelRequestsHandler(CustomLogger): async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): try: self.print_verbose(f"INSIDE parallel request limiter ASYNC SUCCESS LOGGING") + global_max_parallel_requests = kwargs["litellm_params"]["metadata"].get( + "global_max_parallel_requests", None + ) user_api_key = kwargs["litellm_params"]["metadata"]["user_api_key"] user_api_key_user_id = kwargs["litellm_params"]["metadata"].get( "user_api_key_user_id", None @@ -222,6 +246,14 @@ class _PROXY_MaxParallelRequestsHandler(CustomLogger): # Setup values # ------------ + if global_max_parallel_requests is not None: + # get value from cache + _key = "global_max_parallel_requests" + # decrement + await self.user_api_key_cache.async_increment_cache( + key=_key, value=-1, local_only=True + ) + current_date = datetime.now().strftime("%Y-%m-%d") current_hour = datetime.now().strftime("%H") current_minute = datetime.now().strftime("%M") @@ -336,6 +368,9 @@ class _PROXY_MaxParallelRequestsHandler(CustomLogger): async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): try: self.print_verbose(f"Inside Max Parallel Request Failure Hook") + global_max_parallel_requests = kwargs["litellm_params"]["metadata"].get( + "global_max_parallel_requests", None + ) user_api_key = ( kwargs["litellm_params"].get("metadata", {}).get("user_api_key", None) ) @@ -347,17 +382,26 @@ class _PROXY_MaxParallelRequestsHandler(CustomLogger): return ## decrement call count if call failed - if ( - hasattr(kwargs["exception"], "status_code") - and kwargs["exception"].status_code == 429 - and "Max parallel request limit reached" in str(kwargs["exception"]) - ): + if "Max parallel request limit reached" in str(kwargs["exception"]): pass # ignore failed calls due to max limit being reached else: # ------------ # Setup values # ------------ + if global_max_parallel_requests is not None: + # get value from cache + _key = "global_max_parallel_requests" + current_global_requests = ( + await self.user_api_key_cache.async_get_cache( + key=_key, local_only=True + ) + ) + # decrement + await self.user_api_key_cache.async_increment_cache( + key=_key, value=-1, local_only=True + ) + current_date = datetime.now().strftime("%Y-%m-%d") current_hour = datetime.now().strftime("%H") current_minute = datetime.now().strftime("%M") diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 7649f74d506..98be701b040 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -2848,6 +2848,7 @@ class ProxyConfig: """ Pull from DB, read general settings value """ + global general_settings if db_general_settings is None: return _general_settings = dict(db_general_settings) @@ -3690,6 +3691,9 @@ async def chat_completion( data["metadata"]["user_api_key_alias"] = getattr( user_api_key_dict, "key_alias", None ) + data["metadata"]["global_max_parallel_requests"] = general_settings.get( + "global_max_parallel_requests", None + ) data["metadata"]["user_api_key_user_id"] = user_api_key_dict.user_id data["metadata"]["user_api_key_org_id"] = user_api_key_dict.org_id data["metadata"]["user_api_key_team_id"] = getattr( @@ -3957,6 +3961,9 @@ async def completion( data["metadata"]["user_api_key_team_id"] = getattr( user_api_key_dict, "team_id", None ) + data["metadata"]["global_max_parallel_requests"] = general_settings.get( + "global_max_parallel_requests", None + ) data["metadata"]["user_api_key_team_alias"] = getattr( user_api_key_dict, "team_alias", None ) @@ -4151,6 +4158,9 @@ async def embeddings( data["metadata"]["user_api_key_alias"] = getattr( user_api_key_dict, "key_alias", None ) + data["metadata"]["global_max_parallel_requests"] = general_settings.get( + "global_max_parallel_requests", None + ) data["metadata"]["user_api_key_user_id"] = user_api_key_dict.user_id data["metadata"]["user_api_key_team_id"] = getattr( user_api_key_dict, "team_id", None @@ -4349,6 +4359,9 @@ async def image_generation( data["metadata"]["user_api_key_alias"] = getattr( user_api_key_dict, "key_alias", None ) + data["metadata"]["global_max_parallel_requests"] = general_settings.get( + "global_max_parallel_requests", None + ) data["metadata"]["user_api_key_user_id"] = user_api_key_dict.user_id data["metadata"]["user_api_key_team_id"] = getattr( user_api_key_dict, "team_id", None @@ -4529,6 +4542,9 @@ async def audio_transcriptions( data["metadata"]["user_api_key_team_id"] = getattr( user_api_key_dict, "team_id", None ) + data["metadata"]["global_max_parallel_requests"] = general_settings.get( + "global_max_parallel_requests", None + ) data["metadata"]["user_api_key_team_alias"] = getattr( user_api_key_dict, "team_alias", None ) @@ -4726,6 +4742,9 @@ async def moderations( "authorization", None ) # do not store the original `sk-..` api key in the db data["metadata"]["headers"] = _headers + data["metadata"]["global_max_parallel_requests"] = general_settings.get( + "global_max_parallel_requests", None + ) data["metadata"]["user_api_key_alias"] = getattr( user_api_key_dict, "key_alias", None ) diff --git a/litellm/tests/test_parallel_request_limiter.py b/litellm/tests/test_parallel_request_limiter.py index d0a28926e8e..00da199d99b 100644 --- a/litellm/tests/test_parallel_request_limiter.py +++ b/litellm/tests/test_parallel_request_limiter.py @@ -28,6 +28,37 @@ from datetime import datetime ## On Request failure +@pytest.mark.asyncio +async def test_global_max_parallel_requests(): + """ + Test if ParallelRequestHandler respects 'global_max_parallel_requests' + + data["metadata"]["global_max_parallel_requests"] + """ + global_max_parallel_requests = 0 + _api_key = "sk-12345" + _api_key = hash_token("sk-12345") + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=100) + local_cache = DualCache() + parallel_request_handler = MaxParallelRequestsHandler() + + for _ in range(3): + try: + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, + cache=local_cache, + data={ + "metadata": { + "global_max_parallel_requests": global_max_parallel_requests + } + }, + call_type="", + ) + pytest.fail("Expected call to fail") + except Exception as e: + pass + + @pytest.mark.asyncio async def test_pre_call_hook(): """ diff --git a/litellm/utils.py b/litellm/utils.py index 7df79f37360..c84df360afb 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -2579,7 +2579,7 @@ class Logging: response_obj=result, start_time=start_time, end_time=end_time, - ) + ) # type: ignore if callable(callback): # custom logger functions await customLogger.async_log_event( kwargs=self.model_call_details, From e49fa9bd2c0348a0bf98b67469a5e4c9651947f0 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 20:29:23 -0700 Subject: [PATCH 347/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 120a65acbf7..4aa967848f7 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -38,7 +38,7 @@ def reset_callbacks(): @pytest.mark.skip(reason="Local test") def test_response_model_none(): """ - Addresses:https://github.com/BerriAI/litellm/issues/2972 + Addresses: https://github.com/BerriAI/litellm/issues/2972 """ x = completion( model="mymodel", From 5300a4c9b3795ce44da56a706236a1ab55ccf5b7 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 21:00:56 -0700 Subject: [PATCH 348/378] fix model prices --- ...odel_prices_and_context_window_backup.json | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index e181e0ef32b..ff9194578cd 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -2967,6 +2967,24 @@ "litellm_provider": "ollama", "mode": "completion" }, + "ollama/llama3": { + "max_tokens": 8192, + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/llama3:70b": { + "max_tokens": 8192, + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, "ollama/mistral": { "max_tokens": 8192, "max_input_tokens": 8192, @@ -2976,6 +2994,42 @@ "litellm_provider": "ollama", "mode": "completion" }, + "ollama/mistral-7B-Instruct-v0.1": { + "max_tokens": 8192, + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/mistral-7B-Instruct-v0.2": { + "max_tokens": 32768, + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/mixtral-8x7B-Instruct-v0.1": { + "max_tokens": 32768, + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/mixtral-8x22B-Instruct-v0.1": { + "max_tokens": 65536, + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, "ollama/codellama": { "max_tokens": 4096, "max_input_tokens": 4096, From 775eb0ba99094213ead835d5f9454e2c97d806f1 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 21:01:02 -0700 Subject: [PATCH 349/378] =?UTF-8?q?bump:=20version=201.37.10=20=E2=86=92?= =?UTF-8?q?=201.37.11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3250eed82f5..0e1ce812252 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.37.10" +version = "1.37.11" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT" @@ -79,7 +79,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.37.10" +version = "1.37.11" version_files = [ "pyproject.toml:^version" ] From ac71a89b0e0325bfe835207770ef5e002d4a364a Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 21:04:09 -0700 Subject: [PATCH 350/378] ui - new build --- litellm/proxy/_experimental/out/404.html | 2 +- .../_buildManifest.js | 0 .../_ssgManifest.js | 0 .../out/_next/static/chunks/app/page-6a39771cacf75ea6.js | 1 - .../out/_next/static/chunks/app/page-c35c14c9afd091ec.js | 1 + litellm/proxy/_experimental/out/index.html | 2 +- litellm/proxy/_experimental/out/index.txt | 4 ++-- ui/litellm-dashboard/out/404.html | 2 +- .../_buildManifest.js | 0 .../_ssgManifest.js | 0 .../out/_next/static/chunks/app/page-6a39771cacf75ea6.js | 1 - .../out/_next/static/chunks/app/page-c35c14c9afd091ec.js | 1 + ui/litellm-dashboard/out/index.html | 2 +- ui/litellm-dashboard/out/index.txt | 4 ++-- 14 files changed, 10 insertions(+), 10 deletions(-) rename litellm/proxy/_experimental/out/_next/static/{obp5wqVSVDMiDTC414cR8 => 2ASoJGxS-D4w-vat00xMy}/_buildManifest.js (100%) rename litellm/proxy/_experimental/out/_next/static/{obp5wqVSVDMiDTC414cR8 => 2ASoJGxS-D4w-vat00xMy}/_ssgManifest.js (100%) delete mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/app/page-c35c14c9afd091ec.js rename ui/litellm-dashboard/out/_next/static/{obp5wqVSVDMiDTC414cR8 => 2ASoJGxS-D4w-vat00xMy}/_buildManifest.js (100%) rename ui/litellm-dashboard/out/_next/static/{obp5wqVSVDMiDTC414cR8 => 2ASoJGxS-D4w-vat00xMy}/_ssgManifest.js (100%) delete mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js create mode 100644 ui/litellm-dashboard/out/_next/static/chunks/app/page-c35c14c9afd091ec.js diff --git a/litellm/proxy/_experimental/out/404.html b/litellm/proxy/_experimental/out/404.html index b70559084d4..b0b75d094b2 100644 --- a/litellm/proxy/_experimental/out/404.html +++ b/litellm/proxy/_experimental/out/404.html @@ -1 +1 @@ -404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js b/litellm/proxy/_experimental/out/_next/static/2ASoJGxS-D4w-vat00xMy/_buildManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js rename to litellm/proxy/_experimental/out/_next/static/2ASoJGxS-D4w-vat00xMy/_buildManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js b/litellm/proxy/_experimental/out/_next/static/2ASoJGxS-D4w-vat00xMy/_ssgManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js rename to litellm/proxy/_experimental/out/_next/static/2ASoJGxS-D4w-vat00xMy/_ssgManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js b/litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js deleted file mode 100644 index 7d08a80c96f..00000000000 --- a/litellm/proxy/_experimental/out/_next/static/chunks/app/page-6a39771cacf75ea6.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,7926))},7926:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lb}});var s,a,r=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:a}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",a);let n=[{key:"1",label:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{children:["Role: ",t]}),(0,r.jsxs)("p",{children:["ID: ",l]})]})}];return(0,r.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,r.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,r.jsx)("div",{className:"flex flex-col items-center",children:(0,r.jsx)(i.default,{href:"/",children:(0,r.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,r.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,r.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[a?(0,r.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,r.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,r.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,r.jsx)(c.Z,{menu:{items:n},children:(0,r.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&r&&null!=a&&void 0!=a&&(n="".concat(n,"?view_all=true&page=").concat(a,"&page_size=").concat(r));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,a,r)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l,t)=>{try{let s="/global/spend/tags";l&&t&&(s="".concat(s,"?start_date=").concat(l,"&end_date=").concat(t)),console.log("in tagsSpendLogsCall:",s);let a=await fetch("".concat(s),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,a,r)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(a,"&end_date=").concat(r):"".concat(l,"?start_date=").concat(a,"&end_date=").concat(r);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let a="";a=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let r={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};r.body=a;let n=await fetch("/global/spend/end_users",r);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let a=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!a.ok){let e=await a.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let a=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),a}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},G=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var Y=t(10384),W=t(46453),J=t(16450),H=t(52273),$=t(26780),X=t(15595),Q=t(6698),ee=t(71801),el=t(42440),et=t(42308),es=t(50670),ea=t(81583),er=t(99129),en=t(44839),eo=t(88707),ei=t(1861);let{Option:ec}=es.default;var ed=e=>{let{userID:l,team:t,userRole:s,accessToken:a,data:o,setData:i}=e,[c]=ea.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,f]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==a){let e=(await N(a,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),f(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,s]);let k=async e=>{try{var t,s,r;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(r=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==r?r:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(a,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?y:t.models:y)},[t,y]),(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,r.jsx)(er.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,r.jsxs)(ea.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,r.jsx)(ec,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,r.jsx)(ec,{value:e,children:e},e))]})}),(0,r.jsxs)($.Z,{className:"mt-20 mb-8",children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)("b",{children:"Optional Settings"})}),(0,r.jsxs)(X.Z,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,r.jsxs)(es.default,{defaultValue:null,placeholder:"n/a",children:[(0,r.jsx)(es.default.Option,{value:"24h",children:"daily"}),(0,r.jsx)(es.default.Option,{value:"30d",children:"monthly"})]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,r.jsx)(er.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Save your Key"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,r.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:null!=h?(0,r.jsxs)("div",{children:[(0,r.jsx)(ee.Z,{className:"mt-3",children:"API Key:"}),(0,r.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,r.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,r.jsx)(et.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,r.jsx)(J.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,r.jsx)(ee.Z,{children:"Key being created, this might take 30s"})})]})})]})},em=t(9454),eu=t(98941),eh=t(33393),ex=t(5),ep=t(13810),ej=t(61244),eg=t(10827),ey=t(3851),ef=t(2044),eZ=t(64167),e_=t(74480),ew=t(7178),eb=t(95093),ek=t(27166);let{Option:ev}=es.default;var eS=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:a,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,r.jsxs)("div",{children:[(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,r.jsxs)(eg.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Key Alias"}),(0,r.jsx)(e_.Z,{children:"Secret Key"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"})]})}),(0,r.jsx)(ey.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(a){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(a.team_id)),(null!=a.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=a.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,r.jsx)(ee.Z,{children:e.key_alias}):(0,r.jsx)(ee.Z,{children:"Not Set"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.key_name})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,r.jsx)(ef.Z,{children:null!=e.max_budget?(0,r.jsx)(ee.Z,{children:e.max_budget}):(0,r.jsx)(ee.Z,{children:"Unlimited"})}),(0,r.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(r.Fragment,{children:a&&a.models&&a.models.length>0?a.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{onClick:()=>{I(e),A(!0)},icon:em.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:S,onCancel:()=>{A(!1),I(null)},footer:null,width:800,children:E&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,r.jsx)(r.Fragment,{children:E.max_budget}):(0,r.jsx)(r.Fragment,{children:"Unlimited"})})})]},e.name),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,r.jsx)(r.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,r.jsx)(r.Fragment,{children:"Never"})})})]},e.name)]}),(0,r.jsxs)(ep.Z,{className:"my-4",children:[(0,r.jsx)(el.Z,{children:"Token Name"}),(0,r.jsx)(ee.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,r.jsx)(el.Z,{children:"Token ID"}),(0,r.jsx)(ee.Z,{className:"my-1 text-[12px]",children:E.token}),(0,r.jsx)(el.Z,{children:"Metadata"}),(0,r.jsx)(ee.Z,{className:"my-1",children:(0,r.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,r.jsx)(J.Z,{className:"mx-auto flex items-center",onClick:()=>{A(!1),I(null)},children:"Close"})]})}),(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>R(e)}),(0,r.jsx)(ej.Z,{onClick:()=>U(e),icon:eh.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=ea.Z.useForm(),[d,m]=(0,n.useState)(a),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,r.jsx)(er.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(ev,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):d.models.map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):C.map(e=>(0,r.jsx)(ev,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"token",name:"token",hidden:!0}),(0,r.jsx)(ea.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,r.jsx)(eb.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,r.jsx)(ek.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eN=t(76032),eA=t(35152),eE=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:a,selectedTeam:o}=e;console.log("userSpend: ".concat(a));let[i,c]=(0,n.useState)(null!==a?a:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==a)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==a&&c(a)},[a]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,r.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,r.jsx)("div",{className:"ml-auto",children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Team Models"})}),(0,r.jsx)(X.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,r.jsx)(eN.Z,{children:x.map(e=>(0,r.jsx)(eA.Z,{children:(0,r.jsx)(ee.Z,{children:e})},e))})})]})})]})},eI=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:a}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==a){let e=(await N(a,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"mb-5",children:(0,r.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eC=e=>{let l,{teams:t,setSelectedTeam:s,userRole:a}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===a?t:t?[...t,o]:[o],"App User"===a)?null:(0,r.jsxs)("div",{className:"mt-5 mb-5",children:[(0,r.jsx)(el.Z,{children:"Select Team"}),(0,r.jsx)(ee.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,r.jsxs)(ee.Z,{className:"mt-3 mb-3",children:[(0,r.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,r.jsxs)(ee.Z,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]})},eP=t(37963),eT=t(36083);console.log("isLocal:",!1);var eO=e=>{let{userID:l,userRole:t,teams:s,keys:a,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[f,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,A]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eP.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!a&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),A(s[0])):A(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let a=(await N(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",a),k(a),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(a))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,a,t]),(0,n.useEffect)(()=>{if(null!==a&&null!=S){let e=0;for(let l of a)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==a){let e=0;for(let l of a)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(f)),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsx)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(eI,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,r.jsx)(eE,{userID:l,userRole:t,accessToken:g,userSpend:f,selectedTeam:S||null}),(0,r.jsx)(eS,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:a,setData:u,teams:s}),(0,r.jsx)(ed,{userID:l,team:S||null,userRole:t,accessToken:g,data:a,setData:u},S?S.team_id:null),(0,r.jsx)(eC,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eF=t(35087),eR=t(92836),eM=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),eK=t(47047),eB=t(76628),ez=t(57750),eq=t(44041),eV=t(38302),eG=t(28683),eY=t(1460),eW=t(78578),eJ=t(63954),eH=t(90252),e$=t(7905),eX=e=>{let{modelID:l,accessToken:t}=e,[s,a]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),a(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),a(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(ej.Z,{onClick:()=>a(!0),icon:eh.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>a(!1),children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Delete Model"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Model ID: ",(0,r.jsx)("b",{children:l})]})})]})})]})},eQ=t(97766),e0=t(46495);let{Title:e1,Link:e2}=eT.default;(s=a||(a={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e4={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e8={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e5=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},a={};s.model=t;let r="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)r+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)a[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:r,litellm_params:s,model_info:a},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e3=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=ea.Z.useForm(),[y,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,N]=(0,n.useState)([]),A=Object.values(a).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[Y,et]=(0,n.useState)([]),[es,en]=(0,n.useState)([]),[ec,ed]=(0,n.useState)([]),[em,eh]=(0,n.useState)([]),[ev,eS]=(0,n.useState)([]),[eN,eA]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eO,e3]=(0,n.useState)(0),e6=e=>{R(e),O(!0)},e7=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,a]of Object.entries(e))"model_id"!==s?l[s]=a:t=a;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await V(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,a,r;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),et(h.data),en(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),ed(p.data),eh(p.exception_types);let j=await v(o,d,c,u,null===(a=eE.from)||void 0===a?void 0:a.toISOString(),null===(r=eE.to)||void 0===r?void 0:r.toISOString());console.log("slowResponses:",j),eA(j);let g=(await q(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let y=g.model_group_retry_policy,f=g.num_retries;console.log("model_group_retry_policy:",y),console.log("default_retries:",f),eP(y),e3(f)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==y&&l(),e9()},[o,i,c,d,y,Z]),!m||!o||!i||!c||!d)return(0,r.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(y)),null!=y&&"object"==typeof y&&e in y)?y[e].litellm_provider:"openai";if(a){let e=a.split("/"),l=e[0];n=1===e.length?u(a):l}else n="openai";r&&(o=null==r?void 0:r.input_cost_per_token,i=null==r?void 0:r.output_cost_per_token,c=null==r?void 0:r.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(a).find(l=>a[l]===e);if(l){let e=e4[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof y&&Object.entries(y).forEach(l=>{let[s,a]=l;null!==a&&"object"==typeof a&&"litellm_provider"in a&&(a.litellm_provider===e||a.litellm_provider.includes(e))&&t.push(s)}),N(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await G(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},la=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),et(s.data),en(s.all_api_bases);let a=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",a),ed(a.data),eh(a.exception_types);let r=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",r),eA(r)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,r.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(eR.Z,{children:"All Models"}),(0,r.jsx)(eR.Z,{children:"Add Model"}),(0,r.jsx)(eR.Z,{children:(0,r.jsx)("pre",{children:"/health Models"})}),(0,r.jsx)(eR.Z,{children:"Model Analytics"}),(0,r.jsx)(eR.Z,{children:"Model Retry Settings"})]}),(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,r.jsxs)(ee.Z,{children:["Last Refreshed: ",Z]}),(0,r.jsx)(ej.Z,{icon:eJ.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsxs)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,r.jsx)(ek.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Public Model Name "}),(0,r.jsx)(e_.Z,{children:"Provider"}),"Admin"===c&&(0,r.jsx)(e_.Z,{children:"API Base"}),(0,r.jsx)(e_.Z,{children:"Extra litellm Params"}),(0,r.jsx)(e_.Z,{children:"Input Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Output Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Max Tokens"}),(0,r.jsx)(e_.Z,{children:"Status"})]})}),(0,r.jsx)(ey.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.model_name})}),(0,r.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Litellm params"})}),(0,r.jsx)(X.Z,{children:(0,r.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,r.jsx)(ef.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.max_tokens}),(0,r.jsx)(ef.Z,{children:e.model_info.db_model?(0,r.jsx)(ex.Z,{icon:eH.Z,className:"text-white",children:"DB Model"}):(0,r.jsx)(ex.Z,{icon:e$.Z,className:"text-black",children:"Config Model"})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>e6(e)}),(0,r.jsx)(eX,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,r.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:a}=e,[n]=ea.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,r.jsx)(er.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:e7,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"max_retries",name:"max_retries",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:e7})]}),(0,r.jsxs)(eU.Z,{className:"h-full",children:[(0,r.jsx)(e1,{level:2,children:"Add new model"}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(ea.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e5(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:E.toString(),children:A.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,r.jsx)(H.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,r.jsx)(H.Z,{placeholder:"Enter model name"}):w.length>0?(0,r.jsx)(eK.Z,{value:w,children:w.map((e,l)=>(0,r.jsx)(eB.Z,{value:e,children:e},l))}):(0,r.jsx)(H.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,r.jsx)(H.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,r.jsx)(ea.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,r.jsx)(H.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,r.jsx)(H.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,r.jsx)(e0.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,r.jsx)(ei.ZP,{icon:(0,r.jsx)(eQ.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,r.jsx)(H.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,r.jsx)(H.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,r.jsxs)(ea.Z.Item,{label:"Base Model",name:"base_model",children:[(0,r.jsx)(H.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,r.jsxs)(ee.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,r.jsx)(e2,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),(0,r.jsx)(ea.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,r.jsx)(eW.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,r.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Model"})}),(0,r.jsx)(eY.Z,{title:"Get help on our github",children:(0,r.jsx)(eT.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(ee.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,r.jsx)(J.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,r.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{numItems:2,className:"mt-2",children:[(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),la(U,e.from,e.to)}})]}),(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Model Group"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>la(e,eE.from,eE.to),children:e},l))})]})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsx)(eG.Z,{children:(0,r.jsxs)(ep.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,r.jsx)(el.Z,{children:"Avg Latency per Token"}),(0,r.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,r.jsx)(ee.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),Y&&es&&(0,r.jsx)(ez.Z,{title:"Model Latency",className:"h-72",data:Y,showLegend:!1,index:"date",categories:es,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:a}=e;if(!a||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,r.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,r.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,r.jsxs)("div",{className:"flex justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,r.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,r.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,r.jsx)(eG.Z,{children:(0,r.jsx)(ep.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Deployment"}),(0,r.jsx)(e_.Z,{children:"Success Responses"}),(0,r.jsxs)(e_.Z,{children:["Slow Responses ",(0,r.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,r.jsx)(ey.Z,{children:eN.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:e.total_count}),(0,r.jsx)(ef.Z,{children:e.slow_count})]},l))})]})})})]}),(0,r.jsxs)(ep.Z,{className:"mt-4",children:[(0,r.jsx)(el.Z,{children:"Exceptions per Model"}),(0,r.jsx)(eq.Z,{className:"h-72",data:ec,index:"model",categories:em,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,r.jsxs)(el.Z,{children:["Retry Policy for ",U]}),(0,r.jsx)(ee.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e8&&(0,r.jsx)("table",{children:(0,r.jsx)("tbody",{children:Object.entries(e8).map((e,l)=>{var t;let[s,a]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[a];return null==n&&(n=eO),(0,r.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,r.jsx)("td",{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)("td",{children:(0,r.jsx)(eo.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[a]:e}}})}})})]},l)})})}),(0,r.jsx)(J.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:e6}=es.default;var e7=e=>{let{userID:l,accessToken:t,teams:s}=e,[a]=ea.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await N(t,l,"any"),s=[];for(let l=0;l{i(!1),a.resetFields()},p=()=>{i(!1),d(null),a.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),a.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,r.jsxs)(er.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,r.jsx)(ee.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,r.jsx)(ee.Z,{className:"mb-6",children:(0,r.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,r.jsxs)(ea.Z,{form:a,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsx)(ea.Z.Item,{label:"User Email",name:"user_email",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",children:(0,r.jsx)(es.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,r.jsx)(e6,{value:e.team_id,children:e.team_alias},e.team_id)):(0,r.jsx)(e6,{value:null,children:"Default Team"},"default")})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,r.jsxs)(er.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,r.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,r.jsx)("br",{}),(0,r.jsx)("p",{children:(0,r.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e9=e=>{let{accessToken:l,token:t,keys:s,userRole:a,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,f]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!a||!o)return;let e=async()=>{try{let e=await Z(l,null,a,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&a&&o&&e()},[l,t,a,o,x]),d&&l&&t&&a&&o)?(0,r.jsx)("div",{style:{width:"100%"},children:(0,r.jsxs)(W.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,r.jsx)(e7,{userID:o,accessToken:l,teams:i}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,r.jsx)("div",{className:"mb-4 mt-1",children:(0,r.jsx)(ee.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,r.jsx)(eM.Z,{children:(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"User ID"}),(0,r.jsx)(e_.Z,{children:"User Email"}),(0,r.jsx)(e_.Z,{children:"User Models"}),(0,r.jsx)(e_.Z,{children:"User Spend ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User Max Budget ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User API Key Aliases"})]})}),(0,r.jsx)(ey.Z,{children:d.map(e=>{var l;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_id}),(0,r.jsx)(ef.Z,{children:e.user_email}),(0,r.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,r.jsx)(ef.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,r.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(W.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,r.jsx)(ex.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,r.jsx)(ex.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,r.jsxs)("div",{className:"flex justify-between items-center",children:[(0,r.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,r.jsx)("div",{children:"Loading..."})},le=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:a,userID:o,userRole:i}=e,[c]=ea.Z.useForm(),[d]=ea.Z.useForm(),{Title:m,Paragraph:h}=eT.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let r=await U(s,e);l&&a(l.map(e=>e.team_id===t?r.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await f(s,C);let e=l.filter(e=>e.team_id!==C);a(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let a=l[t].team_id,r=await _(s,a);console.log("teamInfo response:",r),null!==r&&(e={...e,[a]:r})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await N(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let r=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(r))throw Error("Team alias ".concat(r," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?a([...l,n]):a([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},r=await K(s,y.team_id,t);console.log("response for team create call: ".concat(r.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(r.data.team_id)),e.team_id===r.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=r.data,a(e),Z(r.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"All Teams"}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Team Name"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"}),(0,r.jsx)(e_.Z,{children:"Info"})]})}),(0,r.jsx)(ey.Z,{children:l&&l.length>0?l.map(e=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,r.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>F(e)}),(0,r.jsx)(ej.Z,{onClick:()=>L(e.team_id),icon:eh.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,r.jsx)(er.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"Team Members"}),(0,r.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,r.jsxs)(h,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:y?y.members_with_roles.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:a}=e,[n]=ea.Z.useForm();return(0,r.jsx)(er.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:y,onSubmit:R})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,r.jsx)(er.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},ll=t(18190),lt=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:a}=e,[o]=ea.Z.useForm(),[i]=ea.Z.useForm(),{Title:c,Paragraph:d}=eT.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},N=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let A=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:l,children:N.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t,disabled:!0})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),f(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,r.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,r.jsx)(c,{level:4,children:"Admin Access "}),(0,r.jsxs)(d,{children:[a&&(0,r.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:x?x.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.user_role}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>_(!0)}),(0,r.jsx)(er.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:A,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("div",{className:"flex justify-start",children:[(0,r.jsx)(J.Z,{className:"mr-4 mb-5",onClick:()=>f(!0),children:"+ Add admin"}),(0,r.jsx)(er.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{f(!1),i.resetFields()},onCancel:()=>{f(!1),i.resetFields()},children:I(O)}),(0,r.jsx)(J.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,r.jsx)(er.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,r.jsxs)(W.Z,{children:[(0,r.jsx)(c,{level:4,children:"Add SSO"}),(0,r.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,r.jsx)(J.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,r.jsx)(er.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,r.jsx)(en.Z.Password,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,r.jsx)(en.Z.Password,{})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,r.jsxs)(er.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,r.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{onClick:S,children:"Done"})})]})]}),(0,r.jsxs)(ll.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,r.jsxs)("a",{href:l,target:"_blank",children:[(0,r.jsx)("b",{children:l})," "]})]})]})]})},ls=t(42556);let la=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var lr=e=>{let{accessToken:l,userRole:t,userID:s}=e,[a,o]=(0,n.useState)(la),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=ea.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[y,f]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e);let l=la;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),f(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),N=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{V(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},A=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),V(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(a?[...a,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(a)),(0,r.jsxs)("div",{className:"w-full mx-4",children:[(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(ll.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"Logging Callbacks"}),(0,r.jsx)(eR.Z,{value:"2",children:"Alerting"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Callback"}),(0,r.jsx)(e_.Z,{children:"Callback Env Vars"})]})}),(0,r.jsx)(ey.Z,{children:a.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ex.Z,{color:"emerald",children:e.name})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,r.jsxs)("li",{children:[(0,r.jsx)(ee.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,r.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,r.jsx)("div",{}),(0,r.jsx)(H.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>N(e),children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(ee.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,r.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{children:"Slack Webhook URL"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ls.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:y})})]},l)})})]}),(0,r.jsx)(J.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,a=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",a);let r=(null==a?void 0:a.value)||"";console.log("newWebhookValue",r),e[t]=r}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{V(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,r.jsx)(er.Z,{title:"Add Callback",visible:d,onOk:A,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,r.jsxs)(ea.Z,{form:h,layout:"vertical",onFinish:A,children:[(0,r.jsx)(ea.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,r.jsxs)(es.default,{onChange:e=>{p(e)},children:[(0,r.jsx)(es.default.Option,{value:"langfuse",children:"langfuse"}),(0,r.jsx)(es.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,r.jsx)(H.Z,{type:"password"})}),(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,r.jsx)(H.Z,{type:"password"})})]}),"openmeter"==x&&(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(ea.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,r.jsx)(H.Z,{type:"password"})})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:ln}=es.default;var lo=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:a}=e,[o]=ea.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,r.jsx)(er.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:r}=e,n=[...s.fallbacks||[],{[l]:r}],i={...s,fallbacks:n};console.log(i);try{V(t,{router_settings:i}),a(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,r.jsx)(eb.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsx)(eK.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,r.jsx)(eB.Z,{value:e,children:e},e))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},li=t(12968);async function lc(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new li.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,r.jsxs)("span",{children:["Test model=",(0,r.jsx)("strong",{children:e}),", received model=",(0,r.jsx)("strong",{children:l.model}),". See ",(0,r.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let ld={ttl:3600,lowest_latency_buffer:0},lm=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,r.jsx)(X.Z,{children:"latency-based-routing"==l?(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,r.jsx)(ee.Z,{children:"No specific settings"})})]})};var lu=e=>{let{accessToken:l,userRole:t,userID:s,modelData:a}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)(!1),[m]=ea.Z.useForm(),[h,x]=(0,n.useState)(null),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),f={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)})},[l,t,s]);let Z=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await V(l,{router_settings:o}),i({...o}),j(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},_=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,p];if("routing_strategy_args"==l&&"latency-based-routing"==p){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"General Settings"}),(0,r.jsx)(eR.Z,{value:"2",children:"Fallbacks"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(el.Z,{children:"Router Settings"}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:f[l]})]}),(0,r.jsx)(ef.Z,{children:"routing_strategy"==l?(0,r.jsxs)(eb.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:j,children:[(0,r.jsx)(ek.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,r.jsx)(ek.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,r.jsx)(ek.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,r.jsx)(lm,{selectedStrategy:p,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:ld,paramExplanation:f})]}),(0,r.jsx)(Y.Z,{children:(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>_(o),children:"Save Changes"})})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Model Name"}),(0,r.jsx)(e_.Z,{children:"Fallbacks"})]})}),(0,r.jsx)(ey.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,a]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:s}),(0,r.jsx)(ef.Z,{children:Array.isArray(a)?a.join(", "):a}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(J.Z,{onClick:()=>lc(s,l),children:"Test Fallback"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ej.Z,{icon:eh.Z,size:"sm",onClick:()=>Z(s)})})]},t.toString()+s)}))})]}),(0,r.jsx)(lo,{models:(null==a?void 0:a.data)?a.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]})]})]})}):null},lh=t(67951),lx=e=>{let{}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsxs)("div",{className:"mb-5",children:[(0,r.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,r.jsx)(ee.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{children:[(0,r.jsx)(eR.Z,{children:"OpenAI Python SDK"}),(0,r.jsx)(eR.Z,{children:"LlamaIndex"}),(0,r.jsx)(eR.Z,{children:"Langchain Py"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lp(e,l,t,s){console.log("isLocal:",!1);let a=window.location.origin,r=new li.ZP.OpenAI({apiKey:s,baseURL:a,dangerouslyAllowBrowser:!0});try{for await(let s of(await r.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var lj=e=>{let{accessToken:l,token:t,userRole:s,userID:a}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{let e=await N(l,a,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,a,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&a){u(e=>[...e,{role:"user",content:c}]);try{h&&await lp(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,r.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eM.Z,{children:[(0,r.jsx)(eL.Z,{children:(0,r.jsx)(eR.Z,{children:"Chat"})}),(0,r.jsx)(eD.Z,{children:(0,r.jsxs)(eU.Z,{children:[(0,r.jsx)("div",{className:"sm:max-w-2xl",children:(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"API Key"}),(0,r.jsx)(H.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,r.jsxs)(Y.Z,{className:"mx-2",children:[(0,r.jsx)(ee.Z,{children:"Select Model:"}),(0,r.jsx)(es.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,r.jsxs)(eg.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{})})}),(0,r.jsx)(ey.Z,{children:m.map((e,l)=>(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,r.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(H.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,r.jsx)(J.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},lg=t(33509),ly=t(95781);let{Sider:lf}=lg.default;var lZ=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,r.jsx)(lf,{width:120,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,r.jsx)(lf,{width:145,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:(0,r.jsx)(ee.Z,{children:"API Keys"})},"1"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:(0,r.jsx)(ee.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:(0,r.jsx)(ee.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:(0,r.jsx)(ee.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("teams"),children:(0,r.jsx)(ee.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("users"),children:(0,r.jsx)(ee.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("settings"),children:(0,r.jsx)(ee.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("general-settings"),children:(0,r.jsx)(ee.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("admin-panel"),children:(0,r.jsx)(ee.Z,{children:"Admin"})},"7"):null,(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api_ref"),children:(0,r.jsx)(ee.Z,{children:"API Reference"})},"11")]})})})},l_=t(67989),lw=e=>{let{accessToken:l,token:t,userRole:s,userID:a,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,y]=(0,n.useState)([]),[f,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[N,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=z(M),D=z(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let a=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",a),j(a)},B=async(e,t)=>{e&&t&&l&&(Z((await E(l,e.toISOString(),t.toISOString())).spend_per_tag),console.log("Tag spend data updated successfully"))};function z(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){var e,r;let t=await C(l);d(t);let s=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(s);let a=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(a);let n=await A(l);console.log("teamSpend",n),y(n.daily_spend),w(n.teams);let o=n.total_spend_per_team;o=o.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(o);let i=await E(l,null===(e=N.from)||void 0===e?void 0:e.toISOString(),null===(r=N.to)||void 0===r?void 0:r.toISOString());Z(i.spend_per_tag);let c=await T(l,null,void 0,void 0);j(c),console.log("spend/user result",c)}else"App Owner"==s&&await I(l,t,s,a,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,a,U,D]),(0,r.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,r.jsx)(eE,{userID:a,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{className:"mt-2",children:[(0,r.jsx)(eR.Z,{children:"All Up"}),(0,r.jsx)(eR.Z,{children:"Team Based Usage"}),(0,r.jsx)(eR.Z,{children:"End User Usage"}),(0,r.jsx)(eR.Z,{children:"Tag Based Usage"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:2,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Monthly Spend"}),(0,r.jsx)(eq.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top API Keys"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top Models"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsxs)(ep.Z,{className:"mb-2",children:[(0,r.jsx)(el.Z,{children:"Total Spend Per Team"}),(0,r.jsx)(l_.Z,{data:b})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Daily Spend Per Team"}),(0,r.jsx)(eq.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:N,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Key"}),(0,r.jsxs)(eb.Z,{defaultValue:"all-keys",children:[(0,r.jsx)(ek.Z,{value:"all-keys",onClick:()=>{K(N.from,N.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{K(N.from,N.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,r.jsx)(ep.Z,{className:"mt-4",children:(0,r.jsxs)(eg.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"End User"}),(0,r.jsx)(e_.Z,{children:"Spend"}),(0,r.jsx)(e_.Z,{children:"Total Events"})]})}),(0,r.jsx)(ey.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.end_user}),(0,r.jsx)(ef.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,r.jsx)(ef.Z,{children:e.total_count})]},l)})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsx)(eF.Z,{className:"mb-4",enableSelect:!0,value:N,onValueChange:e=>{R(e),B(e.from,e.to)}}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Spend Per Tag"}),(0,r.jsxs)(ee.Z,{children:["Get Started Tracking cost per tag ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,r.jsx)(eq.Z,{className:"h-72",data:f,index:"name",categories:["spend"],colors:["blue"]})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})})]})]})]})},lb=()=>{let{Title:e,Paragraph:l}=eT.default,[t,s]=(0,n.useState)(""),[a,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,y]=(0,n.useState)({data:[]}),f=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eP.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{children:"Loading..."}),children:(0,r.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,r.jsx)(m,{userID:f,userRole:t,userEmail:a,showSSOBanner:x}),(0,r.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,r.jsx)("div",{className:"mt-8",children:(0,r.jsx)(lZ,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,r.jsx)(eO,{userID:f,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:a,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,r.jsx)(e3,{userID:f,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:y}):"llm-playground"==_?(0,r.jsx)(lj,{userID:f,userRole:t,token:Z,accessToken:b}):"users"==_?(0,r.jsx)(e9,{userID:f,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,r.jsx)(le,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:f,userRole:t}):"admin-panel"==_?(0,r.jsx)(lt,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,r.jsx)(lx,{}):"settings"==_?(0,r.jsx)(lr,{userID:f,userRole:t,accessToken:b}):"general-settings"==_?(0,r.jsx)(lu,{userID:f,userRole:t,accessToken:b,modelData:g}):(0,r.jsx)(lw,{userID:f,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/app/page-c35c14c9afd091ec.js b/litellm/proxy/_experimental/out/_next/static/chunks/app/page-c35c14c9afd091ec.js new file mode 100644 index 00000000000..e8b5c33a1cf --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/app/page-c35c14c9afd091ec.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,4858))},4858:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lS}});var s,r,a=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:r}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",r);let n=[{key:"1",label:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{children:["Role: ",t]}),(0,a.jsxs)("p",{children:["ID: ",l]})]})}];return(0,a.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,a.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,a.jsx)("div",{className:"flex flex-col items-center",children:(0,a.jsx)(i.default,{href:"/",children:(0,a.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,a.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,a.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[r?(0,a.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,a.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,a.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,a.jsx)(c.Z,{menu:{items:n},children:(0,a.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&a&&null!=r&&void 0!=r&&(n="".concat(n,"?view_all=true&page=").concat(r,"&page_size=").concat(a));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,r,a)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l,t)=>{try{let s="/global/spend/tags";l&&t&&(s="".concat(s,"?start_date=").concat(l,"&end_date=").concat(t)),console.log("in tagsSpendLogsCall:",s);let r=await fetch("".concat(s),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!r.ok){let e=await r.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let a=await r.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,r,a)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(r,"&end_date=").concat(a):"".concat(l,"?start_date=").concat(r,"&end_date=").concat(a);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let r="";r=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let a={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};a.body=r;let n=await fetch("/global/spend/end_users",a);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let r=await s.json();return console.log(r),r}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let r=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!r.ok){let e=await r.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await r.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let r=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),r}catch(e){throw console.error("Failed to perform health check:",e),e}},V=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},q=async e=>{try{let l=await fetch("/config/list?config_type=general_settings",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},G=async(e,l,t)=>{try{let s=await fetch("/config/field/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:l,field_value:t,config_type:"general_settings"})});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await s.json();return u.ZP.success("Successfully updated value!"),r}catch(e){throw console.error("Failed to set callbacks:",e),e}},Y=async(e,l)=>{try{let t=await fetch("/config/field/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:l,config_type:"general_settings"})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return u.ZP.success("Field reset on proxy"),s}catch(e){throw console.error("Failed to get callbacks:",e),e}},W=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},J=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var H=t(10384),$=t(46453),X=t(16450),Q=t(52273),ee=t(26780),el=t(15595),et=t(6698),es=t(71801),er=t(42440),ea=t(42308),en=t(50670),eo=t(81583),ei=t(99129),ec=t(44839),ed=t(88707),em=t(1861);let{Option:eu}=en.default;var eh=e=>{let{userID:l,team:t,userRole:s,accessToken:r,data:o,setData:i}=e,[c]=eo.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[f,y]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==r){let e=(await N(r,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),y(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,s]);let k=async e=>{try{var t,s,a;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(a=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==a?a:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(r,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?f:t.models:f)},[t,f]),(0,a.jsxs)("div",{children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,a.jsx)(ei.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,a.jsxs)(eo.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,a.jsx)(ec.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,a.jsx)(eu,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,a.jsx)(eu,{value:e,children:e},e))]})}),(0,a.jsxs)(ee.Z,{className:"mt-20 mb-8",children:[(0,a.jsx)(et.Z,{children:(0,a.jsx)("b",{children:"Optional Settings"})}),(0,a.jsxs)(el.Z,{children:[(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,a.jsxs)(en.default,{defaultValue:null,placeholder:"n/a",children:[(0,a.jsx)(en.default.Option,{value:"24h",children:"daily"}),(0,a.jsx)(en.default.Option,{value:"30d",children:"monthly"})]})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(ec.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,a.jsx)(ei.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(er.Z,{children:"Save your Key"}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,a.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,a.jsx)(H.Z,{numColSpan:1,children:null!=h?(0,a.jsxs)("div",{children:[(0,a.jsx)(es.Z,{className:"mt-3",children:"API Key:"}),(0,a.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,a.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,a.jsx)(ea.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,a.jsx)(X.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,a.jsx)(es.Z,{children:"Key being created, this might take 30s"})})]})})]})},ex=t(9454),ep=t(98941),ej=t(33393),eg=t(5),ef=t(13810),ey=t(61244),eZ=t(10827),e_=t(3851),ew=t(2044),eb=t(64167),ek=t(74480),ev=t(7178),eS=t(95093),eN=t(27166);let{Option:eA}=en.default;var eE=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:r,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await f(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,a.jsxs)("div",{children:[(0,a.jsxs)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,a.jsxs)(eZ.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Key Alias"}),(0,a.jsx)(ek.Z,{children:"Secret Key"}),(0,a.jsx)(ek.Z,{children:"Spend (USD)"}),(0,a.jsx)(ek.Z,{children:"Budget (USD)"}),(0,a.jsx)(ek.Z,{children:"Models"}),(0,a.jsx)(ek.Z,{children:"TPM / RPM Limits"})]})}),(0,a.jsx)(e_.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(r){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(r.team_id)),(null!=r.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=r.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,a.jsx)(es.Z,{children:e.key_alias}):(0,a.jsx)(es.Z,{children:"Not Set"})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:e.key_name})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,a.jsx)(ew.Z,{children:null!=e.max_budget?(0,a.jsx)(es.Z,{children:e.max_budget}):(0,a.jsx)(es.Z,{children:"Unlimited"})}),(0,a.jsx)(ew.Z,{children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(a.Fragment,{children:r&&r.models&&r.models.length>0?r.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Team Models"})},l):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Team Models"})},l):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ew.Z,{children:(0,a.jsxs)(es.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{onClick:()=>{I(e),A(!0)},icon:ex.Z,size:"sm"}),(0,a.jsx)(ei.Z,{open:S,onCancel:()=>{A(!1),I(null)},footer:null,width:800,children:E&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,a.jsx)(a.Fragment,{children:E.max_budget}):(0,a.jsx)(a.Fragment,{children:"Unlimited"})})})]},e.name),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,a.jsx)(a.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,a.jsx)(a.Fragment,{children:"Never"})})})]},e.name)]}),(0,a.jsxs)(ef.Z,{className:"my-4",children:[(0,a.jsx)(er.Z,{children:"Token Name"}),(0,a.jsx)(es.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,a.jsx)(er.Z,{children:"Token ID"}),(0,a.jsx)(es.Z,{className:"my-1 text-[12px]",children:E.token}),(0,a.jsx)(er.Z,{children:"Metadata"}),(0,a.jsx)(es.Z,{className:"my-1",children:(0,a.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,a.jsx)(X.Z,{className:"mx-auto flex items-center",onClick:()=>{A(!1),I(null)},children:"Close"})]})}),(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>R(e)}),(0,a.jsx)(ey.Z,{onClick:()=>U(e),icon:ej.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(X.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(X.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=eo.Z.useForm(),[d,m]=(0,n.useState)(r),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,a.jsx)(ei.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(eo.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(ec.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(eA,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,a.jsx)(eA,{value:e,children:e},e)):d.models.map(e=>(0,a.jsx)(eA,{value:e,children:e},e)):C.map(e=>(0,a.jsx)(eA,{value:e,children:e},e))]})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{label:"token",name:"token",hidden:!0}),(0,a.jsx)(eo.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,a.jsx)(eS.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,a.jsx)(eN.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eI=t(76032),eC=t(35152),eP=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:r,selectedTeam:o}=e;console.log("userSpend: ".concat(r));let[i,c]=(0,n.useState)(null!==r?r:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==r)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==r&&c(r)},[r]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,a.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,a.jsx)("div",{className:"ml-auto",children:(0,a.jsxs)(ee.Z,{children:[(0,a.jsx)(et.Z,{children:(0,a.jsx)(es.Z,{children:"Team Models"})}),(0,a.jsx)(el.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,a.jsx)(eI.Z,{children:x.map(e=>(0,a.jsx)(eC.Z,{children:(0,a.jsx)(es.Z,{children:e})},e))})})]})})]})},eT=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:r}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==r){let e=(await N(r,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("div",{className:"mb-5",children:(0,a.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eO=e=>{let l,{teams:t,setSelectedTeam:s,userRole:r}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===r?t:t?[...t,o]:[o],"App User"===r)?null:(0,a.jsxs)("div",{className:"mt-5 mb-5",children:[(0,a.jsx)(er.Z,{children:"Select Team"}),(0,a.jsx)(es.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,a.jsxs)(es.Z,{className:"mt-3 mb-3",children:[(0,a.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,a.jsx)(eS.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(eN.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,a.jsxs)(es.Z,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]})},eF=t(37963),eR=t(36083);console.log("isLocal:",!1);var eM=e=>{let{userID:l,userRole:t,teams:s,keys:r,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,f]=(0,n.useState)(null),[y,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,A]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eF.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),f(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!r&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),A(s[0])):A(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let r=(await N(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",r),k(r),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(r))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,r,t]),(0,n.useEffect)(()=>{if(null!==r&&null!=S){let e=0;for(let l of r)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==r){let e=0;for(let l of r)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eR.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(y)),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsx)($.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(eT,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,a.jsx)(eP,{userID:l,userRole:t,accessToken:g,userSpend:y,selectedTeam:S||null}),(0,a.jsx)(eE,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:r,setData:u,teams:s}),(0,a.jsx)(eh,{userID:l,team:S||null,userRole:t,accessToken:g,data:r,setData:u},S?S.team_id:null),(0,a.jsx)(eO,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eL=t(35087),eU=t(92836),eD=t(26734),eK=t(41608),eB=t(32126),ez=t(23682),eV=t(47047),eq=t(76628),eG=t(57750),eY=t(44041),eW=t(38302),eJ=t(28683),eH=t(1460),e$=t(78578),eX=t(63954),eQ=t(90252),e0=t(7905),e1=e=>{let{modelID:l,accessToken:t}=e,[s,r]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),r(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),r(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(ey.Z,{onClick:()=>r(!0),icon:ej.Z,size:"sm"}),(0,a.jsx)(ei.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>r(!1),children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(er.Z,{children:"Delete Model"}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Model ID: ",(0,a.jsx)("b",{children:l})]})})]})})]})},e2=t(97766),e4=t(46495);let{Title:e8,Link:e5}=eR.default;(s=r||(r={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e3={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e6={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e7=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},r={};s.model=t;let a="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)a+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)r[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:a,litellm_params:s,model_info:r},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e9=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=eo.Z.useForm(),[f,y]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,N]=(0,n.useState)([]),A=Object.values(r).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[q,G]=(0,n.useState)([]),[Y,H]=(0,n.useState)([]),[ea,en]=(0,n.useState)([]),[ec,eu]=(0,n.useState)([]),[eh,ex]=(0,n.useState)([]),[ej,eA]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eT,eO]=(0,n.useState)(0),eF=e=>{R(e),O(!0)},eM=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,r]of Object.entries(e))"model_id"!==s?l[s]=r:t=r;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await W(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,r,a;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),G(h.data),H(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),en(p.data),eu(p.exception_types);let j=await v(o,d,c,u,null===(r=eE.from)||void 0===r?void 0:r.toISOString(),null===(a=eE.to)||void 0===a?void 0:a.toISOString());console.log("slowResponses:",j),eA(j);let g=(await V(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let f=g.model_group_retry_policy,y=g.num_retries;console.log("model_group_retry_policy:",f),console.log("default_retries:",y),eP(f),eO(y)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),y(e)};null==f&&l(),e9()},[o,i,c,d,f,Z]),!m||!o||!i||!c||!d)return(0,a.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(f)),null!=f&&"object"==typeof f&&e in f)?f[e].litellm_provider:"openai";if(r){let e=r.split("/"),l=e[0];n=1===e.length?u(r):l}else n="openai";a&&(o=null==a?void 0:a.input_cost_per_token,i=null==a?void 0:a.output_cost_per_token,c=null==a?void 0:a.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eR.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(r).find(l=>r[l]===e);if(l){let e=e3[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof f&&Object.entries(f).forEach(l=>{let[s,r]=l;null!==r&&"object"==typeof r&&"litellm_provider"in r&&(r.litellm_provider===e||r.litellm_provider.includes(e))&&t.push(s)}),N(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await J(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},lr=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),G(s.data),H(s.all_api_bases);let r=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",r),en(r.data),eu(r.exception_types);let a=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",a),eA(a)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,a.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,a.jsxs)(eD.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eK.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(eU.Z,{children:"All Models"}),(0,a.jsx)(eU.Z,{children:"Add Model"}),(0,a.jsx)(eU.Z,{children:(0,a.jsx)("pre",{children:"/health Models"})}),(0,a.jsx)(eU.Z,{children:"Model Analytics"}),(0,a.jsx)(eU.Z,{children:"Model Retry Settings"})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,a.jsxs)(es.Z,{children:["Last Refreshed: ",Z]}),(0,a.jsx)(ey.Z,{icon:eX.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)($.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(es.Z,{children:"Filter by Public Model Name"}),(0,a.jsxs)(eS.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,a.jsx)(eN.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{className:"mt-5",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Public Model Name "}),(0,a.jsx)(ek.Z,{children:"Provider"}),"Admin"===c&&(0,a.jsx)(ek.Z,{children:"API Base"}),(0,a.jsx)(ek.Z,{children:"Extra litellm Params"}),(0,a.jsx)(ek.Z,{children:"Input Price per token ($)"}),(0,a.jsx)(ek.Z,{children:"Output Price per token ($)"}),(0,a.jsx)(ek.Z,{children:"Max Tokens"}),(0,a.jsx)(ek.Z,{children:"Status"})]})}),(0,a.jsx)(e_.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:e.model_name})}),(0,a.jsx)(ew.Z,{children:e.provider}),"Admin"===c&&(0,a.jsx)(ew.Z,{children:e.api_base}),(0,a.jsx)(ew.Z,{children:(0,a.jsxs)(ee.Z,{children:[(0,a.jsx)(et.Z,{children:(0,a.jsx)(es.Z,{children:"Litellm params"})}),(0,a.jsx)(el.Z,{children:(0,a.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,a.jsx)(ew.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,a.jsx)(ew.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,a.jsx)(ew.Z,{children:e.max_tokens}),(0,a.jsx)(ew.Z,{children:e.model_info.db_model?(0,a.jsx)(eg.Z,{icon:eQ.Z,className:"text-white",children:"DB Model"}):(0,a.jsx)(eg.Z,{icon:e0.Z,className:"text-black",children:"Config Model"})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>eF(e)}),(0,a.jsx)(e1,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,a.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:r}=e,[n]=eo.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,a.jsx)(ei.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(eo.Z,{form:n,onFinish:eM,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,a.jsx)(Q.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"max_retries",name:"max_retries",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,a.jsx)(ed.Z,{min:0,step:1e-4})}),(0,a.jsx)(eo.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,a.jsx)(ed.Z,{min:0,step:1e-4})}),(0,a.jsx)(eo.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:eM})]}),(0,a.jsxs)(eB.Z,{className:"h-full",children:[(0,a.jsx)(e8,{level:2,children:"Add new model"}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eo.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e7(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eS.Z,{value:E.toString(),children:A.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,a.jsx)(Q.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsx)(es.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,a.jsx)(Q.Z,{placeholder:"Enter model name"}):w.length>0?(0,a.jsx)(eV.Z,{value:w,children:w.map((e,l)=>(0,a.jsx)(eq.Z,{value:e,children:e},l))}):(0,a.jsx)(Q.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsxs)(es.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,a.jsx)(e5,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,a.jsx)(e5,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,a.jsx)(Q.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,a.jsx)(eo.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,a.jsx)(Q.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,a.jsx)(Q.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,a.jsx)(Q.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,a.jsx)(e4.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,a.jsx)(em.ZP,{icon:(0,a.jsx)(e2.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsx)(es.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,a.jsx)(Q.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,a.jsx)(Q.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,a.jsxs)(eo.Z.Item,{label:"Base Model",name:"base_model",children:[(0,a.jsx)(Q.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,a.jsxs)(es.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,a.jsx)(e5,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(Q.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(Q.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(Q.Z,{placeholder:"us-east-1"})}),(0,a.jsx)(eo.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,a.jsx)(e$.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsxs)(es.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,a.jsx)(e5,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,a.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add Model"})}),(0,a.jsx)(eH.Z,{title:"Get help on our github",children:(0,a.jsx)(eR.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(es.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,a.jsx)(X.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,a.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)($.Z,{numItems:2,className:"mt-2",children:[(0,a.jsxs)(eJ.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Time Range"}),(0,a.jsx)(eL.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),lr(U,e.from,e.to)}})]}),(0,a.jsxs)(eJ.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Model Group"}),(0,a.jsx)(eS.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>lr(e,eE.from,eE.to),children:e},l))})]})]}),(0,a.jsxs)($.Z,{numItems:2,children:[(0,a.jsx)(eJ.Z,{children:(0,a.jsxs)(ef.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,a.jsx)(er.Z,{children:"Avg Latency per Token"}),(0,a.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,a.jsx)(es.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),q&&Y&&(0,a.jsx)(eG.Z,{title:"Model Latency",className:"h-72",data:q,showLegend:!1,index:"date",categories:Y,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:r}=e;if(!r||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,a.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,a.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,a.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,a.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,a.jsx)(eJ.Z,{children:(0,a.jsx)(ef.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Deployment"}),(0,a.jsx)(ek.Z,{children:"Success Responses"}),(0,a.jsxs)(ek.Z,{children:["Slow Responses ",(0,a.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,a.jsx)(e_.Z,{children:ej.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.api_base}),(0,a.jsx)(ew.Z,{children:e.total_count}),(0,a.jsx)(ew.Z,{children:e.slow_count})]},l))})]})})})]}),(0,a.jsxs)(ef.Z,{className:"mt-4",children:[(0,a.jsx)(er.Z,{children:"Exceptions per Model"}),(0,a.jsx)(eY.Z,{className:"h-72",data:ea,index:"model",categories:ec,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(es.Z,{children:"Filter by Public Model Name"}),(0,a.jsx)(eS.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,a.jsxs)(er.Z,{children:["Retry Policy for ",U]}),(0,a.jsx)(es.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e6&&(0,a.jsx)("table",{children:(0,a.jsx)("tbody",{children:Object.entries(e6).map((e,l)=>{var t;let[s,r]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[r];return null==n&&(n=eT),(0,a.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,a.jsx)("td",{children:(0,a.jsx)(es.Z,{children:s})}),(0,a.jsx)("td",{children:(0,a.jsx)(ed.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[r]:e}}})}})})]},l)})})}),(0,a.jsx)(X.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:le}=en.default;var ll=e=>{let{userID:l,accessToken:t,teams:s}=e,[r]=eo.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await N(t,l,"any"),s=[];for(let l=0;l{i(!1),r.resetFields()},p=()=>{i(!1),d(null),r.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),r.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,a.jsxs)(ei.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,a.jsx)(es.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,a.jsx)(es.Z,{className:"mb-6",children:(0,a.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,a.jsxs)(eo.Z,{form:r,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsx)(eo.Z.Item,{label:"User Email",name:"user_email",children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Team ID",name:"team_id",children:(0,a.jsx)(en.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,a.jsx)(le,{value:e.team_id,children:e.team_alias},e.team_id)):(0,a.jsx)(le,{value:null,children:"Default Team"},"default")})}),(0,a.jsx)(eo.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(ec.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,a.jsxs)(ei.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,a.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,a.jsx)("br",{}),(0,a.jsx)("p",{children:(0,a.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},lt=e=>{let{accessToken:l,token:t,keys:s,userRole:r,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[f,y]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!r||!o)return;let e=async()=>{try{let e=await Z(l,null,r,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&r&&o&&e()},[l,t,r,o,x]),d&&l&&t&&r&&o)?(0,a.jsx)("div",{style:{width:"100%"},children:(0,a.jsxs)($.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,a.jsx)(ll,{userID:o,accessToken:l,teams:i}),(0,a.jsxs)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,a.jsx)("div",{className:"mb-4 mt-1",children:(0,a.jsx)(es.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,a.jsx)(eD.Z,{children:(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsxs)(eZ.Z,{className:"mt-5",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"User ID"}),(0,a.jsx)(ek.Z,{children:"User Email"}),(0,a.jsx)(ek.Z,{children:"User Models"}),(0,a.jsx)(ek.Z,{children:"User Spend ($ USD)"}),(0,a.jsx)(ek.Z,{children:"User Max Budget ($ USD)"}),(0,a.jsx)(ek.Z,{children:"User API Key Aliases"})]})}),(0,a.jsx)(e_.Z,{children:d.map(e=>{var l;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.user_id}),(0,a.jsx)(ew.Z,{children:e.user_email}),(0,a.jsx)(ew.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,a.jsx)(ew.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,a.jsx)(ew.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)($.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,a.jsx)(eg.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,a.jsx)(eg.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("div",{className:"flex-1"}),(0,a.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,a.jsxs)("div",{className:"flex justify-between items-center",children:[(0,a.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,a.jsx)("div",{children:"Loading..."})},ls=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:r,userID:o,userRole:i}=e,[c]=eo.Z.useForm(),[d]=eo.Z.useForm(),{Title:m,Paragraph:h}=eR.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[f,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let a=await U(s,e);l&&r(l.map(e=>e.team_id===t?a.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await y(s,C);let e=l.filter(e=>e.team_id!==C);r(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let r=l[t].team_id,a=await _(s,r);console.log("teamInfo response:",a),null!==a&&(e={...e,[r]:a})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await N(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let a=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(a))throw Error("Team alias ".concat(a," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?r([...l,n]):r([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},a=await K(s,f.team_id,t);console.log("response for team create call: ".concat(a.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(a.data.team_id)),e.team_id===a.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=a.data,r(e),Z(a.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"All Teams"}),(0,a.jsxs)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Team Name"}),(0,a.jsx)(ek.Z,{children:"Spend (USD)"}),(0,a.jsx)(ek.Z,{children:"Budget (USD)"}),(0,a.jsx)(ek.Z,{children:"Models"}),(0,a.jsx)(ek.Z,{children:"TPM / RPM Limits"}),(0,a.jsx)(ek.Z,{children:"Info"})]})}),(0,a.jsx)(e_.Z,{children:l&&l.length>0?l.map(e=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,a.jsx)(ew.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})},l):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,a.jsxs)(es.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsxs)(es.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,a.jsxs)(es.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>F(e)}),(0,a.jsx)(ey.Z,{onClick:()=>L(e.team_id),icon:ej.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(X.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(X.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,a.jsx)(ei.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,a.jsxs)(eo.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(en.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,a.jsx)(en.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(eo.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"Team Members"}),(0,a.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,a.jsx)(eS.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(eN.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,a.jsxs)(h,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Member Name"}),(0,a.jsx)(ek.Z,{children:"Role"})]})}),(0,a.jsx)(e_.Z,{children:f?f.members_with_roles.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ew.Z,{children:e.role})]},l)):null})]})}),f&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:r}=e,[n]=eo.Z.useForm();return(0,a.jsx)(ei.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(eo.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(Q.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(en.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,a.jsx)(en.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(eo.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:f,onSubmit:R})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(X.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,a.jsx)(ei.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,a.jsxs)(eo.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(eo.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},lr=t(18190),la=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:r}=e,[o]=eo.Z.useForm(),[i]=eo.Z.useForm(),{Title:c,Paragraph:d}=eR.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[f,y]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},N=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let A=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,a.jsxs)(eo.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(eo.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,a.jsxs)(eo.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eS.Z,{value:l,children:N.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,children:e},l))})}),(0,a.jsx)(eo.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,a.jsx)(ec.Z,{value:t,disabled:!0})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),y(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&W(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,a.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,a.jsx)(c,{level:4,children:"Admin Access "}),(0,a.jsxs)(d,{children:[r&&(0,a.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsx)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Member Name"}),(0,a.jsx)(ek.Z,{children:"Role"})]})}),(0,a.jsx)(e_.Z,{children:x?x.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ew.Z,{children:e.user_role}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>_(!0)}),(0,a.jsx)(ei.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:A,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)("div",{className:"flex justify-start",children:[(0,a.jsx)(X.Z,{className:"mr-4 mb-5",onClick:()=>y(!0),children:"+ Add admin"}),(0,a.jsx)(ei.Z,{title:"Add admin",visible:f,width:800,footer:null,onOk:()=>{y(!1),i.resetFields()},onCancel:()=>{y(!1),i.resetFields()},children:I(O)}),(0,a.jsx)(X.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,a.jsx)(ei.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,a.jsxs)($.Z,{children:[(0,a.jsx)(c,{level:4,children:"Add SSO"}),(0,a.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,a.jsx)(X.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,a.jsx)(ei.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,a.jsxs)(eo.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,a.jsx)(ec.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,a.jsx)(ec.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,a.jsx)(ec.Z.Password,{})}),(0,a.jsx)(eo.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,a.jsx)(ec.Z.Password,{})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,a.jsxs)(ei.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,a.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{onClick:S,children:"Done"})})]})]}),(0,a.jsxs)(lr.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,a.jsxs)("a",{href:l,target:"_blank",children:[(0,a.jsx)("b",{children:l})," "]})]})]})]})},ln=t(42556);let lo=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var li=e=>{let{accessToken:l,userRole:t,userID:s}=e,[r,o]=(0,n.useState)(lo),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=eo.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[f,y]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&V(l,s,t).then(e=>{console.log("callbacks",e);let l=lo;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),y(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),N=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{W(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},A=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){W(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),W(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),W(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(r?[...r,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(r)),(0,a.jsxs)("div",{className:"w-full mx-4",children:[(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(lr.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eK.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eU.Z,{value:"1",children:"Logging Callbacks"}),(0,a.jsx)(eU.Z,{value:"2",children:"Alerting"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Callback"}),(0,a.jsx)(ek.Z,{children:"Callback Env Vars"})]})}),(0,a.jsx)(e_.Z,{children:r.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:(0,a.jsx)(eg.Z,{color:"emerald",children:e.name})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,a.jsxs)("li",{children:[(0,a.jsx)(es.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,a.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,a.jsx)("div",{}),(0,a.jsx)(Q.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,a.jsx)(X.Z,{className:"mt-2",onClick:()=>N(e),children:"Save Changes"}),(0,a.jsx)(X.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsxs)(es.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,a.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{}),(0,a.jsx)(ek.Z,{}),(0,a.jsx)(ek.Z,{children:"Slack Webhook URL"})]})}),(0,a.jsx)(e_.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ln.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:s})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(Q.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:f})})]},l)})})]}),(0,a.jsx)(X.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,r=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",r);let a=(null==r?void 0:r.value)||"";console.log("newWebhookValue",a),e[t]=a}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{W(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,a.jsx)(X.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,a.jsx)(ei.Z,{title:"Add Callback",visible:d,onOk:A,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,a.jsxs)(eo.Z,{form:h,layout:"vertical",onFinish:A,children:[(0,a.jsx)(eo.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,a.jsxs)(en.default,{onChange:e=>{p(e)},children:[(0,a.jsx)(en.default.Option,{value:"langfuse",children:"langfuse"}),(0,a.jsx)(en.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,a.jsx)(Q.Z,{type:"password"})}),(0,a.jsx)(eo.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,a.jsx)(Q.Z,{type:"password"})})]}),"openmeter"==x&&(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(eo.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,a.jsx)(Q.Z,{type:"password"})})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:lc}=en.default;var ld=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:r}=e,[o]=eo.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,a.jsxs)("div",{children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,a.jsx)(ei.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,a.jsxs)(eo.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:a}=e,n=[...s.fallbacks||[],{[l]:a}],i={...s,fallbacks:n};console.log(i);try{W(t,{router_settings:i}),r(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,a.jsx)(eS.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,a.jsx)(eo.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsx)(eV.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,a.jsx)(eq.Z,{value:e,children:e},e))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},lm=t(12968);async function lu(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new lm.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,a.jsxs)("span",{children:["Test model=",(0,a.jsx)("strong",{children:e}),", received model=",(0,a.jsx)("strong",{children:l.model}),". See"," ",(0,a.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let lh={ttl:3600,lowest_latency_buffer:0},lx=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,a.jsxs)(ee.Z,{children:[(0,a.jsx)(et.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,a.jsx)(el.Z,{children:"latency-based-routing"==l?(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Setting"}),(0,a.jsx)(ek.Z,{children:"Value"})]})}),(0,a.jsx)(e_.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(es.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(Q.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,a.jsx)(es.Z,{children:"No specific settings"})})]})};var lp=e=>{let{accessToken:l,userRole:t,userID:s,modelData:r}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)({}),[m,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1),[j]=eo.Z.useForm(),[g,f]=(0,n.useState)(null),[y,Z]=(0,n.useState)(null),[_,w]=(0,n.useState)(null),b={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&(V(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)}),q(l).then(e=>{h(e)}))},[l,t,s]);let k=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await W(l,{router_settings:o}),i({...o}),Z(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},v=(e,l)=>{h(m.map(t=>t.field_name===e?{...t,field_value:l}:t))},S=(e,t)=>{if(!l)return;let s=m[t].field_value;if(null!=s&&void 0!=s)try{G(l,e,s);let t=m.map(l=>l.field_name===e?{...l,stored_in_db:!0}:l);h(t)}catch(e){}},N=(e,t)=>{if(l)try{Y(l,e);let t=m.map(l=>l.field_name===e?{...l,stored_in_db:null,field_value:null}:l);h(t)}catch(e){}},A=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,y];if("routing_strategy_args"==l&&"latency-based-routing"==y){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{W(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)(eD.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eK.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eU.Z,{value:"1",children:"Loadbalancing"}),(0,a.jsx)(eU.Z,{value:"2",children:"Fallbacks"}),(0,a.jsx)(eU.Z,{value:"3",children:"General"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(er.Z,{children:"Router Settings"}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Setting"}),(0,a.jsx)(ek.Z,{children:"Value"})]})}),(0,a.jsx)(e_.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(es.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:b[l]})]}),(0,a.jsx)(ew.Z,{children:"routing_strategy"==l?(0,a.jsxs)(eS.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:Z,children:[(0,a.jsx)(eN.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,a.jsx)(eN.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,a.jsx)(eN.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,a.jsx)(Q.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,a.jsx)(lx,{selectedStrategy:y,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:lh,paramExplanation:b})]}),(0,a.jsx)(H.Z,{children:(0,a.jsx)(X.Z,{className:"mt-2",onClick:()=>A(o),children:"Save Changes"})})]})}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Model Name"}),(0,a.jsx)(ek.Z,{children:"Fallbacks"})]})}),(0,a.jsx)(e_.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,r]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:s}),(0,a.jsx)(ew.Z,{children:Array.isArray(r)?r.join(", "):r}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(X.Z,{onClick:()=>lu(s,l),children:"Test Fallback"})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ey.Z,{icon:ej.Z,size:"sm",onClick:()=>k(s)})})]},t.toString()+s)}))})]}),(0,a.jsx)(ld,{models:(null==r?void 0:r.data)?r.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]}),(0,a.jsx)(eB.Z,{children:(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Setting"}),(0,a.jsx)(ek.Z,{children:"Value"}),(0,a.jsx)(ek.Z,{children:"Status"}),(0,a.jsx)(ek.Z,{children:"Action"})]})}),(0,a.jsx)(e_.Z,{children:m.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(es.Z,{children:e.field_name}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:e.field_description})]}),(0,a.jsx)(ew.Z,{children:"Integer"==e.field_type?(0,a.jsx)(ed.Z,{step:1,value:e.field_value,onChange:l=>v(e.field_name,l)}):null}),(0,a.jsx)(ew.Z,{children:!0==e.stored_in_db?(0,a.jsx)(eg.Z,{icon:eQ.Z,className:"text-white",children:"In DB"}):!1==e.stored_in_db?(0,a.jsx)(eg.Z,{className:"text-gray bg-white outline",children:"In Config"}):(0,a.jsx)(eg.Z,{className:"text-gray bg-white outline",children:"Not Set"})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(X.Z,{onClick:()=>S(e.field_name,l),children:"Update"}),(0,a.jsx)(ey.Z,{icon:ej.Z,color:"red",onClick:()=>N(e.field_name,l),children:"Reset"})]})]},l))})]})})})]})]})}):null},lj=t(67951),lg=e=>{let{}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)($.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsxs)("div",{className:"mb-5",children:[(0,a.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,a.jsx)(es.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eK.Z,{children:[(0,a.jsx)(eU.Z,{children:"OpenAI Python SDK"}),(0,a.jsx)(eU.Z,{children:"LlamaIndex"}),(0,a.jsx)(eU.Z,{children:"Langchain Py"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsx)(lj.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,a.jsx)(eB.Z,{children:(0,a.jsx)(lj.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,a.jsx)(eB.Z,{children:(0,a.jsx)(lj.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lf(e,l,t,s){console.log("isLocal:",!1);let r=window.location.origin,a=new lm.ZP.OpenAI({apiKey:s,baseURL:r,dangerouslyAllowBrowser:!0});try{for await(let s of(await a.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var ly=e=>{let{accessToken:l,token:t,userRole:s,userID:r}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{let e=await N(l,r,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,r,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},f=async()=>{if(""!==c.trim()&&o&&t&&s&&r){u(e=>[...e,{role:"user",content:c}]);try{h&&await lf(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eR.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,a.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,a.jsx)($.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eK.Z,{children:(0,a.jsx)(eU.Z,{children:"Chat"})}),(0,a.jsx)(ez.Z,{children:(0,a.jsxs)(eB.Z,{children:[(0,a.jsx)("div",{className:"sm:max-w-2xl",children:(0,a.jsxs)($.Z,{numItems:2,children:[(0,a.jsxs)(H.Z,{children:[(0,a.jsx)(es.Z,{children:"API Key"}),(0,a.jsx)(Q.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,a.jsxs)(H.Z,{className:"mx-2",children:[(0,a.jsx)(es.Z,{children:"Select Model:"}),(0,a.jsx)(en.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,a.jsxs)(eZ.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,a.jsx)(eb.Z,{children:(0,a.jsx)(ev.Z,{children:(0,a.jsx)(ew.Z,{})})}),(0,a.jsx)(e_.Z,{children:m.map((e,l)=>(0,a.jsx)(ev.Z,{children:(0,a.jsx)(ew.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,a.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(Q.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,a.jsx)(X.Z,{onClick:f,className:"ml-2",children:"Send"})]})})]})})]})})})})},lZ=t(33509),l_=t(95781);let{Sider:lw}=lZ.default;var lb=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,a.jsx)(lZ.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,a.jsx)(lw,{width:120,children:(0,a.jsxs)(l_.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(l_.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,a.jsx)(lZ.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,a.jsx)(lw,{width:145,children:(0,a.jsxs)(l_.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(l_.Z.Item,{onClick:()=>l("api-keys"),children:(0,a.jsx)(es.Z,{children:"API Keys"})},"1"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("llm-playground"),children:(0,a.jsx)(es.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("models"),children:(0,a.jsx)(es.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("usage"),children:(0,a.jsx)(es.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("teams"),children:(0,a.jsx)(es.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("users"),children:(0,a.jsx)(es.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("settings"),children:(0,a.jsx)(es.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("general-settings"),children:(0,a.jsx)(es.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("admin-panel"),children:(0,a.jsx)(es.Z,{children:"Admin"})},"7"):null,(0,a.jsx)(l_.Z.Item,{onClick:()=>l("api_ref"),children:(0,a.jsx)(es.Z,{children:"API Reference"})},"11")]})})})},lk=t(67989),lv=e=>{let{accessToken:l,token:t,userRole:s,userID:r,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,f]=(0,n.useState)([]),[y,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[N,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=z(M),D=z(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let r=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",r),j(r)},B=async(e,t)=>{e&&t&&l&&(Z((await E(l,e.toISOString(),t.toISOString())).spend_per_tag),console.log("Tag spend data updated successfully"))};function z(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){var e,a;let t=await C(l);d(t);let s=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(s);let r=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(r);let n=await A(l);console.log("teamSpend",n),f(n.daily_spend),w(n.teams);let o=n.total_spend_per_team;o=o.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(o);let i=await E(l,null===(e=N.from)||void 0===e?void 0:e.toISOString(),null===(a=N.to)||void 0===a?void 0:a.toISOString());Z(i.spend_per_tag);let c=await T(l,null,void 0,void 0);j(c),console.log("spend/user result",c)}else"App Owner"==s&&await I(l,t,s,r,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,r,U,D]),(0,a.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,a.jsx)(eP,{userID:r,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eK.Z,{className:"mt-2",children:[(0,a.jsx)(eU.Z,{children:"All Up"}),(0,a.jsx)(eU.Z,{children:"Team Based Usage"}),(0,a.jsx)(eU.Z,{children:"End User Usage"}),(0,a.jsx)(eU.Z,{children:"Tag Based Usage"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsx)(H.Z,{numColSpan:2,children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Monthly Spend"}),(0,a.jsx)(eY.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Top API Keys"}),(0,a.jsx)(eY.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Top Models"}),(0,a.jsx)(eY.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(H.Z,{numColSpan:1})]})}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsxs)(H.Z,{numColSpan:2,children:[(0,a.jsxs)(ef.Z,{className:"mb-2",children:[(0,a.jsx)(er.Z,{children:"Total Spend Per Team"}),(0,a.jsx)(lk.Z,{data:b})]}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Daily Spend Per Team"}),(0,a.jsx)(eY.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,a.jsx)(H.Z,{numColSpan:2})]})}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,a.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,a.jsxs)($.Z,{numItems:2,children:[(0,a.jsxs)(H.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Time Range"}),(0,a.jsx)(eL.Z,{enableSelect:!0,value:N,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,a.jsxs)(H.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Key"}),(0,a.jsxs)(eS.Z,{defaultValue:"all-keys",children:[(0,a.jsx)(eN.Z,{value:"all-keys",onClick:()=>{K(N.from,N.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,a.jsx)(eN.Z,{value:String(l),onClick:()=>{K(N.from,N.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,a.jsx)(ef.Z,{className:"mt-4",children:(0,a.jsxs)(eZ.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"End User"}),(0,a.jsx)(ek.Z,{children:"Spend"}),(0,a.jsx)(ek.Z,{children:"Total Events"})]})}),(0,a.jsx)(e_.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.end_user}),(0,a.jsx)(ew.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,a.jsx)(ew.Z,{children:e.total_count})]},l)})})]})})]}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,a.jsxs)(H.Z,{numColSpan:2,children:[(0,a.jsx)(eL.Z,{className:"mb-4",enableSelect:!0,value:N,onValueChange:e=>{R(e),B(e.from,e.to)}}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Spend Per Tag"}),(0,a.jsxs)(es.Z,{children:["Get Started Tracking cost per tag ",(0,a.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,a.jsx)(eY.Z,{className:"h-72",data:y,index:"name",categories:["spend"],colors:["blue"]})]})]}),(0,a.jsx)(H.Z,{numColSpan:2})]})})]})]})]})},lS=()=>{let{Title:e,Paragraph:l}=eR.default,[t,s]=(0,n.useState)(""),[r,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,f]=(0,n.useState)({data:[]}),y=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eF.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{children:"Loading..."}),children:(0,a.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,a.jsx)(m,{userID:y,userRole:t,userEmail:r,showSSOBanner:x}),(0,a.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,a.jsx)("div",{className:"mt-8",children:(0,a.jsx)(lb,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,a.jsx)(eM,{userID:y,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:r,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,a.jsx)(e9,{userID:y,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:f}):"llm-playground"==_?(0,a.jsx)(ly,{userID:y,userRole:t,token:Z,accessToken:b}):"users"==_?(0,a.jsx)(lt,{userID:y,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,a.jsx)(ls,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:y,userRole:t}):"admin-panel"==_?(0,a.jsx)(la,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,a.jsx)(lg,{}):"settings"==_?(0,a.jsx)(li,{userID:y,userRole:t,accessToken:b}):"general-settings"==_?(0,a.jsx)(lp,{userID:y,userRole:t,accessToken:b,modelData:g}):(0,a.jsx)(lv,{userID:y,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/index.html b/litellm/proxy/_experimental/out/index.html index 930018e0059..011bb7fc768 100644 --- a/litellm/proxy/_experimental/out/index.html +++ b/litellm/proxy/_experimental/out/index.html @@ -1 +1 @@ -LiteLLM Dashboard \ No newline at end of file +LiteLLM Dashboard \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/index.txt b/litellm/proxy/_experimental/out/index.txt index d67a480b373..ce4099b2cd4 100644 --- a/litellm/proxy/_experimental/out/index.txt +++ b/litellm/proxy/_experimental/out/index.txt @@ -1,7 +1,7 @@ 2:I[77831,[],""] -3:I[7926,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-6a39771cacf75ea6.js"],""] +3:I[4858,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-c35c14c9afd091ec.js"],""] 4:I[5613,[],""] 5:I[31778,[],""] -0:["obp5wqVSVDMiDTC414cR8",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/f04e46b02318b660.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] +0:["2ASoJGxS-D4w-vat00xMy",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/f04e46b02318b660.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] 6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"LiteLLM Dashboard"}],["$","meta","3",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","4",{"rel":"icon","href":"/ui/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","meta","5",{"name":"next-size-adjust"}]] 1:null diff --git a/ui/litellm-dashboard/out/404.html b/ui/litellm-dashboard/out/404.html index b70559084d4..b0b75d094b2 100644 --- a/ui/litellm-dashboard/out/404.html +++ b/ui/litellm-dashboard/out/404.html @@ -1 +1 @@ -404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js b/ui/litellm-dashboard/out/_next/static/2ASoJGxS-D4w-vat00xMy/_buildManifest.js similarity index 100% rename from ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_buildManifest.js rename to ui/litellm-dashboard/out/_next/static/2ASoJGxS-D4w-vat00xMy/_buildManifest.js diff --git a/ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js b/ui/litellm-dashboard/out/_next/static/2ASoJGxS-D4w-vat00xMy/_ssgManifest.js similarity index 100% rename from ui/litellm-dashboard/out/_next/static/obp5wqVSVDMiDTC414cR8/_ssgManifest.js rename to ui/litellm-dashboard/out/_next/static/2ASoJGxS-D4w-vat00xMy/_ssgManifest.js diff --git a/ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js b/ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js deleted file mode 100644 index 7d08a80c96f..00000000000 --- a/ui/litellm-dashboard/out/_next/static/chunks/app/page-6a39771cacf75ea6.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,7926))},7926:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lb}});var s,a,r=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:a}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",a);let n=[{key:"1",label:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{children:["Role: ",t]}),(0,r.jsxs)("p",{children:["ID: ",l]})]})}];return(0,r.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,r.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,r.jsx)("div",{className:"flex flex-col items-center",children:(0,r.jsx)(i.default,{href:"/",children:(0,r.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,r.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,r.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[a?(0,r.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,r.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,r.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,r.jsx)(c.Z,{menu:{items:n},children:(0,r.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&r&&null!=a&&void 0!=a&&(n="".concat(n,"?view_all=true&page=").concat(a,"&page_size=").concat(r));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,a,r)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,a,r)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(a,"&endTime=").concat(r));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l,t)=>{try{let s="/global/spend/tags";l&&t&&(s="".concat(s,"?start_date=").concat(l,"&end_date=").concat(t)),console.log("in tagsSpendLogsCall:",s);let a=await fetch("".concat(s),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,a,r)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(a,"&end_date=").concat(r):"".concat(l,"?start_date=").concat(a,"&end_date=").concat(r);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let a="";a=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let r={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};r.body=a;let n=await fetch("/global/spend/end_users",r);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let a=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!a.ok){let e=await a.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let a=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),a}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},G=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var Y=t(10384),W=t(46453),J=t(16450),H=t(52273),$=t(26780),X=t(15595),Q=t(6698),ee=t(71801),el=t(42440),et=t(42308),es=t(50670),ea=t(81583),er=t(99129),en=t(44839),eo=t(88707),ei=t(1861);let{Option:ec}=es.default;var ed=e=>{let{userID:l,team:t,userRole:s,accessToken:a,data:o,setData:i}=e,[c]=ea.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,f]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==a){let e=(await N(a,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),f(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,s]);let k=async e=>{try{var t,s,r;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(r=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==r?r:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(a,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?y:t.models:y)},[t,y]),(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,r.jsx)(er.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,r.jsxs)(ea.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,r.jsx)(ec,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,r.jsx)(ec,{value:e,children:e},e))]})}),(0,r.jsxs)($.Z,{className:"mt-20 mb-8",children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)("b",{children:"Optional Settings"})}),(0,r.jsxs)(X.Z,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,r.jsxs)(es.default,{defaultValue:null,placeholder:"n/a",children:[(0,r.jsx)(es.default.Option,{value:"24h",children:"daily"}),(0,r.jsx)(es.default.Option,{value:"30d",children:"monthly"})]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,r.jsx)(er.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Save your Key"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,r.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:null!=h?(0,r.jsxs)("div",{children:[(0,r.jsx)(ee.Z,{className:"mt-3",children:"API Key:"}),(0,r.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,r.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,r.jsx)(et.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,r.jsx)(J.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,r.jsx)(ee.Z,{children:"Key being created, this might take 30s"})})]})})]})},em=t(9454),eu=t(98941),eh=t(33393),ex=t(5),ep=t(13810),ej=t(61244),eg=t(10827),ey=t(3851),ef=t(2044),eZ=t(64167),e_=t(74480),ew=t(7178),eb=t(95093),ek=t(27166);let{Option:ev}=es.default;var eS=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:a,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,r.jsxs)("div",{children:[(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,r.jsxs)(eg.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Key Alias"}),(0,r.jsx)(e_.Z,{children:"Secret Key"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"})]})}),(0,r.jsx)(ey.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(a){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(a.team_id)),(null!=a.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=a.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,r.jsx)(ee.Z,{children:e.key_alias}):(0,r.jsx)(ee.Z,{children:"Not Set"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.key_name})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,r.jsx)(ef.Z,{children:null!=e.max_budget?(0,r.jsx)(ee.Z,{children:e.max_budget}):(0,r.jsx)(ee.Z,{children:"Unlimited"})}),(0,r.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(r.Fragment,{children:a&&a.models&&a.models.length>0?a.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Team Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{onClick:()=>{I(e),A(!0)},icon:em.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:S,onCancel:()=>{A(!1),I(null)},footer:null,width:800,children:E&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,r.jsx)(r.Fragment,{children:E.max_budget}):(0,r.jsx)(r.Fragment,{children:"Unlimited"})})})]},e.name),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,r.jsx)(r.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,r.jsx)(r.Fragment,{children:"Never"})})})]},e.name)]}),(0,r.jsxs)(ep.Z,{className:"my-4",children:[(0,r.jsx)(el.Z,{children:"Token Name"}),(0,r.jsx)(ee.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,r.jsx)(el.Z,{children:"Token ID"}),(0,r.jsx)(ee.Z,{className:"my-1 text-[12px]",children:E.token}),(0,r.jsx)(el.Z,{children:"Metadata"}),(0,r.jsx)(ee.Z,{className:"my-1",children:(0,r.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,r.jsx)(J.Z,{className:"mx-auto flex items-center",onClick:()=>{A(!1),I(null)},children:"Close"})]})}),(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>R(e)}),(0,r.jsx)(ej.Z,{onClick:()=>U(e),icon:eh.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=ea.Z.useForm(),[d,m]=(0,n.useState)(a),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,r.jsx)(er.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(ev,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):d.models.map(e=>(0,r.jsx)(ev,{value:e,children:e},e)):C.map(e=>(0,r.jsx)(ev,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"token",name:"token",hidden:!0}),(0,r.jsx)(ea.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,r.jsx)(eb.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,r.jsx)(ek.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eN=t(76032),eA=t(35152),eE=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:a,selectedTeam:o}=e;console.log("userSpend: ".concat(a));let[i,c]=(0,n.useState)(null!==a?a:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==a)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==a&&c(a)},[a]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,r.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,r.jsx)("div",{className:"ml-auto",children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Team Models"})}),(0,r.jsx)(X.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,r.jsx)(eN.Z,{children:x.map(e=>(0,r.jsx)(eA.Z,{children:(0,r.jsx)(ee.Z,{children:e})},e))})})]})})]})},eI=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:a}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==a){let e=(await N(a,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"mb-5",children:(0,r.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eC=e=>{let l,{teams:t,setSelectedTeam:s,userRole:a}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===a?t:t?[...t,o]:[o],"App User"===a)?null:(0,r.jsxs)("div",{className:"mt-5 mb-5",children:[(0,r.jsx)(el.Z,{children:"Select Team"}),(0,r.jsx)(ee.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,r.jsxs)(ee.Z,{className:"mt-3 mb-3",children:[(0,r.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,r.jsxs)(ee.Z,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]})},eP=t(37963),eT=t(36083);console.log("isLocal:",!1);var eO=e=>{let{userID:l,userRole:t,teams:s,keys:a,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[f,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,A]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eP.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!a&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),A(s[0])):A(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let a=(await N(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",a),k(a),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(a))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,a,t]),(0,n.useEffect)(()=>{if(null!==a&&null!=S){let e=0;for(let l of a)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==a){let e=0;for(let l of a)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(f)),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsx)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(eI,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,r.jsx)(eE,{userID:l,userRole:t,accessToken:g,userSpend:f,selectedTeam:S||null}),(0,r.jsx)(eS,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:a,setData:u,teams:s}),(0,r.jsx)(ed,{userID:l,team:S||null,userRole:t,accessToken:g,data:a,setData:u},S?S.team_id:null),(0,r.jsx)(eC,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eF=t(35087),eR=t(92836),eM=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),eK=t(47047),eB=t(76628),ez=t(57750),eq=t(44041),eV=t(38302),eG=t(28683),eY=t(1460),eW=t(78578),eJ=t(63954),eH=t(90252),e$=t(7905),eX=e=>{let{modelID:l,accessToken:t}=e,[s,a]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),a(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),a(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(ej.Z,{onClick:()=>a(!0),icon:eh.Z,size:"sm"}),(0,r.jsx)(er.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>a(!1),children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(el.Z,{children:"Delete Model"}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Model ID: ",(0,r.jsx)("b",{children:l})]})})]})})]})},eQ=t(97766),e0=t(46495);let{Title:e1,Link:e2}=eT.default;(s=a||(a={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e4={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e8={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e5=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},a={};s.model=t;let r="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)r+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)a[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:r,litellm_params:s,model_info:a},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e3=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=ea.Z.useForm(),[y,f]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,N]=(0,n.useState)([]),A=Object.values(a).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[Y,et]=(0,n.useState)([]),[es,en]=(0,n.useState)([]),[ec,ed]=(0,n.useState)([]),[em,eh]=(0,n.useState)([]),[ev,eS]=(0,n.useState)([]),[eN,eA]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eO,e3]=(0,n.useState)(0),e6=e=>{R(e),O(!0)},e7=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,a]of Object.entries(e))"model_id"!==s?l[s]=a:t=a;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await V(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,a,r;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),et(h.data),en(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),ed(p.data),eh(p.exception_types);let j=await v(o,d,c,u,null===(a=eE.from)||void 0===a?void 0:a.toISOString(),null===(r=eE.to)||void 0===r?void 0:r.toISOString());console.log("slowResponses:",j),eA(j);let g=(await q(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let y=g.model_group_retry_policy,f=g.num_retries;console.log("model_group_retry_policy:",y),console.log("default_retries:",f),eP(y),e3(f)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==y&&l(),e9()},[o,i,c,d,y,Z]),!m||!o||!i||!c||!d)return(0,r.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(y)),null!=y&&"object"==typeof y&&e in y)?y[e].litellm_provider:"openai";if(a){let e=a.split("/"),l=e[0];n=1===e.length?u(a):l}else n="openai";r&&(o=null==r?void 0:r.input_cost_per_token,i=null==r?void 0:r.output_cost_per_token,c=null==r?void 0:r.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(a).find(l=>a[l]===e);if(l){let e=e4[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof y&&Object.entries(y).forEach(l=>{let[s,a]=l;null!==a&&"object"==typeof a&&"litellm_provider"in a&&(a.litellm_provider===e||a.litellm_provider.includes(e))&&t.push(s)}),N(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await G(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},la=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),et(s.data),en(s.all_api_bases);let a=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",a),ed(a.data),eh(a.exception_types);let r=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",r),eA(r)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,r.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(eR.Z,{children:"All Models"}),(0,r.jsx)(eR.Z,{children:"Add Model"}),(0,r.jsx)(eR.Z,{children:(0,r.jsx)("pre",{children:"/health Models"})}),(0,r.jsx)(eR.Z,{children:"Model Analytics"}),(0,r.jsx)(eR.Z,{children:"Model Retry Settings"})]}),(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,r.jsxs)(ee.Z,{children:["Last Refreshed: ",Z]}),(0,r.jsx)(ej.Z,{icon:eJ.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsxs)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,r.jsx)(ek.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Public Model Name "}),(0,r.jsx)(e_.Z,{children:"Provider"}),"Admin"===c&&(0,r.jsx)(e_.Z,{children:"API Base"}),(0,r.jsx)(e_.Z,{children:"Extra litellm Params"}),(0,r.jsx)(e_.Z,{children:"Input Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Output Price per token ($)"}),(0,r.jsx)(e_.Z,{children:"Max Tokens"}),(0,r.jsx)(e_.Z,{children:"Status"})]})}),(0,r.jsx)(ey.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:e.model_name})}),(0,r.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{children:(0,r.jsx)(ee.Z,{children:"Litellm params"})}),(0,r.jsx)(X.Z,{children:(0,r.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,r.jsx)(ef.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,r.jsx)(ef.Z,{children:e.max_tokens}),(0,r.jsx)(ef.Z,{children:e.model_info.db_model?(0,r.jsx)(ex.Z,{icon:eH.Z,className:"text-white",children:"DB Model"}):(0,r.jsx)(ex.Z,{icon:e$.Z,className:"text-black",children:"Config Model"})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>e6(e)}),(0,r.jsx)(eX,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,r.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:a}=e,[n]=ea.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,r.jsx)(er.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:e7,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"max_retries",name:"max_retries",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,r.jsx)(eo.Z,{min:0,step:1})}),(0,r.jsx)(ea.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,r.jsx)(eo.Z,{min:0,step:1e-4})}),(0,r.jsx)(ea.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:e7})]}),(0,r.jsxs)(eU.Z,{className:"h-full",children:[(0,r.jsx)(e1,{level:2,children:"Add new model"}),(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(ea.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e5(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:E.toString(),children:A.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,r.jsx)(H.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,r.jsx)(H.Z,{placeholder:"Enter model name"}):w.length>0?(0,r.jsx)(eK.Z,{value:w,children:w.map((e,l)=>(0,r.jsx)(eB.Z,{value:e,children:e},l))}):(0,r.jsx)(H.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,r.jsx)(H.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,r.jsx)(ea.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,r.jsx)(H.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,r.jsx)(H.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,r.jsx)(e0.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,r.jsx)(ei.ZP,{icon:(0,r.jsx)(eQ.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsx)(ee.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,r.jsx)(H.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,r.jsx)(H.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,r.jsxs)(ea.Z.Item,{label:"Base Model",name:"base_model",children:[(0,r.jsx)(H.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,r.jsxs)(ee.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,r.jsx)(e2,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(H.Z,{placeholder:"us-east-1"})}),(0,r.jsx)(ea.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,r.jsx)(eW.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eG.Z,{span:10}),(0,r.jsx)(eG.Z,{span:10,children:(0,r.jsxs)(ee.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,r.jsx)(e2,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,r.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Model"})}),(0,r.jsx)(eY.Z,{title:"Get help on our github",children:(0,r.jsx)(eT.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(ee.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,r.jsx)(J.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,r.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(W.Z,{numItems:2,className:"mt-2",children:[(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),la(U,e.from,e.to)}})]}),(0,r.jsxs)(eG.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Model Group"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>la(e,eE.from,eE.to),children:e},l))})]})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsx)(eG.Z,{children:(0,r.jsxs)(ep.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,r.jsx)(el.Z,{children:"Avg Latency per Token"}),(0,r.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,r.jsx)(ee.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),Y&&es&&(0,r.jsx)(ez.Z,{title:"Model Latency",className:"h-72",data:Y,showLegend:!1,index:"date",categories:es,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:a}=e;if(!a||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,r.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,r.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,r.jsxs)("div",{className:"flex justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,r.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,r.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,r.jsx)(eG.Z,{children:(0,r.jsx)(ep.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Deployment"}),(0,r.jsx)(e_.Z,{children:"Success Responses"}),(0,r.jsxs)(e_.Z,{children:["Slow Responses ",(0,r.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,r.jsx)(ey.Z,{children:eN.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:e.total_count}),(0,r.jsx)(ef.Z,{children:e.slow_count})]},l))})]})})})]}),(0,r.jsxs)(ep.Z,{className:"mt-4",children:[(0,r.jsx)(el.Z,{children:"Exceptions per Model"}),(0,r.jsx)(eq.Z,{className:"h-72",data:ec,index:"model",categories:em,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ee.Z,{children:"Filter by Public Model Name"}),(0,r.jsx)(eb.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,r.jsxs)(el.Z,{children:["Retry Policy for ",U]}),(0,r.jsx)(ee.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e8&&(0,r.jsx)("table",{children:(0,r.jsx)("tbody",{children:Object.entries(e8).map((e,l)=>{var t;let[s,a]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[a];return null==n&&(n=eO),(0,r.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,r.jsx)("td",{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)("td",{children:(0,r.jsx)(eo.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[a]:e}}})}})})]},l)})})}),(0,r.jsx)(J.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:e6}=es.default;var e7=e=>{let{userID:l,accessToken:t,teams:s}=e,[a]=ea.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await N(t,l,"any"),s=[];for(let l=0;l{i(!1),a.resetFields()},p=()=>{i(!1),d(null),a.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),a.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,r.jsxs)(er.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,r.jsx)(ee.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,r.jsx)(ee.Z,{className:"mb-6",children:(0,r.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,r.jsxs)(ea.Z,{form:a,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsx)(ea.Z.Item,{label:"User Email",name:"user_email",children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"team_id",children:(0,r.jsx)(es.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,r.jsx)(e6,{value:e.team_id,children:e.team_alias},e.team_id)):(0,r.jsx)(e6,{value:null,children:"Default Team"},"default")})}),(0,r.jsx)(ea.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(en.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,r.jsxs)(er.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,r.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,r.jsx)("br",{}),(0,r.jsx)("p",{children:(0,r.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e9=e=>{let{accessToken:l,token:t,keys:s,userRole:a,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,f]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!a||!o)return;let e=async()=>{try{let e=await Z(l,null,a,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&a&&o&&e()},[l,t,a,o,x]),d&&l&&t&&a&&o)?(0,r.jsx)("div",{style:{width:"100%"},children:(0,r.jsxs)(W.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,r.jsx)(e7,{userID:o,accessToken:l,teams:i}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,r.jsx)("div",{className:"mb-4 mt-1",children:(0,r.jsx)(ee.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,r.jsx)(eM.Z,{children:(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(eg.Z,{className:"mt-5",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"User ID"}),(0,r.jsx)(e_.Z,{children:"User Email"}),(0,r.jsx)(e_.Z,{children:"User Models"}),(0,r.jsx)(e_.Z,{children:"User Spend ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User Max Budget ($ USD)"}),(0,r.jsx)(e_.Z,{children:"User API Key Aliases"})]})}),(0,r.jsx)(ey.Z,{children:d.map(e=>{var l;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_id}),(0,r.jsx)(ef.Z,{children:e.user_email}),(0,r.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,r.jsx)(ef.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,r.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(W.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,r.jsx)(ex.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,r.jsx)(ex.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,r.jsxs)("div",{className:"flex justify-between items-center",children:[(0,r.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,r.jsx)("div",{children:"Loading..."})},le=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:a,userID:o,userRole:i}=e,[c]=ea.Z.useForm(),[d]=ea.Z.useForm(),{Title:m,Paragraph:h}=eT.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let r=await U(s,e);l&&a(l.map(e=>e.team_id===t?r.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await f(s,C);let e=l.filter(e=>e.team_id!==C);a(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let a=l[t].team_id,r=await _(s,a);console.log("teamInfo response:",r),null!==r&&(e={...e,[a]:r})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await N(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let r=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(r))throw Error("Team alias ".concat(r," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?a([...l,n]):a([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},r=await K(s,y.team_id,t);console.log("response for team create call: ".concat(r.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(r.data.team_id)),e.team_id===r.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=r.data,a(e),Z(r.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"All Teams"}),(0,r.jsxs)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Team Name"}),(0,r.jsx)(e_.Z,{children:"Spend (USD)"}),(0,r.jsx)(e_.Z,{children:"Budget (USD)"}),(0,r.jsx)(e_.Z,{children:"Models"}),(0,r.jsx)(e_.Z,{children:"TPM / RPM Limits"}),(0,r.jsx)(e_.Z,{children:"Info"})]})}),(0,r.jsx)(ey.Z,{children:l&&l.length>0?l.map(e=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,r.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(ee.Z,{children:"All Proxy Models"})},l):(0,r.jsx)(ex.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(ee.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,r.jsxs)(ee.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,r.jsxs)(ee.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>F(e)}),(0,r.jsx)(ej.Z,{onClick:()=>L(e.team_id),icon:eh.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(J.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(J.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,r.jsx)(er.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{placeholder:""})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"Team Members"}),(0,r.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,r.jsx)(eb.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,r.jsxs)(h,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:y?y.members_with_roles.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:a}=e,[n]=ea.Z.useForm();return(0,r.jsx)(er.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(ea.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(H.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(es.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(es.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,r.jsx)(es.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(ea.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(eo.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(ea.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(eo.Z,{step:1,width:400})}),(0,r.jsx)(ea.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:y,onSubmit:R})]}),(0,r.jsxs)(Y.Z,{numColSpan:1,children:[(0,r.jsx)(J.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,r.jsx)(er.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,r.jsxs)(ea.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},ll=t(18190),lt=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:a}=e,[o]=ea.Z.useForm(),[i]=ea.Z.useForm(),{Title:c,Paragraph:d}=eT.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},N=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let A=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(ea.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(en.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,r.jsxs)(ea.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(eb.Z,{value:l,children:N.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,r.jsx)(en.Z,{value:t,disabled:!0})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),f(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,r.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,r.jsx)(c,{level:4,children:"Admin Access "}),(0,r.jsxs)(d,{children:[a&&(0,r.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsx)(ep.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Member Name"}),(0,r.jsx)(e_.Z,{children:"Role"})]})}),(0,r.jsx)(ey.Z,{children:x?x.map((e,l)=>(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.user_role}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ej.Z,{icon:eu.Z,size:"sm",onClick:()=>_(!0)}),(0,r.jsx)(er.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:A,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)("div",{className:"flex justify-start",children:[(0,r.jsx)(J.Z,{className:"mr-4 mb-5",onClick:()=>f(!0),children:"+ Add admin"}),(0,r.jsx)(er.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{f(!1),i.resetFields()},onCancel:()=>{f(!1),i.resetFields()},children:I(O)}),(0,r.jsx)(J.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,r.jsx)(er.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,r.jsxs)(W.Z,{children:[(0,r.jsx)(c,{level:4,children:"Add SSO"}),(0,r.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,r.jsx)(J.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,r.jsx)(er.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,r.jsx)(en.Z,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,r.jsx)(en.Z.Password,{})}),(0,r.jsx)(ea.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,r.jsx)(en.Z.Password,{})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,r.jsxs)(er.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,r.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,r.jsx)(ee.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{onClick:S,children:"Done"})})]})]}),(0,r.jsxs)(ll.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,r.jsxs)("a",{href:l,target:"_blank",children:[(0,r.jsx)("b",{children:l})," "]})]})]})]})},ls=t(42556);let la=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var lr=e=>{let{accessToken:l,userRole:t,userID:s}=e,[a,o]=(0,n.useState)(la),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=ea.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[y,f]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e);let l=la;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),f(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),N=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{V(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},A=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(a?[...a,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),V(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(a?[...a,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(a)),(0,r.jsxs)("div",{className:"w-full mx-4",children:[(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(ll.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"Logging Callbacks"}),(0,r.jsx)(eR.Z,{value:"2",children:"Alerting"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Callback"}),(0,r.jsx)(e_.Z,{children:"Callback Env Vars"})]})}),(0,r.jsx)(ey.Z,{children:a.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ex.Z,{color:"emerald",children:e.name})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,r.jsxs)("li",{children:[(0,r.jsx)(ee.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,r.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,r.jsx)("div",{}),(0,r.jsx)(H.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>N(e),children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(ee.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,r.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{}),(0,r.jsx)(e_.Z,{children:"Slack Webhook URL"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ls.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ee.Z,{children:s})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:y})})]},l)})})]}),(0,r.jsx)(J.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,a=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",a);let r=(null==a?void 0:a.value)||"";console.log("newWebhookValue",r),e[t]=r}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{V(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,r.jsx)(J.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,r.jsx)(er.Z,{title:"Add Callback",visible:d,onOk:A,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,r.jsxs)(ea.Z,{form:h,layout:"vertical",onFinish:A,children:[(0,r.jsx)(ea.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,r.jsxs)(es.default,{onChange:e=>{p(e)},children:[(0,r.jsx)(es.default.Option,{value:"langfuse",children:"langfuse"}),(0,r.jsx)(es.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,r.jsx)(H.Z,{type:"password"})}),(0,r.jsx)(ea.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,r.jsx)(H.Z,{type:"password"})})]}),"openmeter"==x&&(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(ea.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,r.jsx)(H.Z,{type:"password"})})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:ln}=es.default;var lo=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:a}=e,[o]=ea.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,r.jsxs)("div",{children:[(0,r.jsx)(J.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,r.jsx)(er.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,r.jsxs)(ea.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:r}=e,n=[...s.fallbacks||[],{[l]:r}],i={...s,fallbacks:n};console.log(i);try{V(t,{router_settings:i}),a(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ea.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,r.jsx)(eb.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,r.jsx)(ek.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,r.jsx)(ea.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsx)(eK.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,r.jsx)(eB.Z,{value:e,children:e},e))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(ei.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},li=t(12968);async function lc(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new li.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,r.jsxs)("span",{children:["Test model=",(0,r.jsx)("strong",{children:e}),", received model=",(0,r.jsx)("strong",{children:l.model}),". See ",(0,r.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let ld={ttl:3600,lowest_latency_buffer:0},lm=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,r.jsxs)($.Z,{children:[(0,r.jsx)(Q.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,r.jsx)(X.Z,{children:"latency-based-routing"==l?(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,r.jsx)(ee.Z,{children:"No specific settings"})})]})};var lu=e=>{let{accessToken:l,userRole:t,userID:s,modelData:a}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)(!1),[m]=ea.Z.useForm(),[h,x]=(0,n.useState)(null),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),f={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)})},[l,t,s]);let Z=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await V(l,{router_settings:o}),i({...o}),j(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},_=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,p];if("routing_strategy_args"==l&&"latency-based-routing"==p){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(eM.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eR.Z,{value:"1",children:"General Settings"}),(0,r.jsx)(eR.Z,{value:"2",children:"Fallbacks"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(el.Z,{children:"Router Settings"}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Setting"}),(0,r.jsx)(e_.Z,{children:"Value"})]})}),(0,r.jsx)(ey.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(ee.Z,{children:l}),(0,r.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:f[l]})]}),(0,r.jsx)(ef.Z,{children:"routing_strategy"==l?(0,r.jsxs)(eb.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:j,children:[(0,r.jsx)(ek.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,r.jsx)(ek.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,r.jsx)(ek.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,r.jsx)(H.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,r.jsx)(lm,{selectedStrategy:p,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:ld,paramExplanation:f})]}),(0,r.jsx)(Y.Z,{children:(0,r.jsx)(J.Z,{className:"mt-2",onClick:()=>_(o),children:"Save Changes"})})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(eg.Z,{children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"Model Name"}),(0,r.jsx)(e_.Z,{children:"Fallbacks"})]})}),(0,r.jsx)(ey.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,a]=e;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:s}),(0,r.jsx)(ef.Z,{children:Array.isArray(a)?a.join(", "):a}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(J.Z,{onClick:()=>lc(s,l),children:"Test Fallback"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ej.Z,{icon:eh.Z,size:"sm",onClick:()=>Z(s)})})]},t.toString()+s)}))})]}),(0,r.jsx)(lo,{models:(null==a?void 0:a.data)?a.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]})]})]})}):null},lh=t(67951),lx=e=>{let{}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsxs)("div",{className:"mb-5",children:[(0,r.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,r.jsx)(ee.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{children:[(0,r.jsx)(eR.Z,{children:"OpenAI Python SDK"}),(0,r.jsx)(eR.Z,{children:"LlamaIndex"}),(0,r.jsx)(eR.Z,{children:"Langchain Py"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(lh.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lp(e,l,t,s){console.log("isLocal:",!1);let a=window.location.origin,r=new li.ZP.OpenAI({apiKey:s,baseURL:a,dangerouslyAllowBrowser:!0});try{for await(let s of(await r.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var lj=e=>{let{accessToken:l,token:t,userRole:s,userID:a}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{let e=await N(l,a,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,a,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&a){u(e=>[...e,{role:"user",content:c}]);try{h&&await lp(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eT.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,r.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,r.jsx)(W.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsx)(ep.Z,{children:(0,r.jsxs)(eM.Z,{children:[(0,r.jsx)(eL.Z,{children:(0,r.jsx)(eR.Z,{children:"Chat"})}),(0,r.jsx)(eD.Z,{children:(0,r.jsxs)(eU.Z,{children:[(0,r.jsx)("div",{className:"sm:max-w-2xl",children:(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"API Key"}),(0,r.jsx)(H.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,r.jsxs)(Y.Z,{className:"mx-2",children:[(0,r.jsx)(ee.Z,{children:"Select Model:"}),(0,r.jsx)(es.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,r.jsxs)(eg.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{})})}),(0,r.jsx)(ey.Z,{children:m.map((e,l)=>(0,r.jsx)(ew.Z,{children:(0,r.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,r.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(H.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,r.jsx)(J.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},lg=t(33509),ly=t(95781);let{Sider:lf}=lg.default;var lZ=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,r.jsx)(lf,{width:120,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,r.jsx)(lg.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,r.jsx)(lf,{width:145,children:(0,r.jsxs)(ly.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api-keys"),children:(0,r.jsx)(ee.Z,{children:"API Keys"})},"1"),(0,r.jsx)(ly.Z.Item,{onClick:()=>l("llm-playground"),children:(0,r.jsx)(ee.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("models"),children:(0,r.jsx)(ee.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("usage"),children:(0,r.jsx)(ee.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("teams"),children:(0,r.jsx)(ee.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("users"),children:(0,r.jsx)(ee.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("settings"),children:(0,r.jsx)(ee.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("general-settings"),children:(0,r.jsx)(ee.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,r.jsx)(ly.Z.Item,{onClick:()=>l("admin-panel"),children:(0,r.jsx)(ee.Z,{children:"Admin"})},"7"):null,(0,r.jsx)(ly.Z.Item,{onClick:()=>l("api_ref"),children:(0,r.jsx)(ee.Z,{children:"API Reference"})},"11")]})})})},l_=t(67989),lw=e=>{let{accessToken:l,token:t,userRole:s,userID:a,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,y]=(0,n.useState)([]),[f,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[N,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=z(M),D=z(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let a=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",a),j(a)},B=async(e,t)=>{e&&t&&l&&(Z((await E(l,e.toISOString(),t.toISOString())).spend_per_tag),console.log("Tag spend data updated successfully"))};function z(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){var e,r;let t=await C(l);d(t);let s=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(s);let a=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(a);let n=await A(l);console.log("teamSpend",n),y(n.daily_spend),w(n.teams);let o=n.total_spend_per_team;o=o.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(o);let i=await E(l,null===(e=N.from)||void 0===e?void 0:e.toISOString(),null===(r=N.to)||void 0===r?void 0:r.toISOString());Z(i.spend_per_tag);let c=await T(l,null,void 0,void 0);j(c),console.log("spend/user result",c)}else"App Owner"==s&&await I(l,t,s,a,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,a,U,D]),(0,r.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,r.jsx)(eE,{userID:a,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,r.jsxs)(eM.Z,{children:[(0,r.jsxs)(eL.Z,{className:"mt-2",children:[(0,r.jsx)(eR.Z,{children:"All Up"}),(0,r.jsx)(eR.Z,{children:"Team Based Usage"}),(0,r.jsx)(eR.Z,{children:"End User Usage"}),(0,r.jsx)(eR.Z,{children:"Tag Based Usage"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsx)(Y.Z,{numColSpan:2,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Monthly Spend"}),(0,r.jsx)(eq.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top API Keys"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1,children:(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Top Models"}),(0,r.jsx)(eq.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(Y.Z,{numColSpan:1})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsxs)(ep.Z,{className:"mb-2",children:[(0,r.jsx)(el.Z,{children:"Total Spend Per Team"}),(0,r.jsx)(l_.Z,{data:b})]}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Daily Spend Per Team"}),(0,r.jsx)(eq.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,r.jsxs)(W.Z,{numItems:2,children:[(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Time Range"}),(0,r.jsx)(eF.Z,{enableSelect:!0,value:N,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(ee.Z,{children:"Select Key"}),(0,r.jsxs)(eb.Z,{defaultValue:"all-keys",children:[(0,r.jsx)(ek.Z,{value:"all-keys",onClick:()=>{K(N.from,N.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,r.jsx)(ek.Z,{value:String(l),onClick:()=>{K(N.from,N.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,r.jsx)(ep.Z,{className:"mt-4",children:(0,r.jsxs)(eg.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,r.jsx)(eZ.Z,{children:(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(e_.Z,{children:"End User"}),(0,r.jsx)(e_.Z,{children:"Spend"}),(0,r.jsx)(e_.Z,{children:"Total Events"})]})}),(0,r.jsx)(ey.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,r.jsxs)(ew.Z,{children:[(0,r.jsx)(ef.Z,{children:e.end_user}),(0,r.jsx)(ef.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,r.jsx)(ef.Z,{children:e.total_count})]},l)})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(W.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,r.jsxs)(Y.Z,{numColSpan:2,children:[(0,r.jsx)(eF.Z,{className:"mb-4",enableSelect:!0,value:N,onValueChange:e=>{R(e),B(e.from,e.to)}}),(0,r.jsxs)(ep.Z,{children:[(0,r.jsx)(el.Z,{children:"Spend Per Tag"}),(0,r.jsxs)(ee.Z,{children:["Get Started Tracking cost per tag ",(0,r.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,r.jsx)(eq.Z,{className:"h-72",data:f,index:"name",categories:["spend"],colors:["blue"]})]})]}),(0,r.jsx)(Y.Z,{numColSpan:2})]})})]})]})]})},lb=()=>{let{Title:e,Paragraph:l}=eT.default,[t,s]=(0,n.useState)(""),[a,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,y]=(0,n.useState)({data:[]}),f=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eP.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{children:"Loading..."}),children:(0,r.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,r.jsx)(m,{userID:f,userRole:t,userEmail:a,showSSOBanner:x}),(0,r.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,r.jsx)("div",{className:"mt-8",children:(0,r.jsx)(lZ,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,r.jsx)(eO,{userID:f,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:a,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,r.jsx)(e3,{userID:f,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:y}):"llm-playground"==_?(0,r.jsx)(lj,{userID:f,userRole:t,token:Z,accessToken:b}):"users"==_?(0,r.jsx)(e9,{userID:f,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,r.jsx)(le,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:f,userRole:t}):"admin-panel"==_?(0,r.jsx)(lt,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,r.jsx)(lx,{}):"settings"==_?(0,r.jsx)(lr,{userID:f,userRole:t,accessToken:b}):"general-settings"==_?(0,r.jsx)(lu,{userID:f,userRole:t,accessToken:b,modelData:g}):(0,r.jsx)(lw,{userID:f,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/app/page-c35c14c9afd091ec.js b/ui/litellm-dashboard/out/_next/static/chunks/app/page-c35c14c9afd091ec.js new file mode 100644 index 00000000000..e8b5c33a1cf --- /dev/null +++ b/ui/litellm-dashboard/out/_next/static/chunks/app/page-c35c14c9afd091ec.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,4858))},4858:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return lS}});var s,r,a=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:r}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",r);let n=[{key:"1",label:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{children:["Role: ",t]}),(0,a.jsxs)("p",{children:["ID: ",l]})]})}];return(0,a.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,a.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,a.jsx)("div",{className:"flex flex-col items-center",children:(0,a.jsx)(i.default,{href:"/",children:(0,a.jsx)("button",{className:"text-gray-800 rounded text-center",children:(0,a.jsx)("img",{src:"/get_image",width:160,height:160,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,a.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[r?(0,a.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,a.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,a.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,a.jsx)(c.Z,{menu:{items:n},children:(0,a.jsx)(d.Z,{children:s})})})]})]})},u=t(80588);let h=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),u.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw u.ZP.error("Failed to parse metadata: "+e,10),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},f=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to delete team: "+e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},Z=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&a&&null!=r&&void 0!=r&&(n="".concat(n,"?view_all=true&page=").concat(r,"&page_size=").concat(a));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l)=>{try{let t="/team/info";l&&(t="".concat(t,"?team_id=").concat(l)),console.log("in teamInfoCall");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t,s,r,a)=>{try{let l="/model/metrics";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/slow_responses";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},S=async(e,l,t,s,r,a)=>{try{let l="/model/metrics/exceptions";s&&(l="".concat(l,"?_selected_model_group=").concat(s,"&startTime=").concat(r,"&endTime=").concat(a));let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l,t)=>{try{let s="/global/spend/tags";l&&t&&(s="".concat(s,"?start_date=").concat(l,"&end_date=").concat(t)),console.log("in tagsSpendLogsCall:",s);let r=await fetch("".concat(s),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!r.ok){let e=await r.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let a=await r.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,l,t,s,r,a)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(r,"&end_date=").concat(a):"".concat(l,"?start_date=").concat(r,"&end_date=").concat(a);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},T=async(e,l,t,s)=>{try{let r="";r=l?JSON.stringify({api_key:l,startTime:t,endTime:s}):JSON.stringify({startTime:t,endTime:s});let a={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};a.body=r;let n=await fetch("/global/spend/end_users",a);if(!n.ok){let e=await n.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},F=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to delete key: "+e,10),Error("Network response was not ok")}let r=await s.json();return console.log(r),r}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update team: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l)=>{try{console.log("Form Values in modelUpateCall:",l);let t=await fetch("/model/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error("Failed to update model: "+e,10),console.error("Error update from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update model Response:",s),s}catch(e){throw console.error("Failed to update model:",e),e}},K=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await s.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let r=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!r.ok){let e=await r.text();throw u.ZP.error("Failed to create key: "+e,10),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await r.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw u.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let r=await s.json();return u.ZP.success("Test request to ".concat(l," made - check logs/alerts on ").concat(l," to verify")),r}catch(e){throw console.error("Failed to perform health check:",e),e}},V=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},q=async e=>{try{let l=await fetch("/config/list?config_type=general_settings",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},G=async(e,l,t)=>{try{let s=await fetch("/config/field/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:l,field_value:t,config_type:"general_settings"})});if(!s.ok){let e=await s.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let r=await s.json();return u.ZP.success("Successfully updated value!"),r}catch(e){throw console.error("Failed to set callbacks:",e),e}},Y=async(e,l)=>{try{let t=await fetch("/config/field/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:l,config_type:"general_settings"})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}let s=await t.json();return u.ZP.success("Field reset on proxy"),s}catch(e){throw console.error("Failed to get callbacks:",e),e}},W=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw u.ZP.error(e,10),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},J=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw u.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var H=t(10384),$=t(46453),X=t(16450),Q=t(52273),ee=t(26780),el=t(15595),et=t(6698),es=t(71801),er=t(42440),ea=t(42308),en=t(50670),eo=t(81583),ei=t(99129),ec=t(44839),ed=t(88707),em=t(1861);let{Option:eu}=en.default;var eh=e=>{let{userID:l,team:t,userRole:s,accessToken:r,data:o,setData:i}=e,[c]=eo.Z.useForm(),[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[f,y]=(0,n.useState)([]),[Z,_]=(0,n.useState)([]),w=()=>{m(!1),c.resetFields()},b=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==r){let e=(await N(r,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),y(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,s]);let k=async e=>{try{var t,s,a;let n=null!==(t=null==e?void 0:e.key_alias)&&void 0!==t?t:"",d=null!==(s=null==e?void 0:e.team_id)&&void 0!==s?s:null;if((null!==(a=null==o?void 0:o.filter(e=>e.team_id===d).map(e=>e.key_alias))&&void 0!==a?a:[]).includes(n))throw Error("Key alias ".concat(n," already exists for team with ID ").concat(d,", please provide another key alias"));u.ZP.info("Making API Call"),m(!0);let h=await j(r,l,e);console.log("key create Response:",h),i(e=>e?[...e,h]:[h]),x(h.key),g(h.soft_budget),u.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e),u.ZP.error("Error creating the key: ".concat(e),20)}};return(0,n.useEffect)(()=>{_(t&&t.models.length>0?t.models.includes("all-proxy-models")?f:t.models:f)},[t,f]),(0,a.jsxs)("div",{children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,a.jsx)(ei.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:w,onCancel:b,children:(0,a.jsxs)(eo.Z,{form:c,onFinish:k,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,a.jsx)(ec.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,a.jsx)(eu,{value:"all-team-models",children:"All Team Models"},"all-team-models"),Z.map(e=>(0,a.jsx)(eu,{value:e,children:e},e))]})}),(0,a.jsxs)(ee.Z,{className:"mt-20 mb-8",children:[(0,a.jsx)(et.Z,{children:(0,a.jsx)("b",{children:"Optional Settings"})}),(0,a.jsxs)(el.Z,{children:[(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,a.jsxs)(en.default,{defaultValue:null,placeholder:"n/a",children:[(0,a.jsx)(en.default.Option,{value:"24h",children:"daily"}),(0,a.jsx)(en.default.Option,{value:"30d",children:"monthly"})]})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(ec.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Create Key"})})]})}),h&&(0,a.jsx)(ei.Z,{visible:d,onOk:w,onCancel:b,footer:null,children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(er.Z,{children:"Save your Key"}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,a.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,a.jsx)(H.Z,{numColSpan:1,children:null!=h?(0,a.jsxs)("div",{children:[(0,a.jsx)(es.Z,{className:"mt-3",children:"API Key:"}),(0,a.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,a.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:h})}),(0,a.jsx)(ea.CopyToClipboard,{text:h,onCopy:()=>{u.ZP.success("API Key copied to clipboard")},children:(0,a.jsx)(X.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,a.jsx)(es.Z,{children:"Key being created, this might take 30s"})})]})})]})},ex=t(9454),ep=t(98941),ej=t(33393),eg=t(5),ef=t(13810),ey=t(61244),eZ=t(10827),e_=t(3851),ew=t(2044),eb=t(64167),ek=t(74480),ev=t(7178),eS=t(95093),eN=t(27166);let{Option:eA}=en.default;var eE=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:r,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,y]=(0,n.useState)(null),[Z,_]=(0,n.useState)(null),[w,b]=(0,n.useState)(""),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)(!1),[E,I]=(0,n.useState)(null),[C,P]=(0,n.useState)([]),T=new Set,[O,F]=(0,n.useState)(T);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),P(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),F(e)}},[c]);let R=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),I(e),v(!0)},M=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await L(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),u.ZP.success("Key updated successfully"),v(!1),I(null)},U=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},D=async()=>{if(null!=p&&null!=o){try{await f(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,a.jsxs)("div",{children:[(0,a.jsxs)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,a.jsxs)(eZ.Z,{className:"mt-5 max-h-[300px] min-h-[300px]",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Key Alias"}),(0,a.jsx)(ek.Z,{children:"Secret Key"}),(0,a.jsx)(ek.Z,{children:"Spend (USD)"}),(0,a.jsx)(ek.Z,{children:"Budget (USD)"}),(0,a.jsx)(ek.Z,{children:"Models"}),(0,a.jsx)(ek.Z,{children:"TPM / RPM Limits"})]})}),(0,a.jsx)(e_.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(r){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(O.has(e.team_id),", selectedTeam id: ").concat(r.team_id)),(null!=r.team_id||null===e.team_id||O.has(e.team_id))&&e.team_id!=r.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,a.jsx)(es.Z,{children:e.key_alias}):(0,a.jsx)(es.Z,{children:"Not Set"})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:e.key_name})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,a.jsx)(ew.Z,{children:null!=e.max_budget?(0,a.jsx)(es.Z,{children:e.max_budget}):(0,a.jsx)(es.Z,{children:"Unlimited"})}),(0,a.jsx)(ew.Z,{children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(a.Fragment,{children:r&&r.models&&r.models.length>0?r.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Team Models"})},l):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Team Models"})},l):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ew.Z,{children:(0,a.jsxs)(es.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{onClick:()=>{I(e),A(!0)},icon:ex.Z,size:"sm"}),(0,a.jsx)(ei.Z,{open:S,onCancel:()=>{A(!1),I(null)},footer:null,width:800,children:E&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mt-8",children:[(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(E.spend).toFixed(4)}catch(e){return E.spend}})()})})]}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.max_budget?(0,a.jsx)(a.Fragment,{children:E.max_budget}):(0,a.jsx)(a.Fragment,{children:"Unlimited"})})})]},e.name),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,a.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,a.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=E.expires?(0,a.jsx)(a.Fragment,{children:new Date(E.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,a.jsx)(a.Fragment,{children:"Never"})})})]},e.name)]}),(0,a.jsxs)(ef.Z,{className:"my-4",children:[(0,a.jsx)(er.Z,{children:"Token Name"}),(0,a.jsx)(es.Z,{className:"my-1",children:E.key_alias?E.key_alias:E.key_name}),(0,a.jsx)(er.Z,{children:"Token ID"}),(0,a.jsx)(es.Z,{className:"my-1 text-[12px]",children:E.token}),(0,a.jsx)(er.Z,{children:"Metadata"}),(0,a.jsx)(es.Z,{className:"my-1",children:(0,a.jsxs)("pre",{children:[JSON.stringify(E.metadata)," "]})})]}),(0,a.jsx)(X.Z,{className:"mx-auto flex items-center",onClick:()=>{A(!1),I(null)},children:"Close"})]})}),(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>R(e)}),(0,a.jsx)(ey.Z,{onClick:()=>U(e),icon:ej.Z,size:"sm"})]})]},e.token)})})]}),h&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(X.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(X.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),E&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=eo.Z.useForm(),[d,m]=(0,n.useState)(r),[u,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,a.jsx)(ei.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(eo.Z,{form:i,onFinish:M,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,a.jsx)(ec.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e&&!d.models.includes("all-proxy-models"));return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t,"Team models: ").concat(d.models)):Promise.resolve()}}],children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(eA,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?C.filter(e=>"all-proxy-models"!==e).map(e=>(0,a.jsx)(eA,{value:e,children:e},e)):d.models.map(e=>(0,a.jsx)(eA,{value:e,children:e},e)):C.map(e=>(0,a.jsx)(eA,{value:e,children:e},e))]})}),(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{label:"token",name:"token",hidden:!0}),(0,a.jsx)(eo.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,a.jsx)(eS.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,a.jsx)(eN.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:k,onCancel:()=>{v(!1),I(null)},token:E,onSubmit:M})]})},eI=t(76032),eC=t(35152),eP=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:r,selectedTeam:o}=e;console.log("userSpend: ".concat(r));let[i,c]=(0,n.useState)(null!==r?r:0),[d,m]=(0,n.useState)(0),[u,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==r)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await N(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==r&&c(r)},[r]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")?(console.log("user models:",u),x=u):x&&x.includes("all-team-models")?x=o.models:x&&0===x.length&&(x=u);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,a.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,a.jsx)("div",{className:"ml-auto",children:(0,a.jsxs)(ee.Z,{children:[(0,a.jsx)(et.Z,{children:(0,a.jsx)(es.Z,{children:"Team Models"})}),(0,a.jsx)(el.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,a.jsx)(eI.Z,{children:x.map(e=>(0,a.jsx)(eC.Z,{children:(0,a.jsx)(es.Z,{children:e})},e))})})]})})]})},eT=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:r}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==r){let e=(await N(r,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[r,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("div",{className:"mb-5",children:(0,a.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eO=e=>{let l,{teams:t,setSelectedTeam:s,userRole:r}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===r?t:t?[...t,o]:[o],"App User"===r)?null:(0,a.jsxs)("div",{className:"mt-5 mb-5",children:[(0,a.jsx)(er.Z,{children:"Select Team"}),(0,a.jsx)(es.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,a.jsxs)(es.Z,{className:"mt-3 mb-3",children:[(0,a.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,a.jsx)(eS.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(eN.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,a.jsxs)(es.Z,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]})},eF=t(37963),eR=t(36083);console.log("isLocal:",!1);var eM=e=>{let{userID:l,userRole:t,teams:s,keys:r,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:u}=e,[h,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,f]=(0,n.useState)(null),[y,_]=(0,n.useState)(null),[b,k]=(0,n.useState)([]),v={models:[],team_alias:"Default Team",team_id:null},[S,A]=(0,n.useState)(s?s[0]:v);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eF.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),f(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!r&&!h){let e=sessionStorage.getItem("userModels"+l);e?k(JSON.parse(e)):(async()=>{try{let e=await Z(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);u(e.keys),m(e.teams);let s=[...e.teams];s.length>0?(console.log("response['teams']: ".concat(s)),A(s[0])):A(v),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let r=(await N(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",r),k(r),console.log("userModels:",b),sessionStorage.setItem("userModels"+l,JSON.stringify(r))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,r,t]),(0,n.useEffect)(()=>{if(null!==r&&null!=S){let e=0;for(let l of r)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);_(e)}else if(null!==r){let e=0;for(let l of r)e+=l.spend;_(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eR.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(y)),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsx)($.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(eT,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,a.jsx)(eP,{userID:l,userRole:t,accessToken:g,userSpend:y,selectedTeam:S||null}),(0,a.jsx)(eE,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:r,setData:u,teams:s}),(0,a.jsx)(eh,{userID:l,team:S||null,userRole:t,accessToken:g,data:r,setData:u},S?S.team_id:null),(0,a.jsx)(eO,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eL=t(35087),eU=t(92836),eD=t(26734),eK=t(41608),eB=t(32126),ez=t(23682),eV=t(47047),eq=t(76628),eG=t(57750),eY=t(44041),eW=t(38302),eJ=t(28683),eH=t(1460),e$=t(78578),eX=t(63954),eQ=t(90252),e0=t(7905),e1=e=>{let{modelID:l,accessToken:t}=e,[s,r]=(0,n.useState)(!1),o=async()=>{try{u.ZP.info("Making API Call"),r(!0);let e=await p(t,l);console.log("model delete Response:",e),u.ZP.success("Model ".concat(l," deleted successfully")),r(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(ey.Z,{onClick:()=>r(!0),icon:ej.Z,size:"sm"}),(0,a.jsx)(ei.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>r(!1),children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 w-full",children:[(0,a.jsx)(er.Z,{children:"Delete Model"}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)("p",{children:["Model ID: ",(0,a.jsx)("b",{children:l})]})})]})})]})},e2=t(97766),e4=t(46495);let{Title:e8,Link:e5}=eR.default;(s=r||(r={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let e3={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"},e6={"BadRequestError (400)":"BadRequestErrorRetries","AuthenticationError (401)":"AuthenticationErrorRetries","TimeoutError (408)":"TimeoutErrorRetries","RateLimitError (429)":"RateLimitErrorRetries","ContentPolicyViolationError (400)":"ContentPolicyViolationErrorRetries","InternalServerError (500)":"InternalServerErrorRetries"},e7=async(e,l,t)=>{try{let s=Array.isArray(e.model)?e.model:[e.model];console.log("received deployments: ".concat(s)),console.log("received type of deployments: ".concat(typeof s)),s.forEach(async t=>{console.log("litellm_model: ".concat(t));let s={},r={};s.model=t;let a="";for(let[l,t]of Object.entries(e))if(""!==t){if("model_name"==l)a+=t;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)r[l]=t;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",t);let e={};if(t&&void 0!=t){try{e=JSON.parse(t)}catch(e){throw u.ZP.error("Failed to parse LiteLLM Extra Params: "+e,10),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,t]of Object.entries(e))s[l]=t}}else s[l]=t}let n={model_name:a,litellm_params:s,model_info:r},o=await x(l,n);console.log("response for model create call: ".concat(o.data))}),t.resetFields()}catch(e){u.ZP.error("Failed to create model: "+e,10)}};var e9=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d,modelData:m={data:[]},setModelData:x}=e,[p,j]=(0,n.useState)([]),[g]=eo.Z.useForm(),[f,y]=(0,n.useState)(null),[Z,_]=(0,n.useState)(""),[w,N]=(0,n.useState)([]),A=Object.values(r).filter(e=>isNaN(Number(e))),[E,I]=(0,n.useState)("OpenAI"),[C,P]=(0,n.useState)(""),[T,O]=(0,n.useState)(!1),[F,R]=(0,n.useState)(null),[M,L]=(0,n.useState)([]),[U,K]=(0,n.useState)(null),[B,z]=(0,n.useState)([]),[q,G]=(0,n.useState)([]),[Y,H]=(0,n.useState)([]),[ea,en]=(0,n.useState)([]),[ec,eu]=(0,n.useState)([]),[eh,ex]=(0,n.useState)([]),[ej,eA]=(0,n.useState)([]),[eE,eI]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[eC,eP]=(0,n.useState)(null),[eT,eO]=(0,n.useState)(0),eF=e=>{R(e),O(!0)},eM=async e=>{if(console.log("handleEditSubmit:",e),null==o)return;let l={},t=null;for(let[s,r]of Object.entries(e))"model_id"!==s?l[s]=r:t=r;let s={litellm_params:l,model_info:{id:t}};console.log("handleEditSubmit payload:",s);try{await D(o,s),u.ZP.success("Model updated successfully, restart server to see updates"),O(!1),R(null)}catch(e){console.log("Error occurred")}},e9=()=>{_(new Date().toLocaleString())},le=async()=>{if(!o){console.error("Access token is missing");return}console.log("new modelGroupRetryPolicy:",eC);try{await W(o,{router_settings:{model_group_retry_policy:eC}}),u.ZP.success("Retry settings saved successfully")}catch(e){console.error("Failed to save retry settings:",e),u.ZP.error("Failed to save retry settings")}};if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{var e,l,t,s,r,a;let n=await b(o,d,c);console.log("Model data response:",n.data),x(n);let i=new Set;for(let e=0;e0&&(u=m[m.length-1],console.log("_initial_model_group:",u),K(u)),console.log("selectedModelGroup:",U);let h=await k(o,d,c,u,null===(e=eE.from)||void 0===e?void 0:e.toISOString(),null===(l=eE.to)||void 0===l?void 0:l.toISOString());console.log("Model metrics response:",h),G(h.data),H(h.all_api_bases);let p=await S(o,d,c,u,null===(t=eE.from)||void 0===t?void 0:t.toISOString(),null===(s=eE.to)||void 0===s?void 0:s.toISOString());console.log("Model exceptions response:",p),en(p.data),eu(p.exception_types);let j=await v(o,d,c,u,null===(r=eE.from)||void 0===r?void 0:r.toISOString(),null===(a=eE.to)||void 0===a?void 0:a.toISOString());console.log("slowResponses:",j),eA(j);let g=(await V(o,d,c)).router_settings;console.log("routerSettingsInfo:",g);let f=g.model_group_retry_policy,y=g.num_retries;console.log("model_group_retry_policy:",f),console.log("default_retries:",y),eP(f),eO(y)}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await h();console.log("received model cost map data: ".concat(Object.keys(e))),y(e)};null==f&&l(),e9()},[o,i,c,d,f,Z]),!m||!o||!i||!c||!d)return(0,a.jsx)("div",{children:"Loading..."});let ll=[];for(let e=0;e(console.log("GET PROVIDER CALLED! - ".concat(f)),null!=f&&"object"==typeof f&&e in f)?f[e].litellm_provider:"openai";if(r){let e=r.split("/"),l=e[0];n=1===e.length?u(r):l}else n="openai";a&&(o=null==a?void 0:a.input_cost_per_token,i=null==a?void 0:a.output_cost_per_token,c=null==a?void 0:a.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,ll.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eR.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let lt=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(r).find(l=>r[l]===e);if(l){let e=e3[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof f&&Object.entries(f).forEach(l=>{let[s,r]=l;null!==r&&"object"==typeof r&&"litellm_provider"in r&&(r.litellm_provider===e||r.litellm_provider.includes(e))&&t.push(s)}),N(t),console.log("providerModels: ".concat(w))}},ls=async()=>{try{u.ZP.info("Running health check..."),P("");let e=await J(o);P(e)}catch(e){console.error("Error running health check:",e),P("Error running health check")}},lr=async(e,l,t)=>{if(console.log("Updating model metrics for group:",e),o&&d&&c&&l&&t){console.log("inside updateModelMetrics - startTime:",l,"endTime:",t),K(e);try{let s=await k(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model metrics response:",s),G(s.data),H(s.all_api_bases);let r=await S(o,d,c,e,l.toISOString(),t.toISOString());console.log("Model exceptions response:",r),en(r.data),eu(r.exception_types);let a=await v(o,d,c,e,l.toISOString(),t.toISOString());console.log("slowResponses:",a),eA(a)}catch(e){console.error("Failed to fetch model metrics",e)}}};return console.log("selectedProvider: ".concat(E)),console.log("providerModels.length: ".concat(w.length)),(0,a.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,a.jsxs)(eD.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eK.Z,{className:"flex justify-between mt-2 w-full items-center",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(eU.Z,{children:"All Models"}),(0,a.jsx)(eU.Z,{children:"Add Model"}),(0,a.jsx)(eU.Z,{children:(0,a.jsx)("pre",{children:"/health Models"})}),(0,a.jsx)(eU.Z,{children:"Model Analytics"}),(0,a.jsx)(eU.Z,{children:"Model Retry Settings"})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[Z&&(0,a.jsxs)(es.Z,{children:["Last Refreshed: ",Z]}),(0,a.jsx)(ey.Z,{icon:eX.Z,variant:"shadow",size:"xs",className:"self-center",onClick:e9})]})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)($.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(es.Z,{children:"Filter by Public Model Name"}),(0,a.jsxs)(eS.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:"all",onValueChange:e=>K("all"===e?"all":e),children:[(0,a.jsx)(eN.Z,{value:"all",children:"All Models"}),M.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>K(e),children:e},l))]})]}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{className:"mt-5",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Public Model Name "}),(0,a.jsx)(ek.Z,{children:"Provider"}),"Admin"===c&&(0,a.jsx)(ek.Z,{children:"API Base"}),(0,a.jsx)(ek.Z,{children:"Extra litellm Params"}),(0,a.jsx)(ek.Z,{children:"Input Price per token ($)"}),(0,a.jsx)(ek.Z,{children:"Output Price per token ($)"}),(0,a.jsx)(ek.Z,{children:"Max Tokens"}),(0,a.jsx)(ek.Z,{children:"Status"})]})}),(0,a.jsx)(e_.Z,{children:m.data.filter(e=>"all"===U||e.model_name===U||null==U||""===U).map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:e.model_name})}),(0,a.jsx)(ew.Z,{children:e.provider}),"Admin"===c&&(0,a.jsx)(ew.Z,{children:e.api_base}),(0,a.jsx)(ew.Z,{children:(0,a.jsxs)(ee.Z,{children:[(0,a.jsx)(et.Z,{children:(0,a.jsx)(es.Z,{children:"Litellm params"})}),(0,a.jsx)(el.Z,{children:(0,a.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,a.jsx)(ew.Z,{children:e.input_cost||e.litellm_params.input_cost_per_token||null}),(0,a.jsx)(ew.Z,{children:e.output_cost||e.litellm_params.output_cost_per_token||null}),(0,a.jsx)(ew.Z,{children:e.max_tokens}),(0,a.jsx)(ew.Z,{children:e.model_info.db_model?(0,a.jsx)(eg.Z,{icon:eQ.Z,className:"text-white",children:"DB Model"}):(0,a.jsx)(eg.Z,{icon:e0.Z,className:"text-black",children:"Config Model"})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>eF(e)}),(0,a.jsx)(e1,{modelID:e.model_info.id,accessToken:o})]})]},l))})]})})]}),(0,a.jsx)(e=>{let{visible:l,onCancel:t,model:s,onSubmit:r}=e,[n]=eo.Z.useForm(),o={},i="",c="";if(s){o=s.litellm_params,i=s.model_name;let e=s.model_info;e&&(c=e.id,console.log("model_id: ".concat(c)),o.model_id=c)}return(0,a.jsx)(ei.Z,{title:"Edit Model "+i,visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r(e),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(eo.Z,{form:n,onFinish:eM,initialValues:o,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{className:"mt-8",label:"api_base",name:"api_base",children:(0,a.jsx)(Q.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"tpm",name:"tpm",tooltip:"int (optional) - Tokens limit for this deployment: in tokens per minute (tpm). Find this information on your model/providers website",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"rpm",name:"rpm",tooltip:"int (optional) - Rate limit for this deployment: in requests per minute (rpm). Find this information on your model/providers website",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"max_retries",name:"max_retries",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"timeout",name:"timeout",tooltip:"int (optional) - Timeout in seconds for LLM requests (Defaults to 600 seconds)",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"stream_timeout",name:"stream_timeout",tooltip:"int (optional) - Timeout for stream requests (seconds)",children:(0,a.jsx)(ed.Z,{min:0,step:1})}),(0,a.jsx)(eo.Z.Item,{label:"input_cost_per_token",name:"input_cost_per_token",tooltip:"float (optional) - Input cost per token",children:(0,a.jsx)(ed.Z,{min:0,step:1e-4})}),(0,a.jsx)(eo.Z.Item,{label:"output_cost_per_token",name:"output_cost_per_token",tooltip:"float (optional) - Output cost per token",children:(0,a.jsx)(ed.Z,{min:0,step:1e-4})}),(0,a.jsx)(eo.Z.Item,{label:"model_id",name:"model_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Save"})})]})})},{visible:T,onCancel:()=>{O(!1),R(null)},model:F,onSubmit:eM})]}),(0,a.jsxs)(eB.Z,{className:"h-full",children:[(0,a.jsx)(e8,{level:2,children:"Add new model"}),(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eo.Z,{form:g,onFinish:()=>{g.validateFields().then(e=>{e7(e,o,g)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eS.Z,{value:E.toString(),children:A.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>{lt(e),I(e)},children:e},l))})}),(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,a.jsx)(Q.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=E.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsx)(es.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===E?(0,a.jsx)(Q.Z,{placeholder:"Enter model name"}):w.length>0?(0,a.jsx)(eV.Z,{value:w,children:w.map((e,l)=>(0,a.jsx)(eq.Z,{value:e,children:e},l))}):(0,a.jsx)(Q.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsxs)(es.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,a.jsx)(e5,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,a.jsx)(e5,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=E&&"Vertex AI (Anthropic, Gemini, etc.)"!=E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,a.jsx)(Q.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==E&&(0,a.jsx)(eo.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,a.jsx)(Q.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,a.jsx)(Q.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,a.jsx)(Q.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,a.jsx)(e4.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;g.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?u.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&u.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,a.jsx)(em.ZP,{icon:(0,a.jsx)(e2.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==E&&(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsx)(es.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==E||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==E)&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,a.jsx)(Q.Z,{placeholder:"https://..."})}),"Azure"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,a.jsx)(Q.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==E&&(0,a.jsxs)(eo.Z.Item,{label:"Base Model",name:"base_model",children:[(0,a.jsx)(Q.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,a.jsxs)(es.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,a.jsx)(e5,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(Q.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(Q.Z,{placeholder:""})}),"Amazon Bedrock"==E&&(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,a.jsx)(Q.Z,{placeholder:"us-east-1"})}),(0,a.jsx)(eo.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,a.jsx)(e$.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,a.jsxs)(eW.Z,{children:[(0,a.jsx)(eJ.Z,{span:10}),(0,a.jsx)(eJ.Z,{span:10,children:(0,a.jsxs)(es.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,a.jsx)(e5,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,a.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add Model"})}),(0,a.jsx)(eH.Z,{title:"Get help on our github",children:(0,a.jsx)(eR.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(es.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,a.jsx)(X.Z,{onClick:ls,children:"Run `/health`"}),C&&(0,a.jsx)("pre",{children:JSON.stringify(C,null,2)})]})}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)($.Z,{numItems:2,className:"mt-2",children:[(0,a.jsxs)(eJ.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Time Range"}),(0,a.jsx)(eL.Z,{enableSelect:!0,value:eE,onValueChange:e=>{eI(e),lr(U,e.from,e.to)}})]}),(0,a.jsxs)(eJ.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Model Group"}),(0,a.jsx)(eS.Z,{className:"mb-4 mt-2",defaultValue:U||M[0],value:U||M[0],children:M.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>lr(e,eE.from,eE.to),children:e},l))})]})]}),(0,a.jsxs)($.Z,{numItems:2,children:[(0,a.jsx)(eJ.Z,{children:(0,a.jsxs)(ef.Z,{className:"mr-2 max-h-[400px] min-h-[400px]",children:[(0,a.jsx)(er.Z,{children:"Avg Latency per Token"}),(0,a.jsx)("p",{className:"text-gray-500 italic",children:" (seconds/token)"}),(0,a.jsx)(es.Z,{className:"text-gray-500 italic mt-1 mb-1",children:"average Latency for successfull requests divided by the total tokens"}),q&&Y&&(0,a.jsx)(eG.Z,{title:"Model Latency",className:"h-72",data:q,showLegend:!1,index:"date",categories:Y,connectNulls:!0,customTooltip:e=>{var l,t;let{payload:s,active:r}=e;if(!r||!s)return null;let n=null===(t=s[0])||void 0===t?void 0:null===(l=t.payload)||void 0===l?void 0:l.date,o=s.sort((e,l)=>l.value-e.value);if(o.length>5){let e=o.length-5;(o=o.slice(0,5)).push({dataKey:"".concat(e," other deployments"),value:s.slice(5).reduce((e,l)=>e+l.value,0),color:"gray"})}return(0,a.jsxs)("div",{className:"w-150 rounded-tremor-default border border-tremor-border bg-tremor-background p-2 text-tremor-default shadow-tremor-dropdown",children:[n&&(0,a.jsxs)("p",{className:"text-tremor-content-emphasis mb-2",children:["Date: ",n]}),o.map((e,l)=>{let t=parseFloat(e.value.toFixed(5)),s=0===t&&e.value>0?"<0.00001":t.toFixed(5);return(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)("div",{className:"w-2 h-2 mt-1 rounded-full bg-".concat(e.color,"-500")}),(0,a.jsx)("p",{className:"text-tremor-content",children:e.dataKey})]}),(0,a.jsx)("p",{className:"font-medium text-tremor-content-emphasis text-righ ml-2",children:s})]},l)})]})}})]})}),(0,a.jsx)(eJ.Z,{children:(0,a.jsx)(ef.Z,{className:"ml-2 max-h-[400px] min-h-[400px] overflow-y-auto",children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Deployment"}),(0,a.jsx)(ek.Z,{children:"Success Responses"}),(0,a.jsxs)(ek.Z,{children:["Slow Responses ",(0,a.jsx)("p",{children:"Success Responses taking 600+s"})]})]})}),(0,a.jsx)(e_.Z,{children:ej.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.api_base}),(0,a.jsx)(ew.Z,{children:e.total_count}),(0,a.jsx)(ew.Z,{children:e.slow_count})]},l))})]})})})]}),(0,a.jsxs)(ef.Z,{className:"mt-4",children:[(0,a.jsx)(er.Z,{children:"Exceptions per Model"}),(0,a.jsx)(eY.Z,{className:"h-72",data:ea,index:"model",categories:ec,stack:!0,colors:["indigo-300","rose-200","#ffcc33"],yAxisWidth:30})]})]}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(es.Z,{children:"Filter by Public Model Name"}),(0,a.jsx)(eS.Z,{className:"mb-4 mt-2 ml-2 w-50",defaultValue:U||M[0],value:U||M[0],onValueChange:e=>K(e),children:M.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>K(e),children:e},l))})]}),(0,a.jsxs)(er.Z,{children:["Retry Policy for ",U]}),(0,a.jsx)(es.Z,{className:"mb-6",children:"How many retries should be attempted based on the Exception"}),e6&&(0,a.jsx)("table",{children:(0,a.jsx)("tbody",{children:Object.entries(e6).map((e,l)=>{var t;let[s,r]=e,n=null==eC?void 0:null===(t=eC[U])||void 0===t?void 0:t[r];return null==n&&(n=eT),(0,a.jsxs)("tr",{className:"flex justify-between items-center mt-2",children:[(0,a.jsx)("td",{children:(0,a.jsx)(es.Z,{children:s})}),(0,a.jsx)("td",{children:(0,a.jsx)(ed.Z,{className:"ml-5",value:n,min:0,step:1,onChange:e=>{eP(l=>{var t;let s=null!==(t=null==l?void 0:l[U])&&void 0!==t?t:{};return{...null!=l?l:{},[U]:{...s,[r]:e}}})}})})]},l)})})}),(0,a.jsx)(X.Z,{className:"mt-6 mr-8",onClick:le,children:"Save"})]})]})]})})};let{Option:le}=en.default;var ll=e=>{let{userID:l,accessToken:t,teams:s}=e,[r]=eo.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,h]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await N(t,l,"any"),s=[];for(let l=0;l{i(!1),r.resetFields()},p=()=>{i(!1),d(null),r.resetFields()},j=async e=>{try{u.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),u.ZP.success("API user Created"),r.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,a.jsxs)("div",{children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,a.jsxs)(ei.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,a.jsx)(es.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,a.jsx)(es.Z,{className:"mb-6",children:(0,a.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,a.jsxs)(eo.Z,{form:r,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsx)(eo.Z.Item,{label:"User Email",name:"user_email",children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Team ID",name:"team_id",children:(0,a.jsx)(en.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,a.jsx)(le,{value:e.team_id,children:e.team_alias},e.team_id)):(0,a.jsx)(le,{value:null,children:"Default Team"},"default")})}),(0,a.jsx)(eo.Z.Item,{label:"Metadata",name:"metadata",children:(0,a.jsx)(ec.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,a.jsxs)(ei.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,a.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,a.jsx)("br",{}),(0,a.jsx)("p",{children:(0,a.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},lt=e=>{let{accessToken:l,token:t,keys:s,userRole:r,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[f,y]=(0,n.useState)(null);return((0,n.useEffect)(()=>{if(!l||!t||!r||!o)return;let e=async()=>{try{let e=await Z(l,null,r,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&r&&o&&e()},[l,t,r,o,x]),d&&l&&t&&r&&o)?(0,a.jsx)("div",{style:{width:"100%"},children:(0,a.jsxs)($.Z,{className:"gap-2 p-2 h-[80vh] w-full mt-8",children:[(0,a.jsx)(ll,{userID:o,accessToken:l,teams:i}),(0,a.jsxs)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[80vh] mb-4",children:[(0,a.jsx)("div",{className:"mb-4 mt-1",children:(0,a.jsx)(es.Z,{children:"These are Users on LiteLLM that created API Keys. Automatically tracked by LiteLLM"})}),(0,a.jsx)(eD.Z,{children:(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsxs)(eZ.Z,{className:"mt-5",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"User ID"}),(0,a.jsx)(ek.Z,{children:"User Email"}),(0,a.jsx)(ek.Z,{children:"User Models"}),(0,a.jsx)(ek.Z,{children:"User Spend ($ USD)"}),(0,a.jsx)(ek.Z,{children:"User Max Budget ($ USD)"}),(0,a.jsx)(ek.Z,{children:"User API Key Aliases"})]})}),(0,a.jsx)(e_.Z,{children:d.map(e=>{var l;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.user_id}),(0,a.jsx)(ew.Z,{children:e.user_email}),(0,a.jsx)(ew.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,a.jsx)(ew.Z,{children:e.spend?null===(l=e.spend)||void 0===l?void 0:l.toFixed(2):0}),(0,a.jsx)(ew.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)($.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,a.jsx)(eg.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,a.jsx)(eg.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id)})})]})}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("div",{className:"flex-1"}),(0,a.jsx)("div",{className:"flex-1 flex justify-between items-center"})]})})]})})]}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,a.jsxs)("div",{className:"flex justify-between items-center",children:[(0,a.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,a.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})}):(0,a.jsx)("div",{children:"Loading..."})},ls=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:r,userID:o,userRole:i}=e,[c]=eo.Z.useForm(),[d]=eo.Z.useForm(),{Title:m,Paragraph:h}=eR.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[f,Z]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[E,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,O]=(0,n.useState)({}),F=e=>{Z(e),g(!0)},R=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let a=await U(s,e);l&&r(l.map(e=>e.team_id===t?a.data:e)),u.ZP.success("Team updated successfully"),g(!1),Z(null)},L=async e=>{P(e),I(!0)},D=async()=>{if(null!=C&&null!=l&&null!=s){try{await y(s,C);let e=l.filter(e=>e.team_id!==C);r(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{let e=async()=>{try{if(null===o||null===i||null===s||null===l)return;console.log("fetching team info:");let e={};for(let t=0;t<(null==l?void 0:l.length);t++){let r=l[t].team_id,a=await _(s,r);console.log("teamInfo response:",a),null!==a&&(e={...e,[r]:a})}O(e)}catch(e){console.error("Error fetching team info:",e)}};(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await N(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[s,o,i,l]);let B=async e=>{try{if(null!=s){var t;let a=null==e?void 0:e.team_alias;if((null!==(t=null==l?void 0:l.map(e=>e.team_alias))&&void 0!==t?t:[]).includes(a))throw Error("Team alias ".concat(a," already exists, please pick another alias"));u.ZP.info("Creating Team");let n=await M(s,e);null!==l?r([...l,n]):r([n]),console.log("response for team create call: ".concat(n)),u.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),u.ZP.error("Error creating the team: "+e,20)}},z=async e=>{try{if(null!=s&&null!=l){u.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},a=await K(s,f.team_id,t);console.log("response for team create call: ".concat(a.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(a.data.team_id)),e.team_id===a.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=a.data,r(e),Z(a.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(JSON.stringify(l))),(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"All Teams"}),(0,a.jsxs)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Team Name"}),(0,a.jsx)(ek.Z,{children:"Spend (USD)"}),(0,a.jsx)(ek.Z,{children:"Budget (USD)"}),(0,a.jsx)(ek.Z,{children:"Models"}),(0,a.jsx)(ek.Z,{children:"TPM / RPM Limits"}),(0,a.jsx)(ek.Z,{children:"Info"})]})}),(0,a.jsx)(e_.Z,{children:l&&l.length>0?l.map(e=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,a.jsx)(ew.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"red",children:(0,a.jsx)(es.Z,{children:"All Proxy Models"})},l):(0,a.jsx)(eg.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,a.jsx)(es.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,a.jsx)(ew.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,a.jsxs)(es.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,a.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsxs)(es.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].keys&&T[e.team_id].keys.length," ","Keys"]}),(0,a.jsxs)(es.Z,{children:[T&&e.team_id&&T[e.team_id]&&T[e.team_id].team_info&&T[e.team_id].team_info.members_with_roles&&T[e.team_id].team_info.members_with_roles.length," ","Members"]})]}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>F(e)}),(0,a.jsx)(ey.Z,{onClick:()=>L(e.team_id),icon:ej.Z,size:"sm"})]})]},e.team_id)):null})]}),E&&(0,a.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,a.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,a.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,a.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:"​"}),(0,a.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,a.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,a.jsx)("div",{className:"sm:flex sm:items-start",children:(0,a.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,a.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,a.jsx)("div",{className:"mt-2",children:(0,a.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,a.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,a.jsx)(X.Z,{onClick:D,color:"red",className:"ml-2",children:"Delete"}),(0,a.jsx)(X.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,a.jsx)(ei.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,a.jsxs)(eo.Z,{form:c,onFinish:B,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(Q.Z,{placeholder:""})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(en.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,a.jsx)(en.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(eo.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(m,{level:4,children:"Team Members"}),(0,a.jsx)(h,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,a.jsx)(eS.Z,{defaultValue:"0",children:l.map((e,l)=>(0,a.jsx)(eN.Z,{value:String(l),onClick:()=>{Z(e)},children:e.team_alias},l))}):(0,a.jsxs)(h,{children:["No team created. ",(0,a.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Member Name"}),(0,a.jsx)(ek.Z,{children:"Role"})]})}),(0,a.jsx)(e_.Z,{children:f?f.members_with_roles.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ew.Z,{children:e.role})]},l)):null})]})}),f&&(0,a.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:r}=e,[n]=eo.Z.useForm();return(0,a.jsx)(ei.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{r({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,a.jsxs)(eo.Z,{form:n,onFinish:R,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,a.jsx)(Q.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"Models",name:"models",children:(0,a.jsxs)(en.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,a.jsx)(en.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,a.jsx)(en.default.Option,{value:e,children:e},e))]})}),(0,a.jsx)(eo.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,a.jsx)(ed.Z,{step:.01,precision:2,width:200})}),(0,a.jsx)(eo.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,a.jsx)(ed.Z,{step:1,width:400})}),(0,a.jsx)(eo.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),Z(null)},team:f,onSubmit:R})]}),(0,a.jsxs)(H.Z,{numColSpan:1,children:[(0,a.jsx)(X.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,a.jsx)(ei.Z,{title:"Add member",visible:k,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,a.jsxs)(eo.Z,{form:c,onFinish:z,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(eo.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},lr=t(18190),la=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:r}=e,[o]=eo.Z.useForm(),[i]=eo.Z.useForm(),{Title:c,Paragraph:d}=eR.default,[m,h]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[f,y]=(0,n.useState)(!1),[Z,_]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l=""}l+="/fallback/login";let S=()=>{v(!1)},N=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await R(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await R(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let A=()=>{_(!1),i.resetFields()},E=()=>{_(!1),i.resetFields()},I=e=>(0,a.jsxs)(eo.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,a.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,a.jsx)(eo.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,a.jsx)(ec.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add member"})})]}),C=(e,l,t)=>(0,a.jsxs)(eo.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,a.jsx)(eS.Z,{value:l,children:N.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,children:e},l))})}),(0,a.jsx)(eo.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,a.jsx)(ec.Z,{value:t,disabled:!0})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Update role"})})]}),P=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),u.ZP.success("Refresh tab to see updated user role"),_(!1)}}catch(e){console.error("Error creating the key:",e)}},T=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call");let l=await B(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){u.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await B(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),y(!1)}}catch(e){console.error("Error creating the key:",e)}},F=async e=>{null!=s&&W(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,a.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,a.jsx)(c,{level:4,children:"Admin Access "}),(0,a.jsxs)(d,{children:[r&&(0,a.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,a.jsx)("br",{}),(0,a.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsx)(ef.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Member Name"}),(0,a.jsx)(ek.Z,{children:"Role"})]})}),(0,a.jsx)(e_.Z,{children:x?x.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,a.jsx)(ew.Z,{children:e.user_role}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(ey.Z,{icon:ep.Z,size:"sm",onClick:()=>_(!0)}),(0,a.jsx)(ei.Z,{title:"Update role",visible:Z,width:800,footer:null,onOk:A,onCancel:E,children:C(P,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)("div",{className:"flex justify-start",children:[(0,a.jsx)(X.Z,{className:"mr-4 mb-5",onClick:()=>y(!0),children:"+ Add admin"}),(0,a.jsx)(ei.Z,{title:"Add admin",visible:f,width:800,footer:null,onOk:()=>{y(!1),i.resetFields()},onCancel:()=>{y(!1),i.resetFields()},children:I(O)}),(0,a.jsx)(X.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,a.jsx)(ei.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:I(T)})]})})]}),(0,a.jsxs)($.Z,{children:[(0,a.jsx)(c,{level:4,children:"Add SSO"}),(0,a.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,a.jsx)(X.Z,{onClick:()=>b(!0),children:"Add SSO"}),(0,a.jsx)(ei.Z,{title:"Add SSO",visible:w,width:800,footer:null,onOk:()=>{b(!1),o.resetFields()},onCancel:()=>{b(!1),o.resetFields()},children:(0,a.jsxs)(eo.Z,{form:o,onFinish:e=>{O(e),F(e),b(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,a.jsx)(ec.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,a.jsx)(ec.Z,{})}),(0,a.jsx)(eo.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,a.jsx)(ec.Z.Password,{})}),(0,a.jsx)(eo.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,a.jsx)(ec.Z.Password,{})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,a.jsxs)(ei.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,a.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,a.jsx)(es.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{onClick:S,children:"Done"})})]})]}),(0,a.jsxs)(lr.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,a.jsxs)("a",{href:l,target:"_blank",children:[(0,a.jsx)("b",{children:l})," "]})]})]})]})},ln=t(42556);let lo=[{name:"slack",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"langfuse",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}},{name:"openmeter",variables:{LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null,SLACK_WEBHOOK_URL:null}}];var li=e=>{let{accessToken:l,userRole:t,userID:s}=e,[r,o]=(0,n.useState)(lo),[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)(!1),[h]=eo.Z.useForm(),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)([]),[f,y]=(0,n.useState)(""),[Z,_]=(0,n.useState)({}),[w,b]=(0,n.useState)([]),k=e=>{w.includes(e)?b(w.filter(l=>l!==e)):b([...w,e])},v={llm_exceptions:"LLM Exceptions",llm_too_slow:"LLM Responses Too Slow",llm_requests_hanging:"LLM Requests Hanging",budget_alerts:"Budget Alerts (API Keys, Users)",db_exceptions:"Database Exceptions (Read/Write)",daily_reports:"Weekly/Monthly Spend Reports"};(0,n.useEffect)(()=>{l&&t&&s&&V(l,s,t).then(e=>{console.log("callbacks",e);let l=lo;o(l=l.map(l=>{let t=e.callbacks.find(e=>e.name===l.name);return t?{...l,variables:{...l.variables,...t.variables}}:l}));let t=e.alerts;if(console.log("alerts_data",t),t&&t.length>0){let e=t[0];console.log("_alert_info",e);let l=e.variables.SLACK_WEBHOOK_URL;console.log("catch_all_webhook",l),b(e.active_alerts),y(l),_(e.alerts_to_webhook)}c(t)})},[l,t,s]);let S=e=>w&&w.includes(e),N=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",j);let s={environment_variables:t,litellm_settings:{success_callback:[e.name]}};try{W(l,s)}catch(e){u.ZP.error("Failed to update callback: "+e,20)}u.ZP.success("Callback updated successfully")},A=()=>{l&&h.validateFields().then(e=>{if(console.log("Form values:",e),"langfuse"===e.callback){W(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("slack"===e.callback){console.log("values.slackWebhookUrl: ".concat(e.slackWebhookUrl)),W(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),console.log("values.callback: ".concat(e.callback));let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:null}};o(r?[...r,t]:[t])}else if("openmeter"==e.callback){console.log("values.openMeterApiKey: ".concat(e.openMeterApiKey)),W(l,{environment_variables:{OPENMETER_API_KEY:e.openMeterApiKey},litellm_settings:{success_callback:[e.callback]}});let t={name:e.callback,variables:{SLACK_WEBHOOK_URL:null,LANGFUSE_HOST:null,LANGFUSE_PUBLIC_KEY:null,LANGFUSE_SECRET_KEY:null,OPENMETER_API_KEY:e.openMeterAPIKey}};o(r?[...r,t]:[t])}m(!1),h.resetFields(),p(null)})};return l?(console.log("callbacks: ".concat(r)),(0,a.jsxs)("div",{className:"w-full mx-4",children:[(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(lr.Z,{title:"[UI] Presidio PII + Guardrails Coming Soon. https://docs.litellm.ai/docs/proxy/pii_masking",color:"sky"}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eK.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eU.Z,{value:"1",children:"Logging Callbacks"}),(0,a.jsx)(eU.Z,{value:"2",children:"Alerting"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Callback"}),(0,a.jsx)(ek.Z,{children:"Callback Env Vars"})]})}),(0,a.jsx)(e_.Z,{children:r.filter(e=>"slack"!==e.name).map((e,t)=>{var s;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:(0,a.jsx)(eg.Z,{color:"emerald",children:e.name})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)("ul",{children:Object.entries(null!==(s=e.variables)&&void 0!==s?s:{}).filter(l=>{let[t,s]=l;return t.toLowerCase().includes(e.name)}).map(e=>{let[l,t]=e;return(0,a.jsxs)("li",{children:[(0,a.jsx)(es.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,a.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,a.jsx)("div",{}),(0,a.jsx)(Q.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),(0,a.jsx)(X.Z,{className:"mt-2",onClick:()=>N(e),children:"Save Changes"}),(0,a.jsx)(X.Z,{onClick:()=>z(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t)})})]})})}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsxs)(es.Z,{className:"my-2",children:["Alerts are only supported for Slack Webhook URLs. Get your webhook urls from ",(0,a.jsx)("a",{href:"https://api.slack.com/messaging/webhooks",target:"_blank",style:{color:"blue"},children:"here"})]}),(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{}),(0,a.jsx)(ek.Z,{}),(0,a.jsx)(ek.Z,{children:"Slack Webhook URL"})]})}),(0,a.jsx)(e_.Z,{children:Object.entries(v).map((e,l)=>{let[t,s]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ln.Z,{id:"switch",name:"switch",checked:S(t),onChange:()=>k(t)})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(es.Z,{children:s})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(Q.Z,{name:t,type:"password",defaultValue:Z&&Z[t]?Z[t]:f})})]},l)})})]}),(0,a.jsx)(X.Z,{size:"xs",className:"mt-2",onClick:()=>{if(!l)return;let e={};Object.entries(v).forEach(l=>{let[t,s]=l,r=document.querySelector('input[name="'.concat(t,'"]'));console.log("key",t),console.log("webhookInput",r);let a=(null==r?void 0:r.value)||"";console.log("newWebhookValue",a),e[t]=a}),console.log("updatedAlertToWebhooks",e);let t={general_settings:{alert_to_webhook_url:e,alert_types:w}};console.log("payload",t);try{W(l,t)}catch(e){u.ZP.error("Failed to update alerts: "+e,20)}u.ZP.success("Alerts updated successfully")},children:"Save Changes"}),(0,a.jsx)(X.Z,{onClick:()=>z(l,"slack"),className:"mx-2",children:"Test Alerts"})]})})]})]})]}),(0,a.jsx)(ei.Z,{title:"Add Callback",visible:d,onOk:A,width:800,onCancel:()=>{m(!1),h.resetFields(),p(null)},footer:null,children:(0,a.jsxs)(eo.Z,{form:h,layout:"vertical",onFinish:A,children:[(0,a.jsx)(eo.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,a.jsxs)(en.default,{onChange:e=>{p(e)},children:[(0,a.jsx)(en.default.Option,{value:"langfuse",children:"langfuse"}),(0,a.jsx)(en.default.Option,{value:"openmeter",children:"openmeter"})]})}),"langfuse"===x&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,a.jsx)(Q.Z,{type:"password"})}),(0,a.jsx)(eo.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,a.jsx)(Q.Z,{type:"password"})})]}),"openmeter"==x&&(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(eo.Z.Item,{label:"OPENMETER_API_KEY",name:"openMeterApiKey",rules:[{required:!0,message:"Please enter the openmeter api key"}],children:(0,a.jsx)(Q.Z,{type:"password"})})}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Save"})})]})})]})):null};let{Option:lc}=en.default;var ld=e=>{let{models:l,accessToken:t,routerSettings:s,setRouterSettings:r}=e,[o]=eo.Z.useForm(),[i,c]=(0,n.useState)(!1),[d,m]=(0,n.useState)("");return(0,a.jsxs)("div",{children:[(0,a.jsx)(X.Z,{className:"mx-auto",onClick:()=>c(!0),children:"+ Add Fallbacks"}),(0,a.jsx)(ei.Z,{title:"Add Fallbacks",visible:i,width:800,footer:null,onOk:()=>{c(!1),o.resetFields()},onCancel:()=>{c(!1),o.resetFields()},children:(0,a.jsxs)(eo.Z,{form:o,onFinish:e=>{console.log(e);let{model_name:l,models:a}=e,n=[...s.fallbacks||[],{[l]:a}],i={...s,fallbacks:n};console.log(i);try{W(t,{router_settings:i}),r(i)}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully"),c(!1),o.resetFields()},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.Z.Item,{label:"Public Model Name",name:"model_name",rules:[{required:!0,message:"Set the model to fallback for"}],help:"required",children:(0,a.jsx)(eS.Z,{defaultValue:d,children:l&&l.map((e,l)=>(0,a.jsx)(eN.Z,{value:e,onClick:()=>m(e),children:e},l))})}),(0,a.jsx)(eo.Z.Item,{label:"Fallback Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,a.jsx)(eV.Z,{value:l,children:l&&l.filter(e=>e!=d).map(e=>(0,a.jsx)(eq.Z,{value:e,children:e},e))})})]}),(0,a.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,a.jsx)(em.ZP,{htmlType:"submit",children:"Add Fallbacks"})})]})})]})},lm=t(12968);async function lu(e,l){console.log("isLocal:",!1);let t=window.location.origin,s=new lm.ZP.OpenAI({apiKey:l,baseURL:t,dangerouslyAllowBrowser:!0});try{let l=await s.chat.completions.create({model:e,messages:[{role:"user",content:"Hi, this is a test message"}],mock_testing_fallbacks:!0});u.ZP.success((0,a.jsxs)("span",{children:["Test model=",(0,a.jsx)("strong",{children:e}),", received model=",(0,a.jsx)("strong",{children:l.model}),". See"," ",(0,a.jsx)("a",{href:"#",onClick:()=>window.open("https://docs.litellm.ai/docs/proxy/reliability","_blank"),style:{textDecoration:"underline",color:"blue"},children:"curl"})]}))}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}let lh={ttl:3600,lowest_latency_buffer:0},lx=e=>{let{selectedStrategy:l,strategyArgs:t,paramExplanation:s}=e;return(0,a.jsxs)(ee.Z,{children:[(0,a.jsx)(et.Z,{className:"text-sm font-medium text-tremor-content-strong dark:text-dark-tremor-content-strong",children:"Routing Strategy Specific Args"}),(0,a.jsx)(el.Z,{children:"latency-based-routing"==l?(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Setting"}),(0,a.jsx)(ek.Z,{children:"Value"})]})}),(0,a.jsx)(e_.Z,{children:Object.entries(t).map(e=>{let[l,t]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(es.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:s[l]})]}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(Q.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}):(0,a.jsx)(es.Z,{children:"No specific settings"})})]})};var lp=e=>{let{accessToken:l,userRole:t,userID:s,modelData:r}=e,[o,i]=(0,n.useState)({}),[c,d]=(0,n.useState)({}),[m,h]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1),[j]=eo.Z.useForm(),[g,f]=(0,n.useState)(null),[y,Z]=(0,n.useState)(null),[_,w]=(0,n.useState)(null),b={routing_strategy_args:"(dict) Arguments to pass to the routing strategy",routing_strategy:"(string) Routing strategy to use",allowed_fails:"(int) Number of times a deployment can fail before being added to cooldown",cooldown_time:"(int) time in seconds to cooldown a deployment after failure",num_retries:"(int) Number of retries for failed requests. Defaults to 0.",timeout:"(float) Timeout for requests. Defaults to None.",retry_after:"(int) Minimum time to wait before retrying a failed request",ttl:"(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};(0,n.useEffect)(()=>{l&&t&&s&&(V(l,s,t).then(e=>{console.log("callbacks",e),i(e.router_settings)}),q(l).then(e=>{h(e)}))},[l,t,s]);let k=async e=>{if(l){console.log("received key: ".concat(e)),console.log("routerSettings['fallbacks']: ".concat(o.fallbacks)),o.fallbacks.map(l=>(e in l&&delete l[e],l));try{await W(l,{router_settings:o}),i({...o}),Z(o.routing_strategy),u.ZP.success("Router settings updated successfully")}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}}},v=(e,l)=>{h(m.map(t=>t.field_name===e?{...t,field_value:l}:t))},S=(e,t)=>{if(!l)return;let s=m[t].field_value;if(null!=s&&void 0!=s)try{G(l,e,s);let t=m.map(l=>l.field_name===e?{...l,stored_in_db:!0}:l);h(t)}catch(e){}},N=(e,t)=>{if(l)try{Y(l,e);let t=m.map(l=>l.field_name===e?{...l,stored_in_db:null,field_value:null}:l);h(t)}catch(e){}},A=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{let[l,t]=e;if("routing_strategy_args"!==l&&"routing_strategy"!==l){var s;return[l,(null===(s=document.querySelector('input[name="'.concat(l,'"]')))||void 0===s?void 0:s.value)||t]}if("routing_strategy"==l)return[l,y];if("routing_strategy_args"==l&&"latency-based-routing"==y){let e={},l=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]');return(null==l?void 0:l.value)&&(e.lowest_latency_buffer=Number(l.value)),(null==t?void 0:t.value)&&(e.ttl=Number(t.value)),console.log("setRoutingStrategyArgs: ".concat(e)),["routing_strategy_args",e]}return null}).filter(e=>null!=e));console.log("updatedVariables",t);try{W(l,{router_settings:t})}catch(e){u.ZP.error("Failed to update router settings: "+e,20)}u.ZP.success("router settings updated successfully")};return l?(0,a.jsx)("div",{className:"w-full mx-4",children:(0,a.jsxs)(eD.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,a.jsxs)(eK.Z,{variant:"line",defaultValue:"1",children:[(0,a.jsx)(eU.Z,{value:"1",children:"Loadbalancing"}),(0,a.jsx)(eU.Z,{value:"2",children:"Fallbacks"}),(0,a.jsx)(eU.Z,{value:"3",children:"General"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,a.jsx)(er.Z,{children:"Router Settings"}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Setting"}),(0,a.jsx)(ek.Z,{children:"Value"})]})}),(0,a.jsx)(e_.Z,{children:Object.entries(o).filter(e=>{let[l,t]=e;return"fallbacks"!=l&&"context_window_fallbacks"!=l&&"routing_strategy_args"!=l}).map(e=>{let[l,t]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(es.Z,{children:l}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:b[l]})]}),(0,a.jsx)(ew.Z,{children:"routing_strategy"==l?(0,a.jsxs)(eS.Z,{defaultValue:t,className:"w-full max-w-md",onValueChange:Z,children:[(0,a.jsx)(eN.Z,{value:"usage-based-routing",children:"usage-based-routing"}),(0,a.jsx)(eN.Z,{value:"latency-based-routing",children:"latency-based-routing"}),(0,a.jsx)(eN.Z,{value:"simple-shuffle",children:"simple-shuffle"})]}):(0,a.jsx)(Q.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]}),(0,a.jsx)(lx,{selectedStrategy:y,strategyArgs:o&&o.routing_strategy_args&&Object.keys(o.routing_strategy_args).length>0?o.routing_strategy_args:lh,paramExplanation:b})]}),(0,a.jsx)(H.Z,{children:(0,a.jsx)(X.Z,{className:"mt-2",onClick:()=>A(o),children:"Save Changes"})})]})}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Model Name"}),(0,a.jsx)(ek.Z,{children:"Fallbacks"})]})}),(0,a.jsx)(e_.Z,{children:o.fallbacks&&o.fallbacks.map((e,t)=>Object.entries(e).map(e=>{let[s,r]=e;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:s}),(0,a.jsx)(ew.Z,{children:Array.isArray(r)?r.join(", "):r}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(X.Z,{onClick:()=>lu(s,l),children:"Test Fallback"})}),(0,a.jsx)(ew.Z,{children:(0,a.jsx)(ey.Z,{icon:ej.Z,size:"sm",onClick:()=>k(s)})})]},t.toString()+s)}))})]}),(0,a.jsx)(ld,{models:(null==r?void 0:r.data)?r.data.map(e=>e.model_name):[],accessToken:l,routerSettings:o,setRouterSettings:i})]}),(0,a.jsx)(eB.Z,{children:(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eZ.Z,{children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"Setting"}),(0,a.jsx)(ek.Z,{children:"Value"}),(0,a.jsx)(ek.Z,{children:"Status"}),(0,a.jsx)(ek.Z,{children:"Action"})]})}),(0,a.jsx)(e_.Z,{children:m.map((e,l)=>(0,a.jsxs)(ev.Z,{children:[(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(es.Z,{children:e.field_name}),(0,a.jsx)("p",{style:{fontSize:"0.65rem",color:"#808080",fontStyle:"italic"},className:"mt-1",children:e.field_description})]}),(0,a.jsx)(ew.Z,{children:"Integer"==e.field_type?(0,a.jsx)(ed.Z,{step:1,value:e.field_value,onChange:l=>v(e.field_name,l)}):null}),(0,a.jsx)(ew.Z,{children:!0==e.stored_in_db?(0,a.jsx)(eg.Z,{icon:eQ.Z,className:"text-white",children:"In DB"}):!1==e.stored_in_db?(0,a.jsx)(eg.Z,{className:"text-gray bg-white outline",children:"In Config"}):(0,a.jsx)(eg.Z,{className:"text-gray bg-white outline",children:"Not Set"})}),(0,a.jsxs)(ew.Z,{children:[(0,a.jsx)(X.Z,{onClick:()=>S(e.field_name,l),children:"Update"}),(0,a.jsx)(ey.Z,{icon:ej.Z,color:"red",onClick:()=>N(e.field_name,l),children:"Reset"})]})]},l))})]})})})]})]})}):null},lj=t(67951),lg=e=>{let{}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)($.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsxs)("div",{className:"mb-5",children:[(0,a.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,a.jsx)(es.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eK.Z,{children:[(0,a.jsx)(eU.Z,{children:"OpenAI Python SDK"}),(0,a.jsx)(eU.Z,{children:"LlamaIndex"}),(0,a.jsx)(eU.Z,{children:"Langchain Py"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsx)(lj.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,a.jsx)(eB.Z,{children:(0,a.jsx)(lj.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,a.jsx)(eB.Z,{children:(0,a.jsx)(lj.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})};async function lf(e,l,t,s){console.log("isLocal:",!1);let r=window.location.origin,a=new lm.ZP.OpenAI({apiKey:s,baseURL:r,dangerouslyAllowBrowser:!0});try{for await(let s of(await a.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){u.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var ly=e=>{let{accessToken:l,token:t,userRole:s,userID:r}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{let e=await N(l,r,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,r,s]);let g=(e,l)=>{u(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},f=async()=>{if(""!==c.trim()&&o&&t&&s&&r){u(e=>[...e,{role:"user",content:c}]);try{h&&await lf(c,e=>g("assistant",e),h,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eR.default;return(0,a.jsxs)("div",{children:[(0,a.jsx)(e,{level:1,children:"Access Denied"}),(0,a.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,a.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,a.jsx)($.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,a.jsx)(ef.Z,{children:(0,a.jsxs)(eD.Z,{children:[(0,a.jsx)(eK.Z,{children:(0,a.jsx)(eU.Z,{children:"Chat"})}),(0,a.jsx)(ez.Z,{children:(0,a.jsxs)(eB.Z,{children:[(0,a.jsx)("div",{className:"sm:max-w-2xl",children:(0,a.jsxs)($.Z,{numItems:2,children:[(0,a.jsxs)(H.Z,{children:[(0,a.jsx)(es.Z,{children:"API Key"}),(0,a.jsx)(Q.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,a.jsxs)(H.Z,{className:"mx-2",children:[(0,a.jsx)(es.Z,{children:"Select Model:"}),(0,a.jsx)(en.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,a.jsxs)(eZ.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,a.jsx)(eb.Z,{children:(0,a.jsx)(ev.Z,{children:(0,a.jsx)(ew.Z,{})})}),(0,a.jsx)(e_.Z,{children:m.map((e,l)=>(0,a.jsx)(ev.Z,{children:(0,a.jsx)(ew.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,a.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)(Q.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,a.jsx)(X.Z,{onClick:f,className:"ml-2",children:"Send"})]})})]})})]})})})})},lZ=t(33509),l_=t(95781);let{Sider:lw}=lZ.default;var lb=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,a.jsx)(lZ.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,a.jsx)(lw,{width:120,children:(0,a.jsxs)(l_.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(l_.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,a.jsx)(lZ.default,{style:{minHeight:"100vh",maxWidth:"145px"},children:(0,a.jsx)(lw,{width:145,children:(0,a.jsxs)(l_.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,a.jsx)(l_.Z.Item,{onClick:()=>l("api-keys"),children:(0,a.jsx)(es.Z,{children:"API Keys"})},"1"),(0,a.jsx)(l_.Z.Item,{onClick:()=>l("llm-playground"),children:(0,a.jsx)(es.Z,{children:"Test Key"})},"3"),"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("models"),children:(0,a.jsx)(es.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("usage"),children:(0,a.jsx)(es.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("teams"),children:(0,a.jsx)(es.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("users"),children:(0,a.jsx)(es.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("settings"),children:(0,a.jsx)(es.Z,{children:"Logging & Alerts"})},"8"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("general-settings"),children:(0,a.jsx)(es.Z,{children:"Router Settings"})},"9"):null,"Admin"==t?(0,a.jsx)(l_.Z.Item,{onClick:()=>l("admin-panel"),children:(0,a.jsx)(es.Z,{children:"Admin"})},"7"):null,(0,a.jsx)(l_.Z.Item,{onClick:()=>l("api_ref"),children:(0,a.jsx)(es.Z,{children:"API Reference"})},"11")]})})})},lk=t(67989),lv=e=>{let{accessToken:l,token:t,userRole:s,userID:r,keys:o}=e,i=new Date,[c,d]=(0,n.useState)([]),[m,u]=(0,n.useState)([]),[h,x]=(0,n.useState)([]),[p,j]=(0,n.useState)([]),[g,f]=(0,n.useState)([]),[y,Z]=(0,n.useState)([]),[_,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,S]=(0,n.useState)(""),[N,R]=(0,n.useState)({from:new Date(Date.now()-6048e5),to:new Date}),M=new Date(i.getFullYear(),i.getMonth(),1),L=new Date(i.getFullYear(),i.getMonth()+1,0),U=z(M),D=z(L);console.log("keys in usage",o);let K=async(e,t,s)=>{if(!e||!t||!l)return;console.log("uiSelectedKey",s);let r=await T(l,s,e.toISOString(),t.toISOString());console.log("End user data updated successfully",r),j(r)},B=async(e,t)=>{e&&t&&l&&(Z((await E(l,e.toISOString(),t.toISOString())).spend_per_tag),console.log("Tag spend data updated successfully"))};function z(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(U)),console.log("End date is ".concat(D)),(0,n.useEffect)(()=>{l&&t&&s&&r&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){var e,a;let t=await C(l);d(t);let s=(await P(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));u(s);let r=(await O(l)).map(e=>({key:e.model,spend:e.total_spend}));x(r);let n=await A(l);console.log("teamSpend",n),f(n.daily_spend),w(n.teams);let o=n.total_spend_per_team;o=o.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(o);let i=await E(l,null===(e=N.from)||void 0===e?void 0:e.toISOString(),null===(a=N.to)||void 0===a?void 0:a.toISOString());Z(i.spend_per_tag);let c=await T(l,null,void 0,void 0);j(c),console.log("spend/user result",c)}else"App Owner"==s&&await I(l,t,s,r,U,D).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),d(l);let t=e.top_api_keys;u(t)}else{let t=(await F(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));u(t),d(e)}})}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,r,U,D]),(0,a.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,a.jsx)(eP,{userID:r,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,a.jsxs)(eD.Z,{children:[(0,a.jsxs)(eK.Z,{className:"mt-2",children:[(0,a.jsx)(eU.Z,{children:"All Up"}),(0,a.jsx)(eU.Z,{children:"Team Based Usage"}),(0,a.jsx)(eU.Z,{children:"End User Usage"}),(0,a.jsx)(eU.Z,{children:"Tag Based Usage"})]}),(0,a.jsxs)(ez.Z,{children:[(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsx)(H.Z,{numColSpan:2,children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Monthly Spend"}),(0,a.jsx)(eY.Z,{data:c,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Top API Keys"}),(0,a.jsx)(eY.Z,{className:"mt-4 h-40",data:m,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(H.Z,{numColSpan:1,children:(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Top Models"}),(0,a.jsx)(eY.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,a.jsx)(H.Z,{numColSpan:1})]})}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,a.jsxs)(H.Z,{numColSpan:2,children:[(0,a.jsxs)(ef.Z,{className:"mb-2",children:[(0,a.jsx)(er.Z,{children:"Total Spend Per Team"}),(0,a.jsx)(lk.Z,{data:b})]}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Daily Spend Per Team"}),(0,a.jsx)(eY.Z,{className:"h-72",data:g,showLegend:!0,index:"date",categories:_,yAxisWidth:80,colors:["blue","green","yellow","red","purple"],stack:!0})]})]}),(0,a.jsx)(H.Z,{numColSpan:2})]})}),(0,a.jsxs)(eB.Z,{children:[(0,a.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["End-Users of your LLM API calls. Tracked when a `user` param is passed in your LLM calls ",(0,a.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,a.jsxs)($.Z,{numItems:2,children:[(0,a.jsxs)(H.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Time Range"}),(0,a.jsx)(eL.Z,{enableSelect:!0,value:N,onValueChange:e=>{R(e),K(e.from,e.to,null)}})]}),(0,a.jsxs)(H.Z,{children:[(0,a.jsx)(es.Z,{children:"Select Key"}),(0,a.jsxs)(eS.Z,{defaultValue:"all-keys",children:[(0,a.jsx)(eN.Z,{value:"all-keys",onClick:()=>{K(N.from,N.to,null)},children:"All Keys"},"all-keys"),null==o?void 0:o.map((e,l)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,a.jsx)(eN.Z,{value:String(l),onClick:()=>{K(N.from,N.to,e.token)},children:e.key_alias},l):null)]})]})]}),(0,a.jsx)(ef.Z,{className:"mt-4",children:(0,a.jsxs)(eZ.Z,{className:"max-h-[70vh] min-h-[500px]",children:[(0,a.jsx)(eb.Z,{children:(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ek.Z,{children:"End User"}),(0,a.jsx)(ek.Z,{children:"Spend"}),(0,a.jsx)(ek.Z,{children:"Total Events"})]})}),(0,a.jsx)(e_.Z,{children:null==p?void 0:p.map((e,l)=>{var t;return(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ew.Z,{children:e.end_user}),(0,a.jsx)(ew.Z,{children:null===(t=e.total_spend)||void 0===t?void 0:t.toFixed(4)}),(0,a.jsx)(ew.Z,{children:e.total_count})]},l)})})]})})]}),(0,a.jsx)(eB.Z,{children:(0,a.jsxs)($.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,a.jsxs)(H.Z,{numColSpan:2,children:[(0,a.jsx)(eL.Z,{className:"mb-4",enableSelect:!0,value:N,onValueChange:e=>{R(e),B(e.from,e.to)}}),(0,a.jsxs)(ef.Z,{children:[(0,a.jsx)(er.Z,{children:"Spend Per Tag"}),(0,a.jsxs)(es.Z,{children:["Get Started Tracking cost per tag ",(0,a.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,a.jsx)(eY.Z,{className:"h-72",data:y,index:"name",categories:["spend"],colors:["blue"]})]})]}),(0,a.jsx)(H.Z,{numColSpan:2})]})})]})]})]})},lS=()=>{let{Title:e,Paragraph:l}=eR.default,[t,s]=(0,n.useState)(""),[r,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),[g,f]=(0,n.useState)({data:[]}),y=j.get("userID"),Z=j.get("token"),[_,w]=(0,n.useState)("api-keys"),[b,k]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(Z){let e=(0,eF.o)(Z);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),k(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&w("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[Z]),(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{children:"Loading..."}),children:(0,a.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,a.jsx)(m,{userID:y,userRole:t,userEmail:r,showSSOBanner:x}),(0,a.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,a.jsx)("div",{className:"mt-8",children:(0,a.jsx)(lb,{setPage:w,userRole:t,defaultSelectedKey:null})}),"api-keys"==_?(0,a.jsx)(eM,{userID:y,userRole:t,teams:c,keys:u,setUserRole:s,userEmail:r,setUserEmail:i,setTeams:d,setKeys:h}):"models"==_?(0,a.jsx)(e9,{userID:y,userRole:t,token:Z,accessToken:b,modelData:g,setModelData:f}):"llm-playground"==_?(0,a.jsx)(ly,{userID:y,userRole:t,token:Z,accessToken:b}):"users"==_?(0,a.jsx)(lt,{userID:y,userRole:t,token:Z,keys:u,teams:c,accessToken:b,setKeys:h}):"teams"==_?(0,a.jsx)(ls,{teams:c,setTeams:d,searchParams:j,accessToken:b,userID:y,userRole:t}):"admin-panel"==_?(0,a.jsx)(la,{setTeams:d,searchParams:j,accessToken:b,showSSOBanner:x}):"api_ref"==_?(0,a.jsx)(lg,{}):"settings"==_?(0,a.jsx)(li,{userID:y,userRole:t,accessToken:b}):"general-settings"==_?(0,a.jsx)(lp,{userID:y,userRole:t,accessToken:b,modelData:g}):(0,a.jsx)(lv,{userID:y,userRole:t,token:Z,accessToken:b,keys:u})]})]})})}}},function(e){e.O(0,[936,884,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/index.html b/ui/litellm-dashboard/out/index.html index 930018e0059..011bb7fc768 100644 --- a/ui/litellm-dashboard/out/index.html +++ b/ui/litellm-dashboard/out/index.html @@ -1 +1 @@ -LiteLLM Dashboard \ No newline at end of file +LiteLLM Dashboard \ No newline at end of file diff --git a/ui/litellm-dashboard/out/index.txt b/ui/litellm-dashboard/out/index.txt index d67a480b373..ce4099b2cd4 100644 --- a/ui/litellm-dashboard/out/index.txt +++ b/ui/litellm-dashboard/out/index.txt @@ -1,7 +1,7 @@ 2:I[77831,[],""] -3:I[7926,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-6a39771cacf75ea6.js"],""] +3:I[4858,["936","static/chunks/2f6dbc85-052c4579f80d66ae.js","884","static/chunks/884-7576ee407a2ecbe6.js","931","static/chunks/app/page-c35c14c9afd091ec.js"],""] 4:I[5613,[],""] 5:I[31778,[],""] -0:["obp5wqVSVDMiDTC414cR8",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/f04e46b02318b660.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] +0:["2ASoJGxS-D4w-vat00xMy",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},["$L1",["$","$L2",null,{"propsForComponent":{"params":{}},"Component":"$3","isStaticGeneration":true}],null]]},[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_c23dc8","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/ui/_next/static/css/f04e46b02318b660.css","precedence":"next","crossOrigin":""}]],"$L6"]]]] 6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"LiteLLM Dashboard"}],["$","meta","3",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","4",{"rel":"icon","href":"/ui/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","meta","5",{"name":"next-size-adjust"}]] 1:null From f48cd87cf34a2bfd9fbefec99c6711d5c2e1a0e4 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 21:05:14 -0700 Subject: [PATCH 351/378] feat(proxy_server.py): make team_id optional for jwt token auth (only enforced, if set) Allows users to use jwt auth for internal chat apps --- litellm/proxy/_types.py | 2 +- litellm/proxy/auth/auth_checks.py | 11 ++++-- litellm/proxy/auth/handle_jwt.py | 24 ++++++++++--- litellm/proxy/proxy_server.py | 57 ++++++++++++++++--------------- litellm/tests/test_jwt.py | 49 ++++++++++++++++---------- 5 files changed, 89 insertions(+), 54 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index b1af153e81f..a835f87e276 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -228,7 +228,7 @@ class LiteLLM_JWTAuth(LiteLLMBase): "info_routes", ] team_jwt_scope: str = "litellm_team" - team_id_jwt_field: str = "client_id" + team_id_jwt_field: Optional[str] = None team_allowed_routes: List[ Literal["openai_routes", "info_routes", "management_routes"] ] = ["openai_routes", "info_routes"] diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index 62e5eba0132..b5eb0c4b393 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -26,7 +26,7 @@ all_routes = LiteLLMRoutes.openai_routes.value + LiteLLMRoutes.management_routes def common_checks( request_body: dict, - team_object: LiteLLM_TeamTable, + team_object: Optional[LiteLLM_TeamTable], user_object: Optional[LiteLLM_UserTable], end_user_object: Optional[LiteLLM_EndUserTable], global_proxy_spend: Optional[float], @@ -45,13 +45,14 @@ def common_checks( 6. [OPTIONAL] If 'litellm.max_budget' is set (>0), is proxy under budget """ _model = request_body.get("model", None) - if team_object.blocked == True: + if team_object is not None and team_object.blocked == True: raise Exception( f"Team={team_object.team_id} is blocked. Update via `/team/unblock` if your admin." ) # 2. If user can call model if ( _model is not None + and team_object is not None and len(team_object.models) > 0 and _model not in team_object.models ): @@ -65,7 +66,8 @@ def common_checks( ) # 3. If team is in budget if ( - team_object.max_budget is not None + team_object is not None + and team_object.max_budget is not None and team_object.spend is not None and team_object.spend > team_object.max_budget ): @@ -305,6 +307,9 @@ async def get_team_object( if response is None: raise Exception + # save the team object to cache + await user_api_key_cache.async_set_cache(key=response.team_id, value=response) + return LiteLLM_TeamTable(**response.dict()) except Exception as e: raise Exception( diff --git a/litellm/proxy/auth/handle_jwt.py b/litellm/proxy/auth/handle_jwt.py index 18c0d7b2cec..6dbe214deef 100644 --- a/litellm/proxy/auth/handle_jwt.py +++ b/litellm/proxy/auth/handle_jwt.py @@ -60,7 +60,9 @@ class JWTHandler: return True return False - def get_end_user_id(self, token: dict, default_value: Optional[str]) -> str: + def get_end_user_id( + self, token: dict, default_value: Optional[str] + ) -> Optional[str]: try: if self.litellm_jwtauth.end_user_id_jwt_field is not None: user_id = token[self.litellm_jwtauth.end_user_id_jwt_field] @@ -70,6 +72,16 @@ class JWTHandler: user_id = default_value return user_id + def is_required_team_id(self) -> bool: + """ + Returns: + - True: if 'team_id_jwt_field' is set + - False: if not + """ + if self.litellm_jwtauth.team_id_jwt_field is None: + return False + return True + def get_team_id(self, token: dict, default_value: Optional[str]) -> Optional[str]: try: team_id = token[self.litellm_jwtauth.team_id_jwt_field] @@ -165,7 +177,7 @@ class JWTHandler: decode_options = None if audience is None: decode_options = {"verify_aud": False} - + from jwt.algorithms import RSAAlgorithm header = jwt.get_unverified_header(token) @@ -207,12 +219,14 @@ class JWTHandler: raise Exception(f"Validation fails: {str(e)}") elif public_key is not None and isinstance(public_key, str): try: - cert = x509.load_pem_x509_certificate(public_key.encode(), default_backend()) + cert = x509.load_pem_x509_certificate( + public_key.encode(), default_backend() + ) # Extract public key key = cert.public_key().public_bytes( serialization.Encoding.PEM, - serialization.PublicFormat.SubjectPublicKeyInfo + serialization.PublicFormat.SubjectPublicKeyInfo, ) # decode the token using the public key @@ -221,7 +235,7 @@ class JWTHandler: key, algorithms=algorithms, audience=audience, - options=decode_options + options=decode_options, ) return payload diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e9324dd96d5..e66f2d6dbc0 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -440,29 +440,32 @@ async def user_api_key_auth( # get team id team_id = jwt_handler.get_team_id(token=valid_token, default_value=None) - if team_id is None: + if team_id is None and jwt_handler.is_required_team_id() == True: raise Exception( f"No team id passed in. Field checked in jwt token - '{jwt_handler.litellm_jwtauth.team_id_jwt_field}'" ) - # check allowed team routes - is_allowed = allowed_routes_check( - user_role="team", - user_route=route, - litellm_proxy_roles=jwt_handler.litellm_jwtauth, - ) - if is_allowed == False: - allowed_routes = jwt_handler.litellm_jwtauth.team_allowed_routes # type: ignore - actual_routes = get_actual_routes(allowed_routes=allowed_routes) - raise Exception( - f"Team not allowed to access this route. Route={route}, Allowed Routes={actual_routes}" - ) - # check if team in db - team_object = await get_team_object( - team_id=team_id, - prisma_client=prisma_client, - user_api_key_cache=user_api_key_cache, - ) + team_object: Optional[LiteLLM_TeamTable] = None + if team_id is not None: + # check allowed team routes + is_allowed = allowed_routes_check( + user_role="team", + user_route=route, + litellm_proxy_roles=jwt_handler.litellm_jwtauth, + ) + if is_allowed == False: + allowed_routes = jwt_handler.litellm_jwtauth.team_allowed_routes # type: ignore + actual_routes = get_actual_routes(allowed_routes=allowed_routes) + raise Exception( + f"Team not allowed to access this route. Route={route}, Allowed Routes={actual_routes}" + ) + + # check if team in db + team_object = await get_team_object( + team_id=team_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + ) # [OPTIONAL] track spend for an org id - `LiteLLM_OrganizationTable` org_id = jwt_handler.get_org_id(token=valid_token, default_value=None) @@ -547,18 +550,18 @@ async def user_api_key_auth( global_proxy_spend=global_proxy_spend, route=route, ) - # save team object in cache - await user_api_key_cache.async_set_cache( - key=team_object.team_id, value=team_object - ) # return UserAPIKeyAuth object return UserAPIKeyAuth( api_key=None, - team_id=team_object.team_id, - team_tpm_limit=team_object.tpm_limit, - team_rpm_limit=team_object.rpm_limit, - team_models=team_object.models, + team_id=team_object.team_id if team_object is not None else None, + team_tpm_limit=( + team_object.tpm_limit if team_object is not None else None + ), + team_rpm_limit=( + team_object.rpm_limit if team_object is not None else None + ), + team_models=team_object.models if team_object is not None else [], user_role="app_owner", user_id=user_id, org_id=org_id, diff --git a/litellm/tests/test_jwt.py b/litellm/tests/test_jwt.py index b3af9913f66..6a0e5c427f1 100644 --- a/litellm/tests/test_jwt.py +++ b/litellm/tests/test_jwt.py @@ -24,6 +24,7 @@ public_key = { "alg": "RS256", } + def test_load_config_with_custom_role_names(): config = { "general_settings": { @@ -77,7 +78,8 @@ async def test_token_single_public_key(): == "qIgOQfEVrrErJC0E7gsHXi6rs_V0nyFY5qPFui2-tv0o4CwpwDzgfBtLO7o_wLiguq0lnu54sMT2eLNoRiiPuLvv6bg7Iy1H9yc5_4Jf5oYEOrqN5o9ZBOoYp1q68Pv0oNJYyZdGu5ZJfd7V4y953vB2XfEKgXCsAkhVhlvIUMiDNKWoMDWsyb2xela5tRURZ2mJAXcHfSC_sYdZxIA2YYrIHfoevq_vTlaz0qVSe_uOKjEpgOAS08UUrgda4CQL11nzICiIQzc6qmjIQt2cjzB2D_9zb4BYndzEtfl0kwAT0z_I85S3mkwTqHU-1BvKe_4MG4VG3dAAeffLPXJyXQ" ) -@pytest.mark.parametrize('audience', [None, "litellm-proxy"]) + +@pytest.mark.parametrize("audience", [None, "litellm-proxy"]) @pytest.mark.asyncio async def test_valid_invalid_token(audience): """ @@ -90,7 +92,7 @@ async def test_valid_invalid_token(audience): from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.backends import default_backend - os.environ.pop('JWT_AUDIENCE', None) + os.environ.pop("JWT_AUDIENCE", None) if audience: os.environ["JWT_AUDIENCE"] = audience @@ -138,7 +140,7 @@ async def test_valid_invalid_token(audience): "sub": "user123", "exp": expiration_time, # set the token to expire in 10 minutes "scope": "litellm-proxy-admin", - "aud": audience + "aud": audience, } # Generate the JWT token @@ -166,7 +168,7 @@ async def test_valid_invalid_token(audience): "sub": "user123", "exp": expiration_time, # set the token to expire in 10 minutes "scope": "litellm-NO-SCOPE", - "aud": audience + "aud": audience, } # Generate the JWT token @@ -183,6 +185,7 @@ async def test_valid_invalid_token(audience): except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") + @pytest.fixture def prisma_client(): import litellm @@ -205,7 +208,7 @@ def prisma_client(): return prisma_client -@pytest.mark.parametrize('audience', [None, "litellm-proxy"]) +@pytest.mark.parametrize("audience", [None, "litellm-proxy"]) @pytest.mark.asyncio async def test_team_token_output(prisma_client, audience): import jwt, json @@ -222,7 +225,7 @@ async def test_team_token_output(prisma_client, audience): setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) await litellm.proxy.proxy_server.prisma_client.connect() - os.environ.pop('JWT_AUDIENCE', None) + os.environ.pop("JWT_AUDIENCE", None) if audience: os.environ["JWT_AUDIENCE"] = audience @@ -261,7 +264,7 @@ async def test_team_token_output(prisma_client, audience): jwt_handler.user_api_key_cache = cache - jwt_handler.litellm_jwtauth = LiteLLM_JWTAuth() + jwt_handler.litellm_jwtauth = LiteLLM_JWTAuth(team_id_jwt_field="client_id") # VALID TOKEN ## GENERATE A TOKEN @@ -274,7 +277,7 @@ async def test_team_token_output(prisma_client, audience): "exp": expiration_time, # set the token to expire in 10 minutes "scope": "litellm_team", "client_id": team_id, - "aud": audience + "aud": audience, } # Generate the JWT token @@ -289,7 +292,7 @@ async def test_team_token_output(prisma_client, audience): "sub": "user123", "exp": expiration_time, # set the token to expire in 10 minutes "scope": "litellm_proxy_admin", - "aud": audience + "aud": audience, } admin_token = jwt.encode(payload, private_key_str, algorithm="RS256") @@ -315,7 +318,13 @@ async def test_team_token_output(prisma_client, audience): ## 1. INITIAL TEAM CALL - should fail # use generated key to auth in - setattr(litellm.proxy.proxy_server, "general_settings", {"enable_jwt_auth": True}) + setattr( + litellm.proxy.proxy_server, + "general_settings", + { + "enable_jwt_auth": True, + }, + ) setattr(litellm.proxy.proxy_server, "jwt_handler", jwt_handler) try: result = await user_api_key_auth(request=request, api_key=bearer_token) @@ -358,9 +367,10 @@ async def test_team_token_output(prisma_client, audience): assert team_result.team_models == ["gpt-3.5-turbo", "gpt-4"] -@pytest.mark.parametrize('audience', [None, "litellm-proxy"]) +@pytest.mark.parametrize("audience", [None, "litellm-proxy"]) +@pytest.mark.parametrize("team_id_set", [True, False]) @pytest.mark.asyncio -async def test_user_token_output(prisma_client, audience): +async def test_user_token_output(prisma_client, audience, team_id_set): """ - If user required, check if it exists - fail initial request (when user doesn't exist) @@ -381,7 +391,7 @@ async def test_user_token_output(prisma_client, audience): setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) await litellm.proxy.proxy_server.prisma_client.connect() - os.environ.pop('JWT_AUDIENCE', None) + os.environ.pop("JWT_AUDIENCE", None) if audience: os.environ["JWT_AUDIENCE"] = audience @@ -423,6 +433,8 @@ async def test_user_token_output(prisma_client, audience): jwt_handler.litellm_jwtauth = LiteLLM_JWTAuth() jwt_handler.litellm_jwtauth.user_id_jwt_field = "sub" + if team_id_set: + jwt_handler.litellm_jwtauth.team_id_jwt_field = "client_id" # VALID TOKEN ## GENERATE A TOKEN @@ -436,7 +448,7 @@ async def test_user_token_output(prisma_client, audience): "exp": expiration_time, # set the token to expire in 10 minutes "scope": "litellm_team", "client_id": team_id, - "aud": audience + "aud": audience, } # Generate the JWT token @@ -451,7 +463,7 @@ async def test_user_token_output(prisma_client, audience): "sub": user_id, "exp": expiration_time, # set the token to expire in 10 minutes "scope": "litellm_proxy_admin", - "aud": audience + "aud": audience, } admin_token = jwt.encode(payload, private_key_str, algorithm="RS256") @@ -543,7 +555,8 @@ async def test_user_token_output(prisma_client, audience): ## 6. ASSERT USER_API_KEY_AUTH format (used for tpm/rpm limiting in parallel_request_limiter.py AND cost tracking) - assert team_result.team_tpm_limit == 100 - assert team_result.team_rpm_limit == 99 - assert team_result.team_models == ["gpt-3.5-turbo", "gpt-4"] + if team_id_set: + assert team_result.team_tpm_limit == 100 + assert team_result.team_rpm_limit == 99 + assert team_result.team_models == ["gpt-3.5-turbo", "gpt-4"] assert team_result.user_id == user_id From bb86d2510f5cc5d3ddfb9afc29d184580a36983c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 21:07:55 -0700 Subject: [PATCH 352/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 4aa967848f7..120a65acbf7 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -38,7 +38,7 @@ def reset_callbacks(): @pytest.mark.skip(reason="Local test") def test_response_model_none(): """ - Addresses: https://github.com/BerriAI/litellm/issues/2972 + Addresses:https://github.com/BerriAI/litellm/issues/2972 """ x = completion( model="mymodel", From 99653d2d3ef1e2ba429325b12945229298fbb434 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 21:33:35 -0700 Subject: [PATCH 353/378] feat(handle_jwt.py): add support for 'team_id_default allows admin to set a default team id for spend-tracking + permissions --- litellm/proxy/_super_secret_config.yaml | 3 +++ litellm/proxy/_types.py | 8 +++++++- litellm/proxy/auth/handle_jwt.py | 12 ++++++------ litellm/tests/test_jwt.py | 23 ++++++++++++++++++++--- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml index 98191aa043b..eae0cbf4ad2 100644 --- a/litellm/proxy/_super_secret_config.yaml +++ b/litellm/proxy/_super_secret_config.yaml @@ -36,6 +36,9 @@ litellm_settings: general_settings: enable_jwt_auth: True + litellm_jwtauth: + team_id_default: "1234" + upsert_users: True disable_reset_budget: True proxy_batch_write_at: 60 # 👈 Frequency of batch writing logs to server (in seconds) routing_strategy: simple-shuffle # Literal["simple-shuffle", "least-busy", "usage-based-routing","latency-based-routing"], default="simple-shuffle" diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index a835f87e276..6af8145d1d3 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -227,13 +227,19 @@ class LiteLLM_JWTAuth(LiteLLMBase): "global_spend_tracking_routes", "info_routes", ] - team_jwt_scope: str = "litellm_team" team_id_jwt_field: Optional[str] = None team_allowed_routes: List[ Literal["openai_routes", "info_routes", "management_routes"] ] = ["openai_routes", "info_routes"] + team_id_default: Optional[str] = Field( + default=None, + description="If no team_id given, default permissions/spend-tracking to this team.s", + ) org_id_jwt_field: Optional[str] = None user_id_jwt_field: Optional[str] = None + user_id_upsert: bool = Field( + default=False, description="If user doesn't exist, upsert them into the db." + ) end_user_id_jwt_field: Optional[str] = None public_key_ttl: float = 600 diff --git a/litellm/proxy/auth/handle_jwt.py b/litellm/proxy/auth/handle_jwt.py index 6dbe214deef..de357030d22 100644 --- a/litellm/proxy/auth/handle_jwt.py +++ b/litellm/proxy/auth/handle_jwt.py @@ -55,11 +55,6 @@ class JWTHandler: return True return False - def is_team(self, scopes: list) -> bool: - if self.litellm_jwtauth.team_jwt_scope in scopes: - return True - return False - def get_end_user_id( self, token: dict, default_value: Optional[str] ) -> Optional[str]: @@ -84,7 +79,12 @@ class JWTHandler: def get_team_id(self, token: dict, default_value: Optional[str]) -> Optional[str]: try: - team_id = token[self.litellm_jwtauth.team_id_jwt_field] + if self.litellm_jwtauth.team_id_jwt_field is not None: + team_id = token[self.litellm_jwtauth.team_id_jwt_field] + elif self.litellm_jwtauth.team_id_default is not None: + team_id = self.litellm_jwtauth.team_id_default + else: + team_id = None except KeyError: team_id = default_value return team_id diff --git a/litellm/tests/test_jwt.py b/litellm/tests/test_jwt.py index 6a0e5c427f1..dd89f18e9d6 100644 --- a/litellm/tests/test_jwt.py +++ b/litellm/tests/test_jwt.py @@ -368,9 +368,14 @@ async def test_team_token_output(prisma_client, audience): @pytest.mark.parametrize("audience", [None, "litellm-proxy"]) -@pytest.mark.parametrize("team_id_set", [True, False]) +@pytest.mark.parametrize( + "team_id_set, default_team_id", [(True, None), (False, "1234")] +) +@pytest.mark.parametrize("user_id_upsert", [True, False]) @pytest.mark.asyncio -async def test_user_token_output(prisma_client, audience, team_id_set): +async def test_user_token_output( + prisma_client, audience, team_id_set, default_team_id, user_id_upsert +): """ - If user required, check if it exists - fail initial request (when user doesn't exist) @@ -433,6 +438,8 @@ async def test_user_token_output(prisma_client, audience, team_id_set): jwt_handler.litellm_jwtauth = LiteLLM_JWTAuth() jwt_handler.litellm_jwtauth.user_id_jwt_field = "sub" + jwt_handler.litellm_jwtauth.team_id_default = default_team_id + if team_id_set: jwt_handler.litellm_jwtauth.team_id_jwt_field = "client_id" @@ -515,6 +522,16 @@ async def test_user_token_output(prisma_client, audience, team_id_set): ), user_api_key_dict=result, ) + if default_team_id is not None: + await new_team( + data=NewTeamRequest( + team_id=default_team_id, + tpm_limit=100, + rpm_limit=99, + models=["gpt-3.5-turbo", "gpt-4"], + ), + user_api_key_dict=result, + ) except Exception as e: pytest.fail(f"This should not fail - {str(e)}") @@ -555,7 +572,7 @@ async def test_user_token_output(prisma_client, audience, team_id_set): ## 6. ASSERT USER_API_KEY_AUTH format (used for tpm/rpm limiting in parallel_request_limiter.py AND cost tracking) - if team_id_set: + if team_id_set or default_team_id is not None: assert team_result.team_tpm_limit == 100 assert team_result.team_rpm_limit == 99 assert team_result.team_models == ["gpt-3.5-turbo", "gpt-4"] From 600b6f7e1dc9b8bdc97a9baf66e8280978a2c32a Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 22:19:59 -0700 Subject: [PATCH 354/378] feat(proxy_server.py): support 'user_id_upsert' flag for jwt_auth --- litellm/proxy/_super_secret_config.yaml | 3 +- litellm/proxy/auth/auth_checks.py | 29 +++++++++---- litellm/proxy/auth/handle_jwt.py | 8 ++++ litellm/proxy/proxy_server.py | 6 +-- litellm/tests/test_jwt.py | 57 ++++++++++++++++++------- 5 files changed, 74 insertions(+), 29 deletions(-) diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml index eae0cbf4ad2..3fa3d1e9a6e 100644 --- a/litellm/proxy/_super_secret_config.yaml +++ b/litellm/proxy/_super_secret_config.yaml @@ -38,7 +38,8 @@ general_settings: enable_jwt_auth: True litellm_jwtauth: team_id_default: "1234" - upsert_users: True + user_id_jwt_field: + user_id_upsert: True disable_reset_budget: True proxy_batch_write_at: 60 # 👈 Frequency of batch writing logs to server (in seconds) routing_strategy: simple-shuffle # Literal["simple-shuffle", "least-busy", "usage-based-routing","latency-based-routing"], default="simple-shuffle" diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index b5eb0c4b393..08da25556d6 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -241,6 +241,7 @@ async def get_user_object( user_id: str, prisma_client: Optional[PrismaClient], user_api_key_cache: DualCache, + user_id_upsert: bool, ) -> Optional[LiteLLM_UserTable]: """ - Check if user id in proxy User Table @@ -254,7 +255,7 @@ async def get_user_object( return None # check if in cache - cached_user_obj = user_api_key_cache.async_get_cache(key=user_id) + cached_user_obj = await user_api_key_cache.async_get_cache(key=user_id) if cached_user_obj is not None: if isinstance(cached_user_obj, dict): return LiteLLM_UserTable(**cached_user_obj) @@ -262,16 +263,27 @@ async def get_user_object( return cached_user_obj # else, check db try: + response = await prisma_client.db.litellm_usertable.find_unique( where={"user_id": user_id} ) if response is None: - raise Exception + if user_id_upsert: + response = await prisma_client.db.litellm_usertable.create( + data={"user_id": user_id} + ) + else: + raise Exception - return LiteLLM_UserTable(**response.dict()) - except Exception as e: # if end-user not in db - raise Exception( + _response = LiteLLM_UserTable(**dict(response)) + + # save the user object to cache + await user_api_key_cache.async_set_cache(key=user_id, value=_response) + + return _response + except Exception as e: # if user not in db + raise ValueError( f"User doesn't exist in db. 'user_id'={user_id}. Create user via `/user/new` call." ) @@ -292,7 +304,7 @@ async def get_team_object( ) # check if in cache - cached_team_obj = user_api_key_cache.async_get_cache(key=team_id) + cached_team_obj = await user_api_key_cache.async_get_cache(key=team_id) if cached_team_obj is not None: if isinstance(cached_team_obj, dict): return LiteLLM_TeamTable(**cached_team_obj) @@ -307,10 +319,11 @@ async def get_team_object( if response is None: raise Exception + _response = LiteLLM_TeamTable(**response.dict()) # save the team object to cache - await user_api_key_cache.async_set_cache(key=response.team_id, value=response) + await user_api_key_cache.async_set_cache(key=response.team_id, value=_response) - return LiteLLM_TeamTable(**response.dict()) + return _response except Exception as e: raise Exception( f"Team doesn't exist in db. Team={team_id}. Create team via `/team/new` call." diff --git a/litellm/proxy/auth/handle_jwt.py b/litellm/proxy/auth/handle_jwt.py index de357030d22..0a186d7ddef 100644 --- a/litellm/proxy/auth/handle_jwt.py +++ b/litellm/proxy/auth/handle_jwt.py @@ -89,6 +89,14 @@ class JWTHandler: team_id = default_value return team_id + def is_upsert_user_id(self) -> bool: + """ + Returns: + - True: if 'user_id_upsert' is set + - False: if not + """ + return self.litellm_jwtauth.user_id_upsert + def get_user_id(self, token: dict, default_value: Optional[str]) -> Optional[str]: try: if self.litellm_jwtauth.user_id_jwt_field is not None: diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e66f2d6dbc0..aa63d92e51a 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -484,11 +484,9 @@ async def user_api_key_auth( user_id=user_id, prisma_client=prisma_client, user_api_key_cache=user_api_key_cache, + user_id_upsert=jwt_handler.is_upsert_user_id(), ) - # save the user object to cache - await user_api_key_cache.async_set_cache( - key=user_id, value=user_object - ) + # [OPTIONAL] track spend against an external user - `LiteLLM_EndUserTable` end_user_object = None end_user_id = jwt_handler.get_end_user_id( diff --git a/litellm/tests/test_jwt.py b/litellm/tests/test_jwt.py index dd89f18e9d6..45f46162907 100644 --- a/litellm/tests/test_jwt.py +++ b/litellm/tests/test_jwt.py @@ -1,7 +1,7 @@ #### What this tests #### # Unit tests for JWT-Auth -import sys, os, asyncio, time, random +import sys, os, asyncio, time, random, uuid import traceback from dotenv import load_dotenv @@ -369,13 +369,20 @@ async def test_team_token_output(prisma_client, audience): @pytest.mark.parametrize("audience", [None, "litellm-proxy"]) @pytest.mark.parametrize( - "team_id_set, default_team_id", [(True, None), (False, "1234")] + "team_id_set, default_team_id", + [(True, False), (False, True)], ) @pytest.mark.parametrize("user_id_upsert", [True, False]) @pytest.mark.asyncio async def test_user_token_output( prisma_client, audience, team_id_set, default_team_id, user_id_upsert ): + import uuid + + args = locals() + print(f"received args - {args}") + if default_team_id: + default_team_id = "team_id_12344_{}".format(uuid.uuid4()) """ - If user required, check if it exists - fail initial request (when user doesn't exist) @@ -388,7 +395,12 @@ async def test_user_token_output( from cryptography.hazmat.backends import default_backend from fastapi import Request from starlette.datastructures import URL - from litellm.proxy.proxy_server import user_api_key_auth, new_team, new_user + from litellm.proxy.proxy_server import ( + user_api_key_auth, + new_team, + new_user, + user_info, + ) from litellm.proxy._types import NewTeamRequest, UserAPIKeyAuth, NewUserRequest import litellm import uuid @@ -439,6 +451,7 @@ async def test_user_token_output( jwt_handler.litellm_jwtauth.user_id_jwt_field = "sub" jwt_handler.litellm_jwtauth.team_id_default = default_team_id + jwt_handler.litellm_jwtauth.user_id_upsert = user_id_upsert if team_id_set: jwt_handler.litellm_jwtauth.team_id_jwt_field = "client_id" @@ -522,7 +535,7 @@ async def test_user_token_output( ), user_api_key_dict=result, ) - if default_team_id is not None: + if default_team_id: await new_team( data=NewTeamRequest( team_id=default_team_id, @@ -542,23 +555,35 @@ async def test_user_token_output( team_result: UserAPIKeyAuth = await user_api_key_auth( request=request, api_key=bearer_token ) - pytest.fail(f"User doesn't exist. this should fail") + if user_id_upsert == False: + pytest.fail(f"User doesn't exist. this should fail") except Exception as e: pass ## 4. Create user - try: - bearer_token = "Bearer " + admin_token + if user_id_upsert: + ## check if user already exists + try: + bearer_token = "Bearer " + admin_token - request._url = URL(url="/team/new") - result = await user_api_key_auth(request=request, api_key=bearer_token) - await new_user( - data=NewUserRequest( - user_id=user_id, - ), - ) - except Exception as e: - pytest.fail(f"This should not fail - {str(e)}") + request._url = URL(url="/team/new") + result = await user_api_key_auth(request=request, api_key=bearer_token) + await user_info(user_id=user_id) + except Exception as e: + pytest.fail(f"This should not fail - {str(e)}") + else: + try: + bearer_token = "Bearer " + admin_token + + request._url = URL(url="/team/new") + result = await user_api_key_auth(request=request, api_key=bearer_token) + await new_user( + data=NewUserRequest( + user_id=user_id, + ), + ) + except Exception as e: + pytest.fail(f"This should not fail - {str(e)}") ## 5. 3rd call w/ same team, same user -> call should succeed bearer_token = "Bearer " + token From 00b9f1290e13ff5e0d4d441c9f801bc94daffb5b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 22:24:49 -0700 Subject: [PATCH 355/378] =?UTF-8?q?bump:=20version=201.37.11=20=E2=86=92?= =?UTF-8?q?=201.37.12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0e1ce812252..55e88c30a24 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.37.11" +version = "1.37.12" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT" @@ -79,7 +79,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.37.11" +version = "1.37.12" version_files = [ "pyproject.toml:^version" ] From b079f4cb79d3da739d2a6a17d501bf7255d8055b Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 07:54:09 -0700 Subject: [PATCH 356/378] model_info_v{1,2} (LiteLLM) => model_list (OpenAI) --- litellm/proxy/_types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 204405cbfd1..d4027f704e7 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -84,8 +84,7 @@ class LiteLLMRoutes(enum.Enum): "image_generation", "audio_transcriptions", "moderations", - "model_info_v1", - "model_info_v2", + "model_list", # OpenAI /v1/models route ] openai_routes: List = [ # chat completions From 848561a8a7f38fc289e3d71773d4ed16dfa37259 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 09:01:27 -0700 Subject: [PATCH 357/378] fix - router show better client side errors --- litellm/router.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 08576f78e10..392a0a0f458 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -3251,7 +3251,7 @@ class Router: if _rate_limit_error == True: # allow generic fallback logic to take place raise ValueError( - f"{RouterErrors.no_deployments_available.value}, passed model={model}" + f"{RouterErrors.no_deployments_available.value}, Try again in {self.cooldown_time} seconds. Passed model={model}. Try again in {self.cooldown_time} seconds." ) elif _context_window_error == True: raise litellm.ContextWindowExceededError( @@ -3323,7 +3323,9 @@ class Router: litellm.print_verbose(f"initial list of deployments: {healthy_deployments}") if len(healthy_deployments) == 0: - raise ValueError(f"No healthy deployment available, passed model={model}. ") + raise ValueError( + f"No healthy deployment available, passed model={model}. Try again in {self.cooldown_time} seconds" + ) if litellm.model_alias_map and model in litellm.model_alias_map: model = litellm.model_alias_map[ model @@ -3413,7 +3415,7 @@ class Router: if _allowed_model_region is None: _allowed_model_region = "n/a" raise ValueError( - f"{RouterErrors.no_deployments_available.value}, passed model={model}. Enable pre-call-checks={self.enable_pre_call_checks}, allowed_model_region={_allowed_model_region}" + f"{RouterErrors.no_deployments_available.value}, Try again in {self.cooldown_time} seconds. Passed model={model}. Enable pre-call-checks={self.enable_pre_call_checks}, allowed_model_region={_allowed_model_region}" ) if ( @@ -3481,7 +3483,7 @@ class Router: f"get_available_deployment for model: {model}, No deployment available" ) raise ValueError( - f"{RouterErrors.no_deployments_available.value}, passed model={model}" + f"{RouterErrors.no_deployments_available.value}, Try again in {self.cooldown_time} seconds. Passed model={model}" ) verbose_router_logger.info( f"get_available_deployment for model: {model}, Selected deployment: {self.print_deployment(deployment)} for model: {model}" @@ -3611,7 +3613,7 @@ class Router: f"get_available_deployment for model: {model}, No deployment available" ) raise ValueError( - f"{RouterErrors.no_deployments_available.value}, passed model={model}" + f"{RouterErrors.no_deployments_available.value}, Try again in {self.cooldown_time} seconds. Passed model={model}" ) verbose_router_logger.info( f"get_available_deployment for model: {model}, Selected deployment: {self.print_deployment(deployment)} for model: {model}" From 579bc09c37103843250f2fd806f83daf5fa37897 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 09:21:48 -0700 Subject: [PATCH 358/378] fix - flush langfuse logs on proxy shutdown --- litellm/proxy/proxy_server.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 83da986f6dc..79d191cd1c0 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -10623,6 +10623,7 @@ def _has_user_setup_sso(): @router.on_event("shutdown") async def shutdown_event(): global prisma_client, master_key, user_custom_auth, user_custom_key_generate + verbose_proxy_logger.info("Shutting down LiteLLM Proxy Server") if prisma_client: verbose_proxy_logger.debug("Disconnecting from Prisma") await prisma_client.disconnect() @@ -10634,6 +10635,18 @@ async def shutdown_event(): if db_writer_client is not None: await db_writer_client.close() + + # flush remaining langfuse logs + if "langfuse" in litellm.success_callback: + try: + # flush langfuse logs on shutdow + from litellm.utils import langFuseLogger + + langFuseLogger.Langfuse.flush() + except: + # [DO NOT BLOCK shutdown events for this] + pass + ## RESET CUSTOM VARIABLES ## cleanup_router_config_variables() From e50284bc7200e7630b7107e886594250db5cdcfc Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 09:47:07 -0700 Subject: [PATCH 359/378] dev - token_counter endpoint --- litellm/proxy/proxy_server.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 83da986f6dc..60ed4c2694b 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4765,6 +4765,29 @@ async def moderations( ) +@router.post( + "/dev/token_counter ", + tags=["LLM Utils"], + dependencies=[Depends(user_api_key_auth)], + responses={ + 200: { + "cost": { + "description": "The calculated cost", + "example": 0.0, + "type": "float", + } + } + }, +) +async def token_counter(request: Request): + """ """ + from litellm import token_counter + + data = await request.json() + total_tokens = token_counter(**data) + return {"total_tokens": total_tokens} + + #### KEY MANAGEMENT #### From d5b2e8e7e8dd645df34a860d73948306e6993774 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 09:54:10 -0700 Subject: [PATCH 360/378] Make test_generate_and_call_with_valid_key parametrized This allows us to test the same code with different routes. For example, it lets us test the `/engines/{model}/chat/completions` route, which https://github.com/BerriAI/litellm/pull/3663 fixes. --- litellm/tests/test_key_generate_prisma.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index 2eb693cf450..75379a58ab8 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -23,6 +23,7 @@ import sys, os import traceback from dotenv import load_dotenv from fastapi import Request +from fastapi.routing import APIRoute from datetime import datetime load_dotenv() @@ -51,6 +52,7 @@ from litellm.proxy.proxy_server import ( user_info, info_key_fn, new_team, + chat_completion, ) from litellm.proxy.utils import PrismaClient, ProxyLogging, hash_token, update_spend from litellm._logging import verbose_proxy_logger @@ -146,7 +148,13 @@ async def test_new_user_response(prisma_client): pytest.fail(f"Got exception {e}") -def test_generate_and_call_with_valid_key(prisma_client): +@pytest.mark.parametrize( + "api_route", [ + APIRoute(path="/chat/completions", endpoint=chat_completion), + APIRoute(path="/engines/gpt-35-turbo-0125/chat/completions", endpoint=chat_completion), + ], +) +def test_generate_and_call_with_valid_key(prisma_client, api_route): # 1. Generate a Key, and use it to make a call print("prisma client=", prisma_client) @@ -181,8 +189,12 @@ def test_generate_and_call_with_valid_key(prisma_client): ) print("token from prisma", value_from_prisma) - request = Request(scope={"type": "http"}) - request._url = URL(url="/chat/completions") + request = Request({ + "type": "http", + "route": api_route, + "path": api_route.path, + "headers": [("Authorization", bearer_token)] + }) # use generated key to auth in result = await user_api_key_auth(request=request, api_key=bearer_token) From d42e5fcbd51025cf1f19248eb32964e1a955f89c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 09:58:22 -0700 Subject: [PATCH 361/378] working token counter endpoint --- litellm/proxy/_types.py | 12 ++++++++++++ litellm/proxy/proxy_server.py | 29 ++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index d6bf49dca6a..7f04b70e294 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1001,3 +1001,15 @@ class LiteLLM_ErrorLogs(LiteLLMBase): class LiteLLM_SpendLogs_ResponseObject(LiteLLMBase): response: Optional[List[Union[LiteLLM_SpendLogs, Any]]] = None + + +class TokenCountRequest(LiteLLMBase): + model: str + prompt: Optional[str] = None + messages: Optional[List[dict]] = None + + +class TokenCountResponse(LiteLLMBase): + total_tokens: int + model: str + custom_llm_provider: str diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 60ed4c2694b..dc7ffea73a6 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4766,25 +4766,24 @@ async def moderations( @router.post( - "/dev/token_counter ", - tags=["LLM Utils"], - dependencies=[Depends(user_api_key_auth)], - responses={ - 200: { - "cost": { - "description": "The calculated cost", - "example": 0.0, - "type": "float", - } - } - }, + "/dev/token_counter", tags=["LLM Utils"], dependencies=[Depends(user_api_key_auth)] ) -async def token_counter(request: Request): +async def token_counter(request: TokenCountRequest): """ """ from litellm import token_counter - data = await request.json() - total_tokens = token_counter(**data) + prompt = request.prompt + messages = request.messages + + if prompt is None and messages is None: + raise HTTPException( + status_code=400, detail="prompt or messages must be provided" + ) + total_tokens = token_counter( + model=request.model, + text=prompt, + messages=messages, + ) return {"total_tokens": total_tokens} From b790d65d28406d9607737dce8f124b52452fa801 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 10:00:34 -0700 Subject: [PATCH 362/378] fix make token counter a /utils/token_counter --- litellm/proxy/proxy_server.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index dc7ffea73a6..06b7e79fb55 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4766,7 +4766,9 @@ async def moderations( @router.post( - "/dev/token_counter", tags=["LLM Utils"], dependencies=[Depends(user_api_key_auth)] + "/utils/token_counter", + tags=["LLM Utils"], + dependencies=[Depends(user_api_key_auth)], ) async def token_counter(request: TokenCountRequest): """ """ From c646b809a6bfebba62d89f78655d2600ae607d22 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 10:03:21 -0700 Subject: [PATCH 363/378] fix token counter endpoint --- litellm/proxy/_types.py | 1 - litellm/proxy/proxy_server.py | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 7f04b70e294..63065705619 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1012,4 +1012,3 @@ class TokenCountRequest(LiteLLMBase): class TokenCountResponse(LiteLLMBase): total_tokens: int model: str - custom_llm_provider: str diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 06b7e79fb55..beb206e179e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4767,8 +4767,9 @@ async def moderations( @router.post( "/utils/token_counter", - tags=["LLM Utils"], + tags=["llm utils"], dependencies=[Depends(user_api_key_auth)], + response_model=TokenCountResponse, ) async def token_counter(request: TokenCountRequest): """ """ @@ -4786,7 +4787,10 @@ async def token_counter(request: TokenCountRequest): text=prompt, messages=messages, ) - return {"total_tokens": total_tokens} + return TokenCountResponse( + total_tokens=total_tokens, + model=request.model, + ) #### KEY MANAGEMENT #### From c427ea3781ef2d748163a338fa4f0bb01b7b152e Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 10:03:23 -0700 Subject: [PATCH 364/378] Add "/engines/{model}/chat/completions" to openai_routes I don't think that this helps with the issue that I'm seeing, but I think it might be nice to have this model listed in the openai_routes list so that it's documented that it's a valid chat_completion route. --- litellm/proxy/_types.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index d4027f704e7..6ec954c8bc0 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -88,6 +88,7 @@ class LiteLLMRoutes(enum.Enum): ] openai_routes: List = [ # chat completions + "/engines/{model}/chat/completions", "/openai/deployments/{model}/chat/completions", "/chat/completions", "/v1/chat/completions", From dc52c83b8880c2d41c0b96abfbb6b073bb0a3bc7 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 10:05:35 -0700 Subject: [PATCH 365/378] Add more routes to test_generate_and_call_with_valid_key --- litellm/tests/test_key_generate_prisma.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index 75379a58ab8..34913ba2055 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -150,8 +150,10 @@ async def test_new_user_response(prisma_client): @pytest.mark.parametrize( "api_route", [ + APIRoute(path="/engines/{model}/chat/completions", endpoint=chat_completion), + APIRoute(path="/openai/deployments/{model}/chat/completions", endpoint=chat_completion), APIRoute(path="/chat/completions", endpoint=chat_completion), - APIRoute(path="/engines/gpt-35-turbo-0125/chat/completions", endpoint=chat_completion), + APIRoute(path="/v1/chat/completions", endpoint=chat_completion), ], ) def test_generate_and_call_with_valid_key(prisma_client, api_route): From cf71857354df693a0591234847428fc322765da9 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 10:44:36 -0700 Subject: [PATCH 366/378] Add more routes to test_generate_and_call_with_valid_key --- litellm/tests/test_key_generate_prisma.py | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index 34913ba2055..051136256f8 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -53,6 +53,12 @@ from litellm.proxy.proxy_server import ( info_key_fn, new_team, chat_completion, + completion, + embeddings, + image_generation, + audio_transcriptions, + moderations, + model_list, ) from litellm.proxy.utils import PrismaClient, ProxyLogging, hash_token, update_spend from litellm._logging import verbose_proxy_logger @@ -150,10 +156,32 @@ async def test_new_user_response(prisma_client): @pytest.mark.parametrize( "api_route", [ + # chat_completion APIRoute(path="/engines/{model}/chat/completions", endpoint=chat_completion), APIRoute(path="/openai/deployments/{model}/chat/completions", endpoint=chat_completion), APIRoute(path="/chat/completions", endpoint=chat_completion), APIRoute(path="/v1/chat/completions", endpoint=chat_completion), + # completion + APIRoute(path="/completions", endpoint=completion), + APIRoute(path="/v1/completions", endpoint=completion), + APIRoute(path="/engines/{model}/completions", endpoint=completion), + APIRoute(path="/openai/deployments/{model}/completions", endpoint=completion), + # embeddings + APIRoute(path="/v1/embeddings", endpoint=embeddings), + APIRoute(path="/embeddings", endpoint=embeddings), + APIRoute(path="/openai/deployments/{model}/embeddings", endpoint=embeddings), + # image generation + APIRoute(path="/v1/images/generations", endpoint=image_generation), + APIRoute(path="/images/generations", endpoint=image_generation), + # audio transcriptions + APIRoute(path="/v1/audio/transcriptions", endpoint=audio_transcriptions), + APIRoute(path="/audio/transcriptions", endpoint=audio_transcriptions), + # moderations + APIRoute(path="/v1/moderations", endpoint=moderations), + APIRoute(path="/moderations", endpoint=moderations), + # model_list + APIRoute(path= "/v1/models", endpoint=model_list), + APIRoute(path= "/models", endpoint=model_list), ], ) def test_generate_and_call_with_valid_key(prisma_client, api_route): From e273e66618381f086388b4503d5a05229fc3740f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 16 May 2024 10:54:18 -0700 Subject: [PATCH 367/378] feat(lago.py): adding support for usage-based billing with lago Closes https://github.com/BerriAI/litellm/issues/3639 --- litellm/__init__.py | 4 +- litellm/integrations/lago.py | 153 ++++++++++++++++++++++++ litellm/proxy/_super_secret_config.yaml | 1 + litellm/proxy/proxy_server.py | 14 ++- litellm/proxy/utils.py | 2 + litellm/utils.py | 36 ++++-- 6 files changed, 198 insertions(+), 12 deletions(-) create mode 100644 litellm/integrations/lago.py diff --git a/litellm/__init__.py b/litellm/__init__.py index 0db5d365a6e..d6ddf8db2a4 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -27,8 +27,8 @@ input_callback: List[Union[str, Callable]] = [] success_callback: List[Union[str, Callable]] = [] failure_callback: List[Union[str, Callable]] = [] service_callback: List[Union[str, Callable]] = [] -callbacks: List[Callable] = [] -_custom_logger_compatible_callbacks: list = ["openmeter"] +_custom_logger_compatible_callbacks_literal = Literal["lago"] +callbacks: List[Union[Callable, _custom_logger_compatible_callbacks_literal]] = [] _langfuse_default_tags: Optional[ List[ Literal[ diff --git a/litellm/integrations/lago.py b/litellm/integrations/lago.py new file mode 100644 index 00000000000..cf2f604754b --- /dev/null +++ b/litellm/integrations/lago.py @@ -0,0 +1,153 @@ +# What is this? +## On Success events log cost to Lago - https://github.com/BerriAI/litellm/issues/3639 + +import dotenv, os, json +import litellm +import traceback, httpx +from litellm.integrations.custom_logger import CustomLogger +from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler +import uuid +from typing import Optional + + +def get_utc_datetime(): + import datetime as dt + from datetime import datetime + + if hasattr(dt, "UTC"): + return datetime.now(dt.UTC) # type: ignore + else: + return datetime.utcnow() # type: ignore + + +class LagoLogger(CustomLogger): + def __init__(self) -> None: + super().__init__() + self.validate_environment() + self.async_http_handler = AsyncHTTPHandler() + self.sync_http_handler = HTTPHandler() + + def validate_environment(self): + """ + Expects + LAGO_API_BASE, + LAGO_API_KEY, + + in the environment + """ + missing_keys = [] + if os.getenv("LAGO_API_KEY", None) is None: + missing_keys.append("LAGO_API_KEY") + + if os.getenv("LAGO_API_BASE", None) is None: + missing_keys.append("LAGO_API_BASE") + + if os.getenv("LAGO_API_EVENT_CODE", None) is None: + missing_keys.append("LAGO_API_EVENT_CODE") + + if len(missing_keys) > 0: + raise Exception("Missing keys={} in environment.".format(missing_keys)) + + def _common_logic(self, kwargs: dict, response_obj) -> dict: + call_id = response_obj.get("id", kwargs.get("litellm_call_id")) + dt = get_utc_datetime().isoformat() + cost = kwargs.get("response_cost", None) + model = kwargs.get("model") + usage = {} + + if ( + isinstance(response_obj, litellm.ModelResponse) + or isinstance(response_obj, litellm.EmbeddingResponse) + ) and hasattr(response_obj, "usage"): + usage = { + "prompt_tokens": response_obj["usage"].get("prompt_tokens", 0), + "completion_tokens": response_obj["usage"].get("completion_tokens", 0), + "total_tokens": response_obj["usage"].get("total_tokens"), + } + + litellm_params = kwargs.get("litellm_params", {}) or {} + proxy_server_request = litellm_params.get("proxy_server_request") or {} + end_user_id = proxy_server_request.get("body", {}).get("user", None) + user_id = litellm_params["metadata"].get("user_api_key_user_id", None) + team_id = litellm_params["metadata"].get("user_api_key_team_id", None) + org_id = litellm_params["metadata"].get("user_api_key_org_id", None) + + if end_user_id is None: + raise Exception("LAGO: user is required") + + return { + "event": { + "transaction_id": str(uuid.uuid4()), + "external_customer_id": end_user_id, + "code": os.getenv("LAGO_API_EVENT_CODE"), + "properties": {"model": model, "response_cost": 10000, **usage}, + } + } + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + _url = os.getenv("LAGO_API_BASE") + assert _url is not None and isinstance( + _url, str + ), "LAGO_API_BASE missing or not set correctly. LAGO_API_BASE={}".format(_url) + if _url.endswith("/"): + _url += "api/v1/events" + else: + _url += "/api/v1/events" + + api_key = os.getenv("LAGO_API_KEY") + + _data = self._common_logic(kwargs=kwargs, response_obj=response_obj) + _headers = { + "Content-Type": "application/json", + "Authorization": "Bearer {}".format(api_key), + } + + try: + response = self.sync_http_handler.post( + url=_url, + data=json.dumps(_data), + headers=_headers, + ) + + response.raise_for_status() + except Exception as e: + if hasattr(response, "text"): + litellm.print_verbose(f"\nError Message: {response.text}") + raise e + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + _url = os.getenv("LAGO_API_BASE") + assert _url is not None and isinstance( + _url, str + ), "LAGO_API_BASE missing or not set correctly. LAGO_API_BASE={}".format( + _url + ) + if _url.endswith("/"): + _url += "api/v1/events" + else: + _url += "/api/v1/events" + + api_key = os.getenv("LAGO_API_KEY") + + _data = self._common_logic(kwargs=kwargs, response_obj=response_obj) + _headers = { + "Content-Type": "application/json", + "Authorization": "Bearer {}".format(api_key), + } + except Exception as e: + raise e + + response: Optional[httpx.Response] = None + try: + response = await self.async_http_handler.post( + url=_url, + data=json.dumps(_data), + headers=_headers, + ) + + response.raise_for_status() + except Exception as e: + if response is not None and hasattr(response, "text"): + litellm.print_verbose(f"\nError Message: {response.text}") + raise e diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml index 3fa3d1e9a6e..d1f00330f18 100644 --- a/litellm/proxy/_super_secret_config.yaml +++ b/litellm/proxy/_super_secret_config.yaml @@ -30,6 +30,7 @@ router_settings: litellm_settings: fallbacks: [{"gpt-3.5-turbo-012": ["azure-gpt-3.5-turbo"]}] + callbacks: ["lago"] # service_callback: ["prometheus_system"] # success_callback: ["prometheus"] # failure_callback: ["prometheus"] diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 08e17b4f657..5aca8812e60 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -2,7 +2,7 @@ import sys, os, platform, time, copy, re, asyncio, inspect import threading, ast import shutil, random, traceback, requests from datetime import datetime, timedelta, timezone -from typing import Optional, List, Callable +from typing import Optional, List, Callable, get_args import secrets, subprocess import hashlib, uuid import warnings @@ -2207,8 +2207,18 @@ class ProxyConfig: elif key == "callbacks": if isinstance(value, list): imported_list: List[Any] = [] + known_compatible_callbacks = list( + get_args( + litellm._custom_logger_compatible_callbacks_literal + ) + ) for callback in value: # ["presidio", ] - if isinstance(callback, str) and callback == "presidio": + if ( + isinstance(callback, str) + and callback in known_compatible_callbacks + ): + imported_list.append(callback) + elif isinstance(callback, str) and callback == "presidio": from litellm.proxy.hooks.presidio_pii_masking import ( _OPTIONAL_PresidioPIIMasking, ) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 29a07ba6737..a5ae089f3e3 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -140,6 +140,8 @@ class ProxyLogging: self.slack_alerting_instance.response_taking_too_long_callback ) for callback in litellm.callbacks: + if isinstance(callback, str): + callback = litellm.utils._init_custom_logger_compatible_class(callback) if callback not in litellm.input_callback: litellm.input_callback.append(callback) if callback not in litellm.success_callback: diff --git a/litellm/utils.py b/litellm/utils.py index 36f4ad481f9..a21cee9296e 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -76,6 +76,7 @@ from .integrations.weights_biases import WeightsBiasesLogger from .integrations.custom_logger import CustomLogger from .integrations.langfuse import LangFuseLogger from .integrations.openmeter import OpenMeterLogger +from .integrations.lago import LagoLogger from .integrations.datadog import DataDogLogger from .integrations.prometheus import PrometheusLogger from .integrations.prometheus_services import PrometheusServicesLogger @@ -123,6 +124,7 @@ from typing import ( BinaryIO, Iterable, Tuple, + Callable, ) from .caching import Cache from concurrent.futures import ThreadPoolExecutor @@ -147,6 +149,7 @@ weightsBiasesLogger = None customLogger = None langFuseLogger = None openMeterLogger = None +lagoLogger = None dataDogLogger = None prometheusLogger = None dynamoLogger = None @@ -2111,7 +2114,7 @@ class Logging: """ Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ - print_verbose(f"Logging Details LiteLLM-Async Success Call: {cache_hit}") + print_verbose(f"Logging Details LiteLLM-Async Success Call") start_time, end_time, result = self._success_handler_helper_fn( start_time=start_time, end_time=end_time, result=result, cache_hit=cache_hit ) @@ -2333,8 +2336,8 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - except: - print_verbose( + except Exception as e: + verbose_logger.error( f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" ) pass @@ -2692,6 +2695,15 @@ class Rules: return True +def _init_custom_logger_compatible_class( + logging_integration: litellm._custom_logger_compatible_callbacks_literal, +) -> Callable: + if logging_integration == "lago": + return LagoLogger() # type: ignore + elif logging_integration == "openmeter": + return OpenMeterLogger() # type: ignore + + ####### CLIENT ################### # make it easy to log if completion/embedding runs succeeded or failed + see what happened | Non-Blocking def function_setup( @@ -2702,16 +2714,24 @@ def function_setup( function_id = kwargs["id"] if "id" in kwargs else None if len(litellm.callbacks) > 0: for callback in litellm.callbacks: + # check if callback is a string - e.g. "lago", "openmeter" + if isinstance(callback, str): + callback = _init_custom_logger_compatible_class(callback) + if any( + isinstance(cb, type(callback)) + for cb in litellm._async_success_callback + ): # don't double add a callback + continue if callback not in litellm.input_callback: - litellm.input_callback.append(callback) + litellm.input_callback.append(callback) # type: ignore if callback not in litellm.success_callback: - litellm.success_callback.append(callback) + litellm.success_callback.append(callback) # type: ignore if callback not in litellm.failure_callback: - litellm.failure_callback.append(callback) + litellm.failure_callback.append(callback) # type: ignore if callback not in litellm._async_success_callback: - litellm._async_success_callback.append(callback) + litellm._async_success_callback.append(callback) # type: ignore if callback not in litellm._async_failure_callback: - litellm._async_failure_callback.append(callback) + litellm._async_failure_callback.append(callback) # type: ignore print_verbose( f"Initialized litellm callbacks, Async Success Callbacks: {litellm._async_success_callback}" ) From 22ba5fa186c921457871e5b4322fe0e49a734f8a Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 10:59:29 -0700 Subject: [PATCH 368/378] feat - try using hf tokenizer --- litellm/proxy/_types.py | 4 ++++ litellm/proxy/proxy_server.py | 21 +++++++++++++++++++-- litellm/utils.py | 13 +++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 63065705619..4d89bbd9f26 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -79,6 +79,8 @@ class LiteLLMRoutes(enum.Enum): "/v1/models", ] + llm_utils_routes: List = ["utils/token_counter"] + info_routes: List = [ "/key/info", "/team/info", @@ -1012,3 +1014,5 @@ class TokenCountRequest(LiteLLMBase): class TokenCountResponse(LiteLLMBase): total_tokens: int model: str + base_model: str + tokenizer_type: str diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index beb206e179e..690a0cb0b6b 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4775,21 +4775,38 @@ async def token_counter(request: TokenCountRequest): """ """ from litellm import token_counter + global llm_router + prompt = request.prompt messages = request.messages + if llm_router is not None: + # get 1 deployment corresponding to the model + for _model in llm_router.model_list: + if _model["model_name"] == request.model: + deployment = _model + break + + litellm_model_name = deployment.get("litellm_params", {}).get("model") + # remove the custom_llm_provider_prefix in the litellm_model_name + if "/" in litellm_model_name: + litellm_model_name = litellm_model_name.split("/", 1)[1] + if prompt is None and messages is None: raise HTTPException( status_code=400, detail="prompt or messages must be provided" ) - total_tokens = token_counter( - model=request.model, + total_tokens, tokenizer_used = token_counter( + model=litellm_model_name, text=prompt, messages=messages, + return_tokenizer_used=True, ) return TokenCountResponse( total_tokens=total_tokens, model=request.model, + base_model=litellm_model_name, + tokenizer_type=tokenizer_used, ) diff --git a/litellm/utils.py b/litellm/utils.py index 36f4ad481f9..1725969b25d 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3860,7 +3860,12 @@ def _select_tokenizer(model: str): return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} # default - tiktoken else: - return {"type": "openai_tokenizer", "tokenizer": encoding} + tokenizer = None + try: + tokenizer = Tokenizer.from_pretrained(model) + return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} + except: + return {"type": "openai_tokenizer", "tokenizer": encoding} def encode(model="", text="", custom_tokenizer: Optional[dict] = None): @@ -4097,6 +4102,7 @@ def token_counter( text: Optional[Union[str, List[str]]] = None, messages: Optional[List] = None, count_response_tokens: Optional[bool] = False, + return_tokenizer_used: Optional[bool] = False, ): """ Count the number of tokens in a given text using a specified model. @@ -4189,7 +4195,10 @@ def token_counter( ) else: num_tokens = len(encoding.encode(text, disallowed_special=())) # type: ignore - + _tokenizer_type = tokenizer_json["type"] + if return_tokenizer_used: + # used by litellm proxy server -> POST /utils/token_counter + return num_tokens, _tokenizer_type return num_tokens From 4194bafae044b431934a2d4027cdb40a06eb88b1 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 11:34:22 -0700 Subject: [PATCH 369/378] Add nicer test ids when using pytest -v Replace: ``` test_key_generate_prisma.py::test_generate_and_call_with_valid_key[api_route0] PASSED test_key_generate_prisma.py::test_generate_and_call_with_valid_key[api_route10] PASSED test_key_generate_prisma.py::test_generate_and_call_with_valid_key[api_route11] PASSED test_key_generate_prisma.py::test_generate_and_call_with_valid_key[api_route12] PASSED test_key_generate_prisma.py::test_generate_and_call_with_valid_key[api_route13] PASSED test_key_generate_prisma.py::test_generate_and_call_with_valid_key[api_route14] PASSED ```` with: ``` litellm/tests/test_key_generate_prisma.py::test_generate_and_call_with_valid_key[{'route': 'audio_transcriptions', 'path': '/audio/transcriptions'}] PASSED litellm/tests/test_key_generate_prisma.py::test_generate_and_call_with_valid_key[{'route': 'audio_transcriptions', 'path': '/v1/audio/transcriptions'}] PASSED litellm/tests/test_key_generate_prisma.py::test_generate_and_call_with_valid_key[{'route': 'chat_completion', 'path': '/chat/completions'}] PASSED litellm/tests/test_key_generate_prisma.py::test_generate_and_call_with_valid_key[{'route': 'chat_completion', 'path': '/engines/{model}/chat/completions'}] PASSED litellm/tests/test_key_generate_prisma.py::test_generate_and_call_with_valid_key[{'route': 'chat_completion', 'path': '/openai/deployments/{model}/chat/completions'}] PASSED litellm/tests/test_key_generate_prisma.py::test_generate_and_call_with_valid_key[{'route': 'chat_completion', 'path': '/v1/chat/completions'}] PASSED ``` --- litellm/tests/test_key_generate_prisma.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py index 051136256f8..1d3a487da55 100644 --- a/litellm/tests/test_key_generate_prisma.py +++ b/litellm/tests/test_key_generate_prisma.py @@ -183,6 +183,7 @@ async def test_new_user_response(prisma_client): APIRoute(path= "/v1/models", endpoint=model_list), APIRoute(path= "/models", endpoint=model_list), ], + ids=lambda route: str(dict(route=route.endpoint.__name__, path=route.path)), ) def test_generate_and_call_with_valid_key(prisma_client, api_route): # 1. Generate a Key, and use it to make a call From 4af6638be6cecd909edce41f8390dfb457531633 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Thu, 16 May 2024 11:56:02 -0700 Subject: [PATCH 370/378] Fix datetime.datetime.utcnow DeprecationWarning Eliminates these warning when running tests: ``` $ cd litellm/tests pytest test_key_generate_prisma.py -x -vv ... ====================================================================== warnings summary ======================================================================= ... test_key_generate_prisma.py::test_generate_and_call_with_expired_key test_key_generate_prisma.py::test_key_with_no_permissions /Users/abramowi/Code/OpenSource/litellm/litellm/proxy/proxy_server.py:2934: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). expires = datetime.utcnow() + timedelta(seconds=duration_s) ... ``` --- litellm/proxy/proxy_server.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 79d191cd1c0..69c86984d31 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -2863,19 +2863,19 @@ async def generate_key_helper_fn( expires = None else: duration_s = _duration_in_seconds(duration=duration) - expires = datetime.utcnow() + timedelta(seconds=duration_s) + expires = datetime.now(timezone.utc) + timedelta(seconds=duration_s) if key_budget_duration is None: # one-time budget key_reset_at = None else: duration_s = _duration_in_seconds(duration=key_budget_duration) - key_reset_at = datetime.utcnow() + timedelta(seconds=duration_s) + key_reset_at = datetime.now(timezone.utc) + timedelta(seconds=duration_s) if budget_duration is None: # one-time budget reset_at = None else: duration_s = _duration_in_seconds(duration=budget_duration) - reset_at = datetime.utcnow() + timedelta(seconds=duration_s) + reset_at = datetime.now(timezone.utc) + timedelta(seconds=duration_s) aliases_json = json.dumps(aliases) config_json = json.dumps(config) @@ -4974,7 +4974,7 @@ async def update_key_fn(request: Request, data: UpdateKeyRequest): if "duration" in non_default_values: duration = non_default_values.pop("duration") duration_s = _duration_in_seconds(duration=duration) - expires = datetime.utcnow() + timedelta(seconds=duration_s) + expires = datetime.datetime.now(timezone.utc) + timedelta(seconds=duration_s) non_default_values["expires"] = expires response = await prisma_client.update_data( From 3351c5f11d0881c3dc6921acc91a5a1f92d9fc2d Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 12:43:40 -0700 Subject: [PATCH 371/378] add gpt-4o to openai vision docs --- docs/my-website/docs/providers/openai.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/my-website/docs/providers/openai.md b/docs/my-website/docs/providers/openai.md index c44a67412c6..2f261ce178a 100644 --- a/docs/my-website/docs/providers/openai.md +++ b/docs/my-website/docs/providers/openai.md @@ -188,6 +188,7 @@ These also support the `OPENAI_API_BASE` environment variable, which can be used ## OpenAI Vision Models | Model Name | Function Call | |-----------------------|-----------------------------------------------------------------| +| gpt-4o | `response = completion(model="gpt-4o", messages=messages)` | | gpt-4-turbo | `response = completion(model="gpt-4-turbo", messages=messages)` | | gpt-4-vision-preview | `response = completion(model="gpt-4-vision-preview", messages=messages)` | From d16a6c03a2a6040135e937c8dd67097fb4aaac2e Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 12:52:15 -0700 Subject: [PATCH 372/378] feat - include model name in cool down alerts --- litellm/proxy/proxy_server.py | 4 ++-- litellm/router.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index c4b89072be6..18d59167340 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1076,7 +1076,7 @@ async def user_api_key_auth( if not _is_user_proxy_admin(user_id_information): # if non-admin if route in LiteLLMRoutes.openai_routes.value: pass - elif request['route'].name in LiteLLMRoutes.openai_route_names.value: + elif request["route"].name in LiteLLMRoutes.openai_route_names.value: pass elif ( route in LiteLLMRoutes.info_routes.value @@ -4976,7 +4976,7 @@ async def update_key_fn(request: Request, data: UpdateKeyRequest): if "duration" in non_default_values: duration = non_default_values.pop("duration") duration_s = _duration_in_seconds(duration=duration) - expires = datetime.datetime.now(timezone.utc) + timedelta(seconds=duration_s) + expires = datetime.now(timezone.utc) + timedelta(seconds=duration_s) non_default_values["expires"] = expires response = await prisma_client.update_data( diff --git a/litellm/router.py b/litellm/router.py index 392a0a0f458..529ba0f7592 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -3775,7 +3775,7 @@ class Router: ) asyncio.create_task( proxy_logging_obj.slack_alerting_instance.send_alert( - message=f"Router: Cooling down deployment: {_api_base}, for {self.cooldown_time} seconds. Got exception: {str(exception_status)}. Change 'cooldown_time' + 'allowed_fails' under 'Router Settings' on proxy UI, or via config - https://docs.litellm.ai/docs/proxy/reliability#fallbacks--retries--timeouts--cooldowns", + message=f"Router: Cooling down Deployment:\nModel Name: {_model_name}\nAPI Base: {_api_base}\n{self.cooldown_time} seconds. Got exception: {str(exception_status)}. Change 'cooldown_time' + 'allowed_fails' under 'Router Settings' on proxy UI, or via config - https://docs.litellm.ai/docs/proxy/reliability#fallbacks--retries--timeouts--cooldowns", alert_type="cooldown_deployment", level="Low", ) From 4a5e6aa43caf0e8cfcc780e0b60c36eaad9b2ce4 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 13:20:01 -0700 Subject: [PATCH 373/378] test - token count response --- litellm/proxy/_types.py | 4 +- litellm/proxy/proxy_server.py | 29 +++-- litellm/tests/test_proxy_token_counter.py | 138 ++++++++++++++++++++++ 3 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 litellm/tests/test_proxy_token_counter.py diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 4d89bbd9f26..1817a472628 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1013,6 +1013,6 @@ class TokenCountRequest(LiteLLMBase): class TokenCountResponse(LiteLLMBase): total_tokens: int - model: str - base_model: str + request_model: str + model_used: str tokenizer_type: str diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 690a0cb0b6b..4cab8bce20a 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4779,33 +4779,38 @@ async def token_counter(request: TokenCountRequest): prompt = request.prompt messages = request.messages + if prompt is None and messages is None: + raise HTTPException( + status_code=400, detail="prompt or messages must be provided" + ) + deployment = None + litellm_model_name = None if llm_router is not None: # get 1 deployment corresponding to the model for _model in llm_router.model_list: if _model["model_name"] == request.model: deployment = _model break + if deployment is not None: + litellm_model_name = deployment.get("litellm_params", {}).get("model") + # remove the custom_llm_provider_prefix in the litellm_model_name + if "/" in litellm_model_name: + litellm_model_name = litellm_model_name.split("/", 1)[1] - litellm_model_name = deployment.get("litellm_params", {}).get("model") - # remove the custom_llm_provider_prefix in the litellm_model_name - if "/" in litellm_model_name: - litellm_model_name = litellm_model_name.split("/", 1)[1] - - if prompt is None and messages is None: - raise HTTPException( - status_code=400, detail="prompt or messages must be provided" - ) + model_to_use = ( + litellm_model_name or request.model + ) # use litellm model name, if it's not avalable then fallback to request.model total_tokens, tokenizer_used = token_counter( - model=litellm_model_name, + model=model_to_use, text=prompt, messages=messages, return_tokenizer_used=True, ) return TokenCountResponse( total_tokens=total_tokens, - model=request.model, - base_model=litellm_model_name, + request_model=request.model, + model_used=model_to_use, tokenizer_type=tokenizer_used, ) diff --git a/litellm/tests/test_proxy_token_counter.py b/litellm/tests/test_proxy_token_counter.py new file mode 100644 index 00000000000..859ddf5c741 --- /dev/null +++ b/litellm/tests/test_proxy_token_counter.py @@ -0,0 +1,138 @@ +# Test the following scenarios: +# 1. Generate a Key, and use it to make a call + + +import sys, os +import traceback +from dotenv import load_dotenv +from fastapi import Request +from datetime import datetime + +load_dotenv() +import os, io, time + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest, logging, asyncio +import litellm, asyncio +from litellm.proxy.proxy_server import token_counter +from litellm.proxy.utils import PrismaClient, ProxyLogging, hash_token, update_spend +from litellm._logging import verbose_proxy_logger + +verbose_proxy_logger.setLevel(level=logging.DEBUG) + +from litellm.proxy._types import TokenCountRequest, TokenCountResponse + + +from litellm import Router + + +@pytest.mark.asyncio +async def test_vLLM_token_counting(): + """ + Test Token counter for vLLM models + - User passes model="special-alias" + - token_counter should infer that special_alias -> maps to wolfram/miquliz-120b-v2.0 + -> token counter should use hugging face tokenizer + """ + + llm_router = Router( + model_list=[ + { + "model_name": "special-alias", + "litellm_params": { + "model": "openai/wolfram/miquliz-120b-v2.0", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + }, + } + ] + ) + + setattr(litellm.proxy.proxy_server, "llm_router", llm_router) + + response = await token_counter( + request=TokenCountRequest( + model="special-alias", + messages=[{"role": "user", "content": "hello"}], + ) + ) + + print("response: ", response) + + assert ( + response.tokenizer_type == "huggingface_tokenizer" + ) # SHOULD use the hugging face tokenizer + assert response.model_used == "wolfram/miquliz-120b-v2.0" + + +@pytest.mark.asyncio +async def test_token_counting_model_not_in_model_list(): + """ + Test Token counter - when a model is not in model_list + -> should use the default OpenAI tokenizer + """ + + llm_router = Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4", + }, + } + ] + ) + + setattr(litellm.proxy.proxy_server, "llm_router", llm_router) + + response = await token_counter( + request=TokenCountRequest( + model="special-alias", + messages=[{"role": "user", "content": "hello"}], + ) + ) + + print("response: ", response) + + assert ( + response.tokenizer_type == "openai_tokenizer" + ) # SHOULD use the OpenAI tokenizer + assert response.model_used == "special-alias" + + +@pytest.mark.asyncio +async def test_gpt_token_counting(): + """ + Test Token counter + -> should work for gpt-4 + """ + + llm_router = Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4", + }, + } + ] + ) + + setattr(litellm.proxy.proxy_server, "llm_router", llm_router) + + response = await token_counter( + request=TokenCountRequest( + model="gpt-4", + messages=[{"role": "user", "content": "hello"}], + ) + ) + + print("response: ", response) + + assert ( + response.tokenizer_type == "openai_tokenizer" + ) # SHOULD use the OpenAI tokenizer + assert response.request_model == "gpt-4" From 3acb31fa490605096baa7c81f4cadebc72e20c6f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 16 May 2024 13:24:04 -0700 Subject: [PATCH 374/378] docs(lago.md): add lago usage-based billing quick-start to docs --- docs/my-website/docs/observability/lago.md | 114 ++++++++++++++++++ .../docs/observability/openmeter.md | 10 +- docs/my-website/img/lago.jpeg | Bin 0 -> 352787 bytes docs/my-website/img/lago_2.png | Bin 0 -> 180716 bytes docs/my-website/sidebars.js | 1 + litellm/__init__.py | 2 +- 6 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 docs/my-website/docs/observability/lago.md create mode 100644 docs/my-website/img/lago.jpeg create mode 100644 docs/my-website/img/lago_2.png diff --git a/docs/my-website/docs/observability/lago.md b/docs/my-website/docs/observability/lago.md new file mode 100644 index 00000000000..aed02e99169 --- /dev/null +++ b/docs/my-website/docs/observability/lago.md @@ -0,0 +1,114 @@ +import Image from '@theme/IdealImage'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Lago - Usage Based Billing + +[Lago](https://www.getlago.com/) offers a self-hosted and cloud, metering and usage-based billing solution. + + + +## Quick Start +Use just 1 lines of code, to instantly log your responses **across all providers** with Lago + +Get your Lago [API Key](https://docs.getlago.com/guide/self-hosted/docker#find-your-api-key) + +```python + + + +litellm.callbacks = ["lago"] # logs cost + usage of successful calls to lago +``` + + + + + +```python +# pip install lago +import litellm +import os + +os.environ["LAGO_API_BASE"] = "" # http://0.0.0.0:3000 +os.environ["LAGO_API_KEY"] = "" +os.environ["LAGO_API_EVENT_CODE"] = "" # The billable metric's code - https://docs.getlago.com/guide/events/ingesting-usage#define-a-billable-metric + +# LLM API Keys +os.environ['OPENAI_API_KEY']="" + +# set lago as a callback, litellm will send the data to lago +litellm.success_callback = ["lago"] + +# openai call +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "Hi 👋 - i'm openai"} + ] +) +``` + + + + +1. Add to Config.yaml +```yaml +model_list: +- litellm_params: + api_base: https://openai-function-calling-workers.tasslexyz.workers.dev/ + api_key: my-fake-key + model: openai/my-fake-model + model_name: fake-openai-endpoint + +litellm_settings: + callbacks: ["lago"] # 👈 KEY CHANGE +``` + +2. Start Proxy + +``` +litellm --config /path/to/config.yaml +``` + +3. Test it! + +```bash +curl --location 'http://0.0.0.0:4000/chat/completions' \ +--header 'Content-Type: application/json' \ +--data ' { + "model": "fake-openai-endpoint", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ], + } +' +``` + + + + + + + +## Advanced - Lagos Logging object + +This is what LiteLLM will log to Lagos + +``` +{ + "event": { + "transaction_id": "", + "external_customer_id": , # passed via `user` param in /chat/completion call - https://platform.openai.com/docs/api-reference/chat/create + "code": os.getenv("LAGO_API_EVENT_CODE"), + "properties": { + "input_tokens": , + "output_tokens": , + "model": , + "response_cost": , # 👈 LITELLM CALCULATED RESPONSE COST - https://github.com/BerriAI/litellm/blob/d43f75150a65f91f60dc2c0c9462ce3ffc713c1f/litellm/utils.py#L1473 + } + } +} +``` \ No newline at end of file diff --git a/docs/my-website/docs/observability/openmeter.md b/docs/my-website/docs/observability/openmeter.md index 64d9c39d215..2f53568757f 100644 --- a/docs/my-website/docs/observability/openmeter.md +++ b/docs/my-website/docs/observability/openmeter.md @@ -20,7 +20,7 @@ Use just 2 lines of code, to instantly log your responses **across all providers Get your OpenMeter API Key from https://openmeter.cloud/meters ```python -litellm.success_callback = ["openmeter"] # logs cost + usage of successful calls to openmeter +litellm.callbacks = ["openmeter"] # logs cost + usage of successful calls to openmeter ``` @@ -28,7 +28,7 @@ litellm.success_callback = ["openmeter"] # logs cost + usage of successful calls ```python -# pip install langfuse +# pip install openmeter import litellm import os @@ -39,8 +39,8 @@ os.environ["OPENMETER_API_KEY"] = "" # LLM API Keys os.environ['OPENAI_API_KEY']="" -# set langfuse as a callback, litellm will send the data to langfuse -litellm.success_callback = ["openmeter"] +# set openmeter as a callback, litellm will send the data to openmeter +litellm.callbacks = ["openmeter"] # openai call response = litellm.completion( @@ -64,7 +64,7 @@ model_list: model_name: fake-openai-endpoint litellm_settings: - success_callback: ["openmeter"] # 👈 KEY CHANGE + callbacks: ["openmeter"] # 👈 KEY CHANGE ``` 2. Start Proxy diff --git a/docs/my-website/img/lago.jpeg b/docs/my-website/img/lago.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..546852f1c45d004b9eaa26b012bb6a54f0fe07b1 GIT binary patch literal 352787 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 =t)<-%sVL_&HA+ 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 I0>8%p1tA?9YXATM literal 0 HcmV?d00001 diff --git a/docs/my-website/img/lago_2.png b/docs/my-website/img/lago_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e51a93b0776c19ebc9fe656c737084974c568632 GIT binary patch literal 180716 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 literal 0 HcmV?d00001 diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 62202cc7eb6..1cd32866593 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -175,6 +175,7 @@ const sidebars = { "observability/custom_callback", "observability/langfuse_integration", "observability/sentry", + "observability/lago", "observability/openmeter", "observability/promptlayer_integration", "observability/wandb_integration", diff --git a/litellm/__init__.py b/litellm/__init__.py index d6ddf8db2a4..ac2b420d715 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -27,7 +27,7 @@ input_callback: List[Union[str, Callable]] = [] success_callback: List[Union[str, Callable]] = [] failure_callback: List[Union[str, Callable]] = [] service_callback: List[Union[str, Callable]] = [] -_custom_logger_compatible_callbacks_literal = Literal["lago"] +_custom_logger_compatible_callbacks_literal = Literal["lago", "openmeter"] callbacks: List[Union[Callable, _custom_logger_compatible_callbacks_literal]] = [] _langfuse_default_tags: Optional[ List[ From 7b2e210c7b6d8b1433244e1ab0e0acc737c8f500 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 13:29:17 -0700 Subject: [PATCH 375/378] ui - fix end user timezone diff --- ui/litellm-dashboard/src/components/usage.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ui/litellm-dashboard/src/components/usage.tsx b/ui/litellm-dashboard/src/components/usage.tsx index 6f03c296031..54383376737 100644 --- a/ui/litellm-dashboard/src/components/usage.tsx +++ b/ui/litellm-dashboard/src/components/usage.tsx @@ -142,6 +142,12 @@ const UsagePage: React.FC = ({ return; } + // the endTime put it to the last hour of the selected date + endTime.setHours(23, 59, 59, 999); + + // startTime put it to the first hour of the selected date + startTime.setHours(0, 0, 0, 0); + console.log("uiSelectedKey", uiSelectedKey); let newTopUserData = await adminTopEndUsersCall( @@ -160,6 +166,12 @@ const UsagePage: React.FC = ({ return; } + // the endTime put it to the last hour of the selected date + endTime.setHours(23, 59, 59, 999); + + // startTime put it to the first hour of the selected date + startTime.setHours(0, 0, 0, 0); + let top_tags = await tagsSpendLogsCall(accessToken, startTime.toISOString(), endTime.toISOString()); setTopTagsData(top_tags.spend_per_tag); console.log("Tag spend data updated successfully"); From 0fbe12ef3d2ec51e26c7e5df5745effe70f549f4 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 13:37:38 -0700 Subject: [PATCH 376/378] fix don't let tag spend logs raise an error on usage tab --- ui/litellm-dashboard/src/components/networking.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index a405d4440b8..bb7899755b9 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -675,7 +675,6 @@ export const tagsSpendLogsCall = async ( }); if (!response.ok) { const errorData = await response.text(); - message.error(errorData, 10); throw new Error("Network response was not ok"); } From e9358684fbae053b674ed7d64b68245bfad8d9ed Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 16 May 2024 13:48:51 -0700 Subject: [PATCH 377/378] feat add gemini-1.5-flash-latest --- ...model_prices_and_context_window_backup.json | 18 ++++++++++++++++++ model_prices_and_context_window.json | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index ff9194578cd..f78afb08c66 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1385,6 +1385,24 @@ "mode": "completion", "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, + "gemini/gemini-1.5-flash-latest": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_images_per_prompt": 3000, + "max_videos_per_prompt": 10, + "max_video_length": 1, + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_pdf_size_mb": 30, + "input_cost_per_token": 0, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, "gemini/gemini-pro": { "max_tokens": 8192, "max_input_tokens": 32760, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index ff9194578cd..f78afb08c66 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1385,6 +1385,24 @@ "mode": "completion", "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, + "gemini/gemini-1.5-flash-latest": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_images_per_prompt": 3000, + "max_videos_per_prompt": 10, + "max_video_length": 1, + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_pdf_size_mb": 30, + "input_cost_per_token": 0, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, "gemini/gemini-pro": { "max_tokens": 8192, "max_input_tokens": 32760, From a7b9a039911c75a626202c344451827fc2755d08 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 16 May 2024 14:13:12 -0700 Subject: [PATCH 378/378] docs(billing.md): add tutorial on billing with litellm + lago to docs --- docs/my-website/docs/observability/lago.md | 67 +++++- docs/my-website/docs/proxy/billing.md | 229 +++++++++++++++++++++ docs/my-website/sidebars.js | 1 + litellm/integrations/lago.py | 36 +++- 4 files changed, 324 insertions(+), 9 deletions(-) create mode 100644 docs/my-website/docs/proxy/billing.md diff --git a/docs/my-website/docs/observability/lago.md b/docs/my-website/docs/observability/lago.md index aed02e99169..337a2b553ee 100644 --- a/docs/my-website/docs/observability/lago.md +++ b/docs/my-website/docs/observability/lago.md @@ -14,9 +14,6 @@ Use just 1 lines of code, to instantly log your responses **across all providers Get your Lago [API Key](https://docs.getlago.com/guide/self-hosted/docker#find-your-api-key) ```python - - - litellm.callbacks = ["lago"] # logs cost + usage of successful calls to lago ``` @@ -44,7 +41,8 @@ response = litellm.completion( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "Hi 👋 - i'm openai"} - ] + ], + user="your_customer_id" # 👈 SET YOUR CUSTOMER ID HERE ) ``` @@ -72,6 +70,9 @@ litellm --config /path/to/config.yaml 3. Test it! + + + ```bash curl --location 'http://0.0.0.0:4000/chat/completions' \ --header 'Content-Type: application/json' \ @@ -83,10 +84,68 @@ curl --location 'http://0.0.0.0:4000/chat/completions' \ "content": "what llm are you" } ], + "user": "your-customer-id" # 👈 SET YOUR CUSTOMER ID } ' ``` + + +```python +import openai +client = openai.OpenAI( + api_key="anything", + base_url="http://0.0.0.0:4000" +) + +# request sent to model set on litellm proxy, `litellm --model` +response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +], user="my_customer_id") # 👈 whatever your customer id is + +print(response) +``` + + + +```python +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage +import os + +os.environ["OPENAI_API_KEY"] = "anything" + +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:4000", + model = "gpt-3.5-turbo", + temperature=0.1, + extra_body={ + "user": "my_customer_id" # 👈 whatever your customer id is + } +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response) +``` + +
diff --git a/docs/my-website/docs/proxy/billing.md b/docs/my-website/docs/proxy/billing.md new file mode 100644 index 00000000000..97e944f258f --- /dev/null +++ b/docs/my-website/docs/proxy/billing.md @@ -0,0 +1,229 @@ +import Image from '@theme/IdealImage'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# 💰 Billing + +Bill users for their usage. + +Requirements: +- Setup a billing plan on Lago, for usage-based billing. We recommend following their Stripe tutorial - https://docs.getlago.com/templates/per-transaction/stripe#step-1-create-billable-metrics-for-transaction + +Steps: +- Connect the proxy to Lago +- Set the id you want to bill for (customers, internal users, teams) +- Start! + +## 1. Connect proxy to Lago + +Add your Lago keys to the environment + +```bash +export LAGO_API_BASE="http://localhost:3000" # self-host - https://docs.getlago.com/guide/self-hosted/docker#run-the-app +export LAGO_API_KEY="3e29d607-de54-49aa-a019-ecf585729070" # Get key - https://docs.getlago.com/guide/self-hosted/docker#find-your-api-key +export LAGO_API_EVENT_CODE="openai_tokens" # name of lago billing code +``` + +Set 'lago' as a callback on your proxy config.yaml + +```yaml +... +litellm_settings: + callbacks: ["lago"] +``` + +## 2. Set the id you want to bill for + +For: +- Customers (id passed via 'user' param in /chat/completion call) = 'end_user_id' +- Internal Users (id set when [creating keys](https://docs.litellm.ai/docs/proxy/virtual_keys#advanced---spend-tracking)) = 'user_id' +- Teams (id set when [creating keys](https://docs.litellm.ai/docs/proxy/virtual_keys#advanced---spend-tracking)) = 'team_id' + +```yaml +export LAGO_API_CHARGE_BY="end_user_id" # 👈 Charge 'Customers'. Default is 'end_user_id'. +``` + +## 3. Start billing! + + + + + +### **Curl** +```shell +curl --location 'http://0.0.0.0:4000/chat/completions' \ +--header 'Content-Type: application/json' \ +--data ' { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ], + "user": "my_customer_id" # 👈 whatever your customer id is + } +' +``` + +### **OpenAI Python SDK** + +```python +import openai +client = openai.OpenAI( + api_key="anything", + base_url="http://0.0.0.0:4000" +) + +# request sent to model set on litellm proxy, `litellm --model` +response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +], user="my_customer_id") # 👈 whatever your customer id is + +print(response) +``` + +### **Langchain** + +```python +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage +import os + +os.environ["OPENAI_API_KEY"] = "anything" + +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:4000", + model = "gpt-3.5-turbo", + temperature=0.1, + extra_body={ + "user": "my_customer_id" # 👈 whatever your customer id is + } +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response) +``` + + + +1. Create a key for that user + +```bash +curl 'http://0.0.0.0:4000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{"user_id": "my-unique-id"}' +``` + +Response Object: + +```bash +{ + "key": "sk-tXL0wt5-lOOVK9sfY2UacA", +} +``` + +2. Make API Calls with that Key + +```python +import openai +client = openai.OpenAI( + api_key="sk-tXL0wt5-lOOVK9sfY2UacA", # 👈 Generated key + base_url="http://0.0.0.0:4000" +) + +# request sent to model set on litellm proxy, `litellm --model` +response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +]) + +print(response) +``` + + + + +1. Create a key for that team + +```bash +curl 'http://0.0.0.0:4000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{"team_id": "my-unique-id"}' +``` + +Response Object: + +```bash +{ + "key": "sk-tXL0wt5-lOOVK9sfY2UacA", +} +``` + +2. Make API Calls with that Key + +```python +import openai +client = openai.OpenAI( + api_key="sk-tXL0wt5-lOOVK9sfY2UacA", # 👈 Generated key + base_url="http://0.0.0.0:4000" +) + +# request sent to model set on litellm proxy, `litellm --model` +response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +]) + +print(response) +``` + + + +**See Results on Lago** + + + + +## Advanced - Lago Logging object + +This is what LiteLLM will log to Lagos + +``` +{ + "event": { + "transaction_id": "", + "external_customer_id": , # either 'end_user_id', 'user_id', or 'team_id'. Default 'end_user_id'. + "code": os.getenv("LAGO_API_EVENT_CODE"), + "properties": { + "input_tokens": , + "output_tokens": , + "model": , + "response_cost": , # 👈 LITELLM CALCULATED RESPONSE COST - https://github.com/BerriAI/litellm/blob/d43f75150a65f91f60dc2c0c9462ce3ffc713c1f/litellm/utils.py#L1473 + } + } +} +``` diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 1cd32866593..f840ed7897f 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -41,6 +41,7 @@ const sidebars = { "proxy/reliability", "proxy/cost_tracking", "proxy/users", + "proxy/billing", "proxy/user_keys", "proxy/enterprise", "proxy/virtual_keys", diff --git a/litellm/integrations/lago.py b/litellm/integrations/lago.py index cf2f604754b..e6d38f530cb 100644 --- a/litellm/integrations/lago.py +++ b/litellm/integrations/lago.py @@ -7,7 +7,7 @@ import traceback, httpx from litellm.integrations.custom_logger import CustomLogger from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler import uuid -from typing import Optional +from typing import Optional, Literal def get_utc_datetime(): @@ -32,6 +32,10 @@ class LagoLogger(CustomLogger): Expects LAGO_API_BASE, LAGO_API_KEY, + LAGO_API_EVENT_CODE, + + Optional: + LAGO_API_CHARGE_BY in the environment """ @@ -72,15 +76,37 @@ class LagoLogger(CustomLogger): team_id = litellm_params["metadata"].get("user_api_key_team_id", None) org_id = litellm_params["metadata"].get("user_api_key_org_id", None) - if end_user_id is None: - raise Exception("LAGO: user is required") + charge_by: Literal["end_user_id", "team_id", "user_id"] = "end_user_id" + external_customer_id: Optional[str] = None + + if os.getenv("LAGO_API_CHARGE_BY", None) is not None and isinstance( + os.environ["LAGO_API_CHARGE_BY"], str + ): + if os.environ["LAGO_API_CHARGE_BY"] in [ + "end_user_id", + "user_id", + "team_id", + ]: + charge_by = os.environ["LAGO_API_CHARGE_BY"] # type: ignore + else: + raise Exception("invalid LAGO_API_CHARGE_BY set") + + if charge_by == "end_user_id": + external_customer_id = end_user_id + elif charge_by == "team_id": + external_customer_id = team_id + elif charge_by == "user_id": + external_customer_id = user_id + + if external_customer_id is None: + raise Exception("External Customer ID is not set") return { "event": { "transaction_id": str(uuid.uuid4()), - "external_customer_id": end_user_id, + "external_customer_id": external_customer_id, "code": os.getenv("LAGO_API_EVENT_CODE"), - "properties": {"model": model, "response_cost": 10000, **usage}, + "properties": {"model": model, "response_cost": cost, **usage}, } }

e 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 diff --git a/litellm/integrations/logfire_logger.py b/litellm/integrations/logfire_logger.py deleted file mode 100644 index e27d848fb4d..00000000000 --- a/litellm/integrations/logfire_logger.py +++ /dev/null @@ -1,178 +0,0 @@ -#### What this does #### -# On success + failure, log events to Logfire - -import dotenv, os - -dotenv.load_dotenv() # Loading env variables using dotenv -import traceback -import uuid -from litellm._logging import print_verbose, verbose_logger - -from enum import Enum -from typing import Any, Dict, NamedTuple -from typing_extensions import LiteralString - - -class SpanConfig(NamedTuple): - message_template: LiteralString - span_data: Dict[str, Any] - - -class LogfireLevel(str, Enum): - INFO = "info" - ERROR = "error" - - -class LogfireLogger: - # Class variables or attributes - def __init__(self): - try: - verbose_logger.debug(f"in init logfire logger") - import logfire - - # only setting up logfire if we are sending to logfire - # in testing, we don't want to send to logfire - if logfire.DEFAULT_LOGFIRE_INSTANCE.config.send_to_logfire: - logfire.configure(token=os.getenv("LOGFIRE_TOKEN")) - except Exception as e: - print_verbose(f"Got exception on init logfire client {str(e)}") - raise e - - def _get_span_config(self, payload) -> SpanConfig: - if ( - payload["call_type"] == "completion" - or payload["call_type"] == "acompletion" - ): - return SpanConfig( - message_template="Chat Completion with {request_data[model]!r}", - span_data={"request_data": payload}, - ) - elif ( - payload["call_type"] == "embedding" or payload["call_type"] == "aembedding" - ): - return SpanConfig( - message_template="Embedding Creation with {request_data[model]!r}", - span_data={"request_data": payload}, - ) - elif ( - payload["call_type"] == "image_generation" - or payload["call_type"] == "aimage_generation" - ): - return SpanConfig( - message_template="Image Generation with {request_data[model]!r}", - span_data={"request_data": payload}, - ) - else: - return SpanConfig( - message_template="Litellm Call with {request_data[model]!r}", - span_data={"request_data": payload}, - ) - - async def _async_log_event( - self, - kwargs, - response_obj, - start_time, - end_time, - print_verbose, - level: LogfireLevel, - ): - self.log_event( - kwargs=kwargs, - response_obj=response_obj, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - level=level, - ) - - def log_event( - self, - kwargs, - start_time, - end_time, - print_verbose, - level: LogfireLevel, - response_obj, - ): - try: - import logfire - - verbose_logger.debug( - f"logfire Logging - Enters logging function for model {kwargs}" - ) - - if not response_obj: - response_obj = {} - litellm_params = kwargs.get("litellm_params", {}) - metadata = ( - litellm_params.get("metadata", {}) or {} - ) # if litellm_params['metadata'] == None - messages = kwargs.get("messages") - optional_params = kwargs.get("optional_params", {}) - call_type = kwargs.get("call_type", "completion") - cache_hit = kwargs.get("cache_hit", False) - usage = response_obj.get("usage", {}) - id = response_obj.get("id", str(uuid.uuid4())) - try: - response_time = (end_time - start_time).total_seconds() - except: - response_time = None - - # Clean Metadata before logging - never log raw metadata - # the raw metadata can contain circular references which leads to infinite recursion - # we clean out all extra litellm metadata params before logging - clean_metadata = {} - if isinstance(metadata, dict): - for key, value in metadata.items(): - # clean litellm metadata before logging - if key in [ - "endpoint", - "caching_groups", - "previous_models", - ]: - continue - else: - clean_metadata[key] = value - - # Build the initial payload - payload = { - "id": id, - "call_type": call_type, - "cache_hit": cache_hit, - "startTime": start_time, - "endTime": end_time, - "responseTime (seconds)": response_time, - "model": kwargs.get("model", ""), - "user": kwargs.get("user", ""), - "modelParameters": optional_params, - "spend": kwargs.get("response_cost", 0), - "messages": messages, - "response": response_obj, - "usage": usage, - "metadata": clean_metadata, - } - logfire_openai = logfire.with_settings(custom_scope_suffix="openai") - message_template, span_data = self._get_span_config(payload) - if level == LogfireLevel.INFO: - logfire_openai.info( - message_template, - **span_data, - ) - elif level == LogfireLevel.ERROR: - logfire_openai.error( - message_template, - **span_data, - _exc_info=True, - ) - print_verbose(f"\ndd Logger - Logging payload = {payload}") - - print_verbose( - f"Logfire Layer Logging - final response object: {response_obj}" - ) - except Exception as e: - traceback.print_exc() - verbose_logger.debug( - f"Logfire Layer Error - {str(e)}\n{traceback.format_exc()}" - ) - pass diff --git a/litellm/tests/test_logfire.py b/litellm/tests/test_logfire.py deleted file mode 100644 index da1cb7bde86..00000000000 --- a/litellm/tests/test_logfire.py +++ /dev/null @@ -1,117 +0,0 @@ -import sys -import os -import json -import time - -import logfire -import litellm -import pytest -from logfire.testing import TestExporter, SimpleSpanProcessor - -sys.path.insert(0, os.path.abspath("../..")) - -# Testing scenarios for logfire logging: -# 1. Test logfire logging for completion -# 2. Test logfire logging for acompletion -# 3. Test logfire logging for completion while streaming is enabled -# 4. Test logfire logging for completion while streaming is enabled - - -@pytest.mark.parametrize("stream", [False, True]) -def test_completion_logfire_logging(stream): - litellm.success_callback = ["logfire"] - litellm.set_verbose = True - - exporter = TestExporter() - logfire.configure( - send_to_logfire=False, - console=False, - processors=[SimpleSpanProcessor(exporter)], - collect_system_metrics=False, - ) - messages = [{"role": "user", "content": "what llm are u"}] - temperature = 0.3 - max_tokens = 10 - response = litellm.completion( - model="gpt-3.5-turbo", - messages=messages, - max_tokens=max_tokens, - temperature=temperature, - stream=stream, - ) - print(response) - - if stream: - for chunk in response: - print(chunk) - - time.sleep(5) - exported_spans = exporter.exported_spans_as_dict() - - assert len(exported_spans) == 1 - assert ( - exported_spans[0]["attributes"]["logfire.msg"] - == "Chat Completion with 'gpt-3.5-turbo'" - ) - - request_data = json.loads(exported_spans[0]["attributes"]["request_data"]) - - assert request_data["model"] == "gpt-3.5-turbo" - assert request_data["messages"] == messages - - assert "completion_tokens" in request_data["usage"] - assert "prompt_tokens" in request_data["usage"] - assert "total_tokens" in request_data["usage"] - assert request_data["response"]["choices"][0]["message"]["content"] - assert request_data["modelParameters"]["max_tokens"] == max_tokens - assert request_data["modelParameters"]["temperature"] == temperature - - -@pytest.mark.asyncio -@pytest.mark.parametrize("stream", [False, True]) -async def test_acompletion_logfire_logging(stream): - litellm.success_callback = ["logfire"] - litellm.set_verbose = True - - exporter = TestExporter() - logfire.configure( - send_to_logfire=False, - console=False, - processors=[SimpleSpanProcessor(exporter)], - collect_system_metrics=False, - ) - messages = [{"role": "user", "content": "what llm are u"}] - temperature = 0.3 - max_tokens = 10 - response = await litellm.acompletion( - model="gpt-3.5-turbo", - messages=messages, - max_tokens=max_tokens, - temperature=temperature, - ) - print(response) - if stream: - for chunk in response: - print(chunk) - - time.sleep(5) - exported_spans = exporter.exported_spans_as_dict() - print("exported_spans", exported_spans) - - assert len(exported_spans) == 1 - assert ( - exported_spans[0]["attributes"]["logfire.msg"] - == "Chat Completion with 'gpt-3.5-turbo'" - ) - - request_data = json.loads(exported_spans[0]["attributes"]["request_data"]) - - assert request_data["model"] == "gpt-3.5-turbo" - assert request_data["messages"] == messages - - assert "completion_tokens" in request_data["usage"] - assert "prompt_tokens" in request_data["usage"] - assert "total_tokens" in request_data["usage"] - assert request_data["response"]["choices"][0]["message"]["content"] - assert request_data["modelParameters"]["max_tokens"] == max_tokens - assert request_data["modelParameters"]["temperature"] == temperature diff --git a/litellm/utils.py b/litellm/utils.py index c421ab64b54..00492a7d995 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -6,6 +6,7 @@ # +-----------------------------------------------+ # # Thank you users! We ❤️ you! - Krrish & Ishaan + import sys, re, binascii, struct import litellm import dotenv, json, traceback, threading, base64, ast @@ -65,7 +66,6 @@ from .integrations.supabase import Supabase from .integrations.lunary import LunaryLogger from .integrations.prompt_layer import PromptLayerLogger from .integrations.langsmith import LangsmithLogger -from .integrations.logfire_logger import LogfireLogger, LogfireLevel from .integrations.weights_biases import WeightsBiasesLogger from .integrations.custom_logger import CustomLogger from .integrations.langfuse import LangFuseLogger @@ -137,7 +137,6 @@ heliconeLogger = None athinaLogger = None promptLayerLogger = None langsmithLogger = None -logfireLogger = None weightsBiasesLogger = None customLogger = None langFuseLogger = None @@ -1091,7 +1090,7 @@ class CallTypes(Enum): # Logging function -> log the exact model details + what's being sent | Non-BlockingP class Logging: - global supabaseClient, liteDebuggerClient, promptLayerLogger, weightsBiasesLogger, langsmithLogger, logfireLogger, capture_exception, add_breadcrumb, lunaryLogger + global supabaseClient, liteDebuggerClient, promptLayerLogger, weightsBiasesLogger, langsmithLogger, capture_exception, add_breadcrumb, lunaryLogger custom_pricing: bool = False @@ -1633,7 +1632,7 @@ class Logging: # this only logs streaming once, complete_streaming_response exists i.e when stream ends if self.stream: if "complete_streaming_response" not in kwargs: - continue + return else: print_verbose("reaches supabase for streaming logging!") result = kwargs["complete_streaming_response"] @@ -1667,7 +1666,7 @@ class Logging: print_verbose("reaches langsmith for logging!") if self.stream: if "complete_streaming_response" not in kwargs: - continue + break else: print_verbose( "reaches langsmith for streaming logging!" @@ -1680,33 +1679,6 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - if callback == "logfire": - global logfireLogger - verbose_logger.debug("reaches logfire for success logging!") - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - if "complete_streaming_response" not in kwargs: - continue - else: - print_verbose("reaches logfire for streaming logging!") - result = kwargs["complete_streaming_response"] - - logfireLogger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - level=LogfireLevel.INFO.value, - ) - if callback == "lunary": print_verbose("reaches lunary for logging!") model = self.model @@ -1723,7 +1695,7 @@ class Logging: # this only logs streaming once, complete_streaming_response exists i.e when stream ends if self.stream: if "complete_streaming_response" not in kwargs: - continue + break else: result = kwargs["complete_streaming_response"] @@ -1868,7 +1840,7 @@ class Logging: f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" ) if complete_streaming_response is None: - continue + break else: print_verbose("reaches langfuse for streaming logging!") result = kwargs["complete_streaming_response"] @@ -1897,7 +1869,7 @@ class Logging: f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" ) if complete_streaming_response is None: - continue + break else: print_verbose( "reaches clickhouse for streaming logging!" @@ -1926,7 +1898,7 @@ class Logging: f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" ) if complete_streaming_response is None: - continue + break else: print_verbose( "reaches greenscale for streaming logging!" @@ -2397,9 +2369,7 @@ class Logging: def failure_handler( self, exception, traceback_exception, start_time=None, end_time=None ): - print_verbose( - f"Logging Details LiteLLM-Failure Call: {litellm.failure_callback}" - ) + print_verbose(f"Logging Details LiteLLM-Failure Call") try: start_time, end_time = self._failure_handler_helper_fn( exception=exception, @@ -2454,7 +2424,7 @@ class Logging: call_type=self.call_type, stream=self.stream, ) - if callback == "lunary": + elif callback == "lunary": print_verbose("reaches lunary for logging error!") model = self.model @@ -2479,7 +2449,7 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - if callback == "sentry": + elif callback == "sentry": print_verbose("sending exception to sentry") if capture_exception: capture_exception(exception) @@ -2487,7 +2457,7 @@ class Logging: print_verbose( f"capture exception not initialized: {capture_exception}" ) - if callable(callback): # custom logger functions + elif callable(callback): # custom logger functions customLogger.log_event( kwargs=self.model_call_details, response_obj=result, @@ -2496,7 +2466,7 @@ class Logging: print_verbose=print_verbose, callback_func=callback, ) - if ( + elif ( isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get( "acompletion", False @@ -2513,7 +2483,7 @@ class Logging: response_obj=result, kwargs=self.model_call_details, ) - if callback == "langfuse": + elif callback == "langfuse": global langFuseLogger verbose_logger.debug("reaches langfuse for logging failure") kwargs = {} @@ -2549,7 +2519,7 @@ class Logging: level="ERROR", kwargs=self.model_call_details, ) - if callback == "prometheus": + elif callback == "prometheus": global prometheusLogger verbose_logger.debug("reaches prometheus for success logging!") kwargs = {} @@ -2567,26 +2537,6 @@ class Logging: user_id=kwargs.get("user", None), print_verbose=print_verbose, ) - - if callback == "logfire": - global logfireLogger - verbose_logger.debug("reaches logfire for failure logging!") - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - kwargs["exception"] = exception - - logfireLogger.log_event( - kwargs=kwargs, - response_obj=result, - start_time=start_time, - end_time=end_time, - level=LogfireLevel.ERROR.value, - print_verbose=print_verbose, - ) except Exception as e: print_verbose( f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging with integrations {str(e)}" @@ -3336,7 +3286,6 @@ def client(original_function): return original_function(*args, **kwargs) traceback_exception = traceback.format_exc() end_time = datetime.datetime.now() - # LOG FAILURE - handle streaming failure logging in the _next_ object, remove `handle_failure` once it's deprecated if logging_obj: logging_obj.failure_handler( @@ -7345,7 +7294,7 @@ def validate_environment(model: Optional[str] = None) -> dict: def set_callbacks(callback_list, function_id=None): - global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, aispendLogger, berrispendLogger, supabaseClient, liteDebuggerClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, langsmithLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger + global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, aispendLogger, berrispendLogger, supabaseClient, liteDebuggerClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, langsmithLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger try: for callback in callback_list: @@ -7427,8 +7376,6 @@ def set_callbacks(callback_list, function_id=None): weightsBiasesLogger = WeightsBiasesLogger() elif callback == "langsmith": langsmithLogger = LangsmithLogger() - elif callback == "logfire": - logfireLogger = LogfireLogger() elif callback == "aispend": aispendLogger = AISpendLogger() elif callback == "berrispend": From a1dd341ca1429edf478e9152dbb06976c9d56c43 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 18:36:34 -0700 Subject: [PATCH 283/378] fix(utils.py): default claude-3 to tiktoken (0.8s faster than hf tokenizer) --- litellm/tests/test_token_counter.py | 46 +++++++++++++++++++++++++++-- litellm/utils.py | 32 +++++++++----------- 2 files changed, 57 insertions(+), 21 deletions(-) diff --git a/litellm/tests/test_token_counter.py b/litellm/tests/test_token_counter.py index 4d759d4cff4..50734f7cc22 100644 --- a/litellm/tests/test_token_counter.py +++ b/litellm/tests/test_token_counter.py @@ -10,6 +10,7 @@ sys.path.insert( ) # Adds the parent directory to the system path import time from litellm import token_counter, create_pretrained_tokenizer, encode, decode +from litellm.tests.large_text import text def test_token_counter_normal_plus_function_calling(): @@ -70,10 +71,14 @@ def test_tokenizers(): ) # llama3 tokenizer (also testing custom tokenizer) - llama3_tokens_1 = token_counter(model="meta-llama/llama-3-70b-instruct", text=sample_text) + llama3_tokens_1 = token_counter( + model="meta-llama/llama-3-70b-instruct", text=sample_text + ) llama3_tokenizer = create_pretrained_tokenizer("Xenova/llama-3-tokenizer") - llama3_tokens_2 = token_counter(custom_tokenizer=llama3_tokenizer, text=sample_text) + llama3_tokens_2 = token_counter( + custom_tokenizer=llama3_tokenizer, text=sample_text + ) print( f"openai tokens: {openai_tokens}; claude tokens: {claude_tokens}; cohere tokens: {cohere_tokens}; llama2 tokens: {llama2_tokens}; llama3 tokens: {llama3_tokens_1}" @@ -84,7 +89,9 @@ def test_tokenizers(): openai_tokens != cohere_tokens != llama2_tokens != llama3_tokens_1 ), "Token values are not different." - assert llama3_tokens_1 == llama3_tokens_2, "Custom tokenizer is not being used! It has been configured to use the same tokenizer as the built in llama3 tokenizer and the results should be the same." + assert ( + llama3_tokens_1 == llama3_tokens_2 + ), "Custom tokenizer is not being used! It has been configured to use the same tokenizer as the built in llama3 tokenizer and the results should be the same." print("test tokenizer: It worked!") except Exception as e: @@ -147,3 +154,36 @@ def test_gpt_vision_token_counting(): # test_gpt_vision_token_counting() + + +@pytest.mark.parametrize( + "model", + [ + "gpt-4-vision-preview", + "gpt-4o", + "claude-3-opus-20240229", + "command-nightly", + "mistral/mistral-tiny", + ], +) +def test_load_test_token_counter(model): + """ + Token count large prompt 100 times. + + Assert time taken is < 1.5s. + """ + import tiktoken + + enc = tiktoken.get_encoding("cl100k_base") + messages = [{"role": "user", "content": text}] * 10 + + start_time = time.time() + for _ in range(50): + _ = token_counter(model=model, messages=messages) + # enc.encode("".join(m["content"] for m in messages)) + + end_time = time.time() + + total_time = end_time - start_time + print("model={}, total test time={}".format(model, total_time)) + assert total_time < 1.5, f"Total encoding time > 1.5s, {total_time}" diff --git a/litellm/utils.py b/litellm/utils.py index 00492a7d995..00f39cc013e 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -54,6 +54,14 @@ os.environ["TIKTOKEN_CACHE_DIR"] = ( ) encoding = tiktoken.get_encoding("cl100k_base") +from importlib import resources + +with resources.open_text("litellm.llms.tokenizers", "anthropic_tokenizer.json") as f: + json_data = json.load(f) +# Convert to str (if necessary) +json_str = json.dumps(json_data) +claude_tokenizer = Tokenizer.from_str(json_str) +cohere_tokenizer = Tokenizer.from_pretrained("Xenova/c4ai-command-r-v01-tokenizer") import importlib.metadata from ._logging import verbose_logger from .types.router import LiteLLM_Params @@ -3848,23 +3856,13 @@ def get_replicate_completion_pricing(completion_response=None, total_time=0.0): @lru_cache(maxsize=128) def _select_tokenizer(model: str): - from importlib import resources - - if model in litellm.cohere_models: + global claude_tokenizer, cohere_tokenizer + if model in litellm.cohere_models and "command-r" in model: # cohere - tokenizer = Tokenizer.from_pretrained("Cohere/command-nightly") - return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} + return {"type": "huggingface_tokenizer", "tokenizer": cohere_tokenizer} # anthropic - elif model in litellm.anthropic_models: - with resources.open_text( - "litellm.llms.tokenizers", "anthropic_tokenizer.json" - ) as f: - json_data = json.load(f) - # Convert to str (if necessary) - json_str = json.dumps(json_data) - # load tokenizer - tokenizer = Tokenizer.from_str(json_str) - return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} + elif model in litellm.anthropic_models and "claude-3" not in model: + return {"type": "huggingface_tokenizer", "tokenizer": claude_tokenizer} # llama2 elif "llama-2" in model.lower() or "replicate" in model.lower(): tokenizer = Tokenizer.from_pretrained("hf-internal-testing/llama-tokenizer") @@ -4170,9 +4168,6 @@ def token_counter( if model is not None or custom_tokenizer is not None: tokenizer_json = custom_tokenizer or _select_tokenizer(model=model) if tokenizer_json["type"] == "huggingface_tokenizer": - print_verbose( - f"Token Counter - using hugging face token counter, for model={model}" - ) enc = tokenizer_json["tokenizer"].encode(text) num_tokens = len(enc.ids) elif tokenizer_json["type"] == "openai_tokenizer": @@ -4207,6 +4202,7 @@ def token_counter( ) else: num_tokens = len(encoding.encode(text, disallowed_special=())) # type: ignore + return num_tokens From 6de358cf2140de9f094c630141818d040ed57690 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 18:40:14 -0700 Subject: [PATCH 284/378] build(model_prices_and_context_window.json): support new gemini 1.5 preview models --- litellm/model_prices_and_context_window_backup.json | 12 ++++++++++++ model_prices_and_context_window.json | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 10801e9c184..a88d6875ca2 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1128,6 +1128,18 @@ "supports_vision": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, + "gemini-1.5-pro-preview-0514": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "input_cost_per_token": 0.000000625, + "output_cost_per_token": 0.000001875, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_function_calling": true, + "supports_tool_choice": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, "gemini-1.5-pro-preview-0215": { "max_tokens": 8192, "max_input_tokens": 1000000, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 10801e9c184..a88d6875ca2 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1128,6 +1128,18 @@ "supports_vision": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, + "gemini-1.5-pro-preview-0514": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "input_cost_per_token": 0.000000625, + "output_cost_per_token": 0.000001875, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_function_calling": true, + "supports_tool_choice": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, "gemini-1.5-pro-preview-0215": { "max_tokens": 8192, "max_input_tokens": 1000000, From 298fd9b25cc75f99cdfb6b144f871c5288db11e2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 19:03:17 -0700 Subject: [PATCH 285/378] fix(main.py): ignore model_config param --- litellm/main.py | 3 +++ litellm/tests/test_proxy_custom_logger.py | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 6156d9c398b..69ec7985de4 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -665,6 +665,7 @@ def completion( "supports_system_message", "region_name", "allowed_model_region", + "model_config", ] default_params = openai_params + litellm_params @@ -2860,6 +2861,7 @@ def embedding( "no-log", "region_name", "allowed_model_region", + "model_config", ] default_params = openai_params + litellm_params non_default_params = { @@ -3760,6 +3762,7 @@ def image_generation( "cache", "region_name", "allowed_model_region", + "model_config", ] default_params = openai_params + litellm_params non_default_params = { diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index 5496b6c834e..e9000ada106 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -10,7 +10,7 @@ import os, io, asyncio sys.path.insert( 0, os.path.abspath("../..") ) # Adds the parent directory to the system path -import pytest +import pytest, time import litellm from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError @@ -159,7 +159,7 @@ def test_chat_completion(client): response = client.post("/chat/completions", json=test_data, headers=headers) print("made request", response.status_code, response.text) print("LiteLLM Callbacks", litellm.callbacks) - asyncio.sleep(1) # sleep while waiting for callback to run + time.sleep(1) # sleep while waiting for callback to run print( "my_custom_logger in /chat/completions", From 1ab497477315aa5a21f7adfe6ca2334d446d0956 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 19:09:36 -0700 Subject: [PATCH 286/378] fix: disable 'load_dotenv' for prod environments --- litellm/__init__.py | 4 +++- litellm/proxy/proxy_cli.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index c5e407eb1f5..4074c9e0354 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -15,7 +15,9 @@ from litellm.proxy._types import ( import httpx import dotenv -dotenv.load_dotenv() +litellm_mode = os.getenv("LITELLM_PRODUCTION_MODE", "DEV") # "PRODUCTION", "DEV" +if litellm_mode == "DEV": + dotenv.load_dotenv() ############################################# if set_verbose == True: _turn_on_debug() diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index 0d0919e18b5..f1d0b52e2e9 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -11,7 +11,9 @@ sys.path.append(os.getcwd()) config_filename = "litellm.secrets" -load_dotenv() +litellm_mode = os.getenv("LITELLM_PRODUCTION_MODE", "DEV") # "PRODUCTION", "DEV" +if litellm_mode == "DEV": + load_dotenv() from importlib import resources import shutil From 9eee2f3889d28fbebb131f7d938cf708fbd1c50e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 19:13:22 -0700 Subject: [PATCH 287/378] docs(prod.md): add 'disable load_dotenv' tutorial to docs --- docs/my-website/docs/proxy/prod.md | 6 ++++++ litellm/__init__.py | 2 +- litellm/proxy/proxy_cli.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/proxy/prod.md b/docs/my-website/docs/proxy/prod.md index 32cd916c986..35c8c575bab 100644 --- a/docs/my-website/docs/proxy/prod.md +++ b/docs/my-website/docs/proxy/prod.md @@ -64,6 +64,12 @@ router_settings: redis_password: os.environ/REDIS_PASSWORD ``` +## 4. Disable 'load_dotenv' + +Set `export LITELLM_MODE="PRODUCTION"` + +This disables the load_dotenv() functionality, which will automatically load your environment credentials from the local `.env`. + ## Extras ### Expected Performance in Production diff --git a/litellm/__init__.py b/litellm/__init__.py index 4074c9e0354..0db5d365a6e 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -15,7 +15,7 @@ from litellm.proxy._types import ( import httpx import dotenv -litellm_mode = os.getenv("LITELLM_PRODUCTION_MODE", "DEV") # "PRODUCTION", "DEV" +litellm_mode = os.getenv("LITELLM_MODE", "DEV") # "PRODUCTION", "DEV" if litellm_mode == "DEV": dotenv.load_dotenv() ############################################# diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index f1d0b52e2e9..50eca5ecb3a 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -11,7 +11,7 @@ sys.path.append(os.getcwd()) config_filename = "litellm.secrets" -litellm_mode = os.getenv("LITELLM_PRODUCTION_MODE", "DEV") # "PRODUCTION", "DEV" +litellm_mode = os.getenv("LITELLM_MODE", "DEV") # "PRODUCTION", "DEV" if litellm_mode == "DEV": load_dotenv() from importlib import resources From 0262c480beb9bcbb7d6e3906a66a8e9b4306efcd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 19:52:23 -0700 Subject: [PATCH 288/378] refactor(main.py): trigger new build --- .circleci/config.yml | 1 + litellm/main.py | 1 + 2 files changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 35707dbffd2..91f36c03735 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,6 +58,7 @@ jobs: pip install python-multipart pip install google-cloud-aiplatform pip install prometheus-client==0.20.0 + pip install "pydantic==2.7.1" - save_cache: paths: - ./venv diff --git a/litellm/main.py b/litellm/main.py index 69ec7985de4..3429cab4d2f 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -14,6 +14,7 @@ from functools import partial import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx + import litellm from ._logging import verbose_logger from litellm import ( # type: ignore From 446698250722974b7eba7c33185b62419d4ce5a6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 19:58:51 -0700 Subject: [PATCH 289/378] feat - cancel tasks when fast api request is cancelled --- litellm/proxy/proxy_server.py | 58 ++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 720033419a1..ccf8e32e129 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -351,6 +351,32 @@ def _get_pydantic_json_dict(pydantic_obj: BaseModel) -> dict: return pydantic_obj.dict() +async def check_request_disconnection(request: Request, llm_api_call_task): + """ + Asynchronously checks if the request is disconnected at regular intervals. + If the request is disconnected + - cancel the litellm.router task + - raises an HTTPException with status code 499 and detail "Client disconnected the request". + + Parameters: + - request: Request: The request object to check for disconnection. + Returns: + - None + """ + while True: + await asyncio.sleep(1) + if await request.is_disconnected(): + + # cancel the LLM API Call task if any passed - this is passed from individual providers + # Example OpenAI, Azure, VertexAI etc + llm_api_call_task.cancel() + + raise HTTPException( + status_code=499, + detail="Client disconnected the request", + ) + + async def user_api_key_auth( request: Request, api_key: str = fastapi.Security(api_key_header) ) -> UserAPIKeyAuth: @@ -3768,9 +3794,15 @@ async def chat_completion( ) # wait for call to end - responses = await asyncio.gather( + llm_responses = asyncio.gather( *tasks ) # run the moderation check in parallel to the actual llm api call + + check_request_disconnected = asyncio.create_task( + check_request_disconnection(request, llm_responses) + ) + responses = await llm_responses + response = responses[1] hidden_params = getattr(response, "_hidden_params", {}) or {} @@ -3845,6 +3877,8 @@ async def chat_completion( param=getattr(e, "param", "None"), code=getattr(e, "status_code", 500), ) + finally: + check_request_disconnected.cancel() @router.post( @@ -3933,31 +3967,31 @@ async def completion( router_model_names = llm_router.model_names if llm_router is not None else [] # skip router if user passed their key if "api_key" in data: - response = await litellm.atext_completion(**data) + llm_response = asyncio.create_task(litellm.atext_completion(**data)) elif ( llm_router is not None and data["model"] in router_model_names ): # model in router model list - response = await llm_router.atext_completion(**data) + llm_response = asyncio.create_task(llm_router.atext_completion(**data)) elif ( llm_router is not None and llm_router.model_group_alias is not None and data["model"] in llm_router.model_group_alias ): # model set in model_group_alias - response = await llm_router.atext_completion(**data) + llm_response = asyncio.create_task(llm_router.atext_completion(**data)) elif ( llm_router is not None and data["model"] in llm_router.deployment_names ): # model in router deployments, calling a specific deployment on the router - response = await llm_router.atext_completion( - **data, specific_deployment=True + llm_response = asyncio.create_task( + llm_router.atext_completion(**data, specific_deployment=True) ) elif ( llm_router is not None and data["model"] not in router_model_names and llm_router.default_deployment is not None ): # model in router deployments, calling a specific deployment on the router - response = await llm_router.atext_completion(**data) + llm_response = asyncio.create_task(llm_router.atext_completion(**data)) elif user_model is not None: # `litellm --model ` - response = await litellm.atext_completion(**data) + llm_response = asyncio.create_task(litellm.atext_completion(**data)) else: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, @@ -3966,6 +4000,12 @@ async def completion( + data.get("model", "") }, ) + check_request_disconnected = asyncio.create_task( + check_request_disconnection(request, llm_response) + ) + + # Await the llm_response task + response = await llm_response hidden_params = getattr(response, "_hidden_params", {}) or {} model_id = hidden_params.get("model_id", None) or "" @@ -4016,6 +4056,8 @@ async def completion( param=getattr(e, "param", "None"), code=getattr(e, "status_code", 500), ) + finally: + check_request_disconnected.cancel() @router.post( From 6d1ae5b9c47330eafc17c5112dce52f567e31bef Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 20:18:12 -0700 Subject: [PATCH 290/378] (ci/cd) run again --- .circleci/config.yml | 1 + litellm/tests/test_completion.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 91f36c03735..2727cd221b3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -59,6 +59,7 @@ jobs: pip install google-cloud-aiplatform pip install prometheus-client==0.20.0 pip install "pydantic==2.7.1" + pip install "diskcache==5.6.1" - save_cache: paths: - ./venv diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index ccc73a26036..02f36623f0c 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -93,7 +93,7 @@ def _openai_mock_response(*args, **kwargs) -> litellm.ModelResponse: def test_null_role_response(): """ - Test if api returns 'null' role, 'assistant' role is still returned + Test if the api returns 'null' role, 'assistant' role is still returned """ import openai From e7af8d61cd6204fb3e74eb205249029b65755aa2 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 20:38:32 -0700 Subject: [PATCH 291/378] fix check_request_disconnected = None case --- litellm/proxy/proxy_server.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index ccf8e32e129..e747e1047ab 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -3619,6 +3619,7 @@ async def chat_completion( ): global general_settings, user_debug, proxy_logging_obj, llm_model_list data = {} + check_request_disconnected = None try: body = await request.body() body_str = body.decode() @@ -3878,7 +3879,8 @@ async def chat_completion( code=getattr(e, "status_code", 500), ) finally: - check_request_disconnected.cancel() + if check_request_disconnected is not None: + check_request_disconnected.cancel() @router.post( @@ -3904,6 +3906,7 @@ async def completion( user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), ): global user_temperature, user_request_timeout, user_max_tokens, user_api_base + check_request_disconnected = None try: body = await request.body() body_str = body.decode() @@ -4057,7 +4060,8 @@ async def completion( code=getattr(e, "status_code", 500), ) finally: - check_request_disconnected.cancel() + if check_request_disconnected is not None: + check_request_disconnected.cancel() @router.post( From faa58c7938da41f9dea9295d0dcdba30077db8b9 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 20:45:07 -0700 Subject: [PATCH 292/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 02f36623f0c..595edb9645e 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -59,7 +59,7 @@ def test_completion_custom_provider_model_name(): messages=messages, logger_fn=logger_fn, ) - # Add any assertions here to, check the response + # Add assertions here to, check the response print(response) print(response["choices"][0]["finish_reason"]) except litellm.Timeout as e: From 73b6b5e8040ede939199bd1b6d6e24d8f042cc52 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 21:34:53 -0700 Subject: [PATCH 293/378] test(test_token_counter.py): fix token counting test --- litellm/tests/test_token_counter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_token_counter.py b/litellm/tests/test_token_counter.py index 50734f7cc22..4d851573cc5 100644 --- a/litellm/tests/test_token_counter.py +++ b/litellm/tests/test_token_counter.py @@ -86,7 +86,7 @@ def test_tokenizers(): # assert that all token values are different assert ( - openai_tokens != cohere_tokens != llama2_tokens != llama3_tokens_1 + openai_tokens != llama2_tokens != llama3_tokens_1 ), "Token values are not different." assert ( @@ -118,7 +118,7 @@ def test_encoding_and_decoding(): # cohere encoding + decoding cohere_tokens = encode(model="command-nightly", text=sample_text) - cohere_text = decode(model="command-nightly", tokens=cohere_tokens.ids) + cohere_text = decode(model="command-nightly", tokens=cohere_tokens) assert cohere_text == sample_text @@ -186,4 +186,4 @@ def test_load_test_token_counter(model): total_time = end_time - start_time print("model={}, total test time={}".format(model, total_time)) - assert total_time < 1.5, f"Total encoding time > 1.5s, {total_time}" + assert total_time < 2, f"Total encoding time > 1.5s, {total_time}" From 6290de36dfc29f49b3aeaa30f18b85eb0ee24e6a Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 21:39:09 -0700 Subject: [PATCH 294/378] (ci/cd) run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 595edb9645e..a67a275f622 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -59,7 +59,7 @@ def test_completion_custom_provider_model_name(): messages=messages, logger_fn=logger_fn, ) - # Add assertions here to, check the response + # Add assertions here to check the response print(response) print(response["choices"][0]["finish_reason"]) except litellm.Timeout as e: From 0bac40b0f20a934e529d6e724178d3d2813fd291 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 14 May 2024 21:53:14 -0700 Subject: [PATCH 295/378] ci/cd run again --- litellm/tests/test_completion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index a67a275f622..b5fa141cc4a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -59,7 +59,7 @@ def test_completion_custom_provider_model_name(): messages=messages, logger_fn=logger_fn, ) - # Add assertions here to check the response + # Add assertions here to check the-response print(response) print(response["choices"][0]["finish_reason"]) except litellm.Timeout as e: From 54587db402ee2029db355696c24ecc105721b793 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:09:33 -0700 Subject: [PATCH 296/378] fix(alerting.py): fix datetime comparison logic --- litellm/integrations/slack_alerting.py | 32 +++++++++++++++++--------- litellm/utils.py | 9 ++++---- proxy_server_config.yaml | 8 ++++++- tests/test_end_users.py | 6 +++-- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/litellm/integrations/slack_alerting.py b/litellm/integrations/slack_alerting.py index a56e894ad05..ec2740e3005 100644 --- a/litellm/integrations/slack_alerting.py +++ b/litellm/integrations/slack_alerting.py @@ -12,7 +12,7 @@ from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler import datetime from pydantic import BaseModel from enum import Enum -from datetime import datetime as dt, timedelta +from datetime import datetime as dt, timedelta, timezone from litellm.integrations.custom_logger import CustomLogger import random @@ -32,7 +32,9 @@ class LiteLLMBase(BaseModel): class SlackAlertingArgs(LiteLLMBase): default_daily_report_frequency: int = 12 * 60 * 60 # 12 hours - daily_report_frequency: int = int(os.getenv("SLACK_DAILY_REPORT_FREQUENCY", default_daily_report_frequency)) + daily_report_frequency: int = int( + os.getenv("SLACK_DAILY_REPORT_FREQUENCY", default_daily_report_frequency) + ) report_check_interval: int = 5 * 60 # 5 minutes @@ -373,8 +375,10 @@ class SlackAlerting(CustomLogger): key=lambda i: replaced_failed_values[i], reverse=True, )[:5] - top_5_failed = [index for index in top_5_failed if replaced_failed_values[index] > 0] - + top_5_failed = [ + index for index in top_5_failed if replaced_failed_values[index] > 0 + ] + # find top 5 slowest # Replace None values with a placeholder value (-1 in this case) placeholder_value = 0 @@ -389,7 +393,9 @@ class SlackAlerting(CustomLogger): key=lambda i: replaced_slowest_values[i], reverse=True, )[:5] - top_5_slowest = [index for index in top_5_slowest if replaced_slowest_values[index] > 0] + top_5_slowest = [ + index for index in top_5_slowest if replaced_slowest_values[index] > 0 + ] # format alert -> return the litellm model name + api base message = f"\n\nHere are today's key metrics 📈: \n\n" @@ -847,15 +853,19 @@ Model Info: value=_current_time, ) else: - # check if current time - interval >= time last sent - delta = current_time - timedelta( - seconds=self.alerting_args.daily_report_frequency - ) - + # Check if current time - interval >= time last sent + delta_naive = timedelta(seconds=self.alerting_args.daily_report_frequency) if isinstance(report_sent, str): report_sent = dt.fromisoformat(report_sent) - if delta >= report_sent: + # Ensure report_sent is an aware datetime object + if report_sent.tzinfo is None: + report_sent = report_sent.replace(tzinfo=timezone.utc) + + # Calculate delta as an aware datetime object with the same timezone as report_sent + delta = report_sent - delta_naive + + if current_time >= delta: # Sneak in the reporting logic here await self.send_daily_reports(router=llm_router) # Also, don't forget to update the report_sent time after sending the report! diff --git a/litellm/utils.py b/litellm/utils.py index 00f39cc013e..7df79f37360 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -59,9 +59,7 @@ from importlib import resources with resources.open_text("litellm.llms.tokenizers", "anthropic_tokenizer.json") as f: json_data = json.load(f) # Convert to str (if necessary) -json_str = json.dumps(json_data) -claude_tokenizer = Tokenizer.from_str(json_str) -cohere_tokenizer = Tokenizer.from_pretrained("Xenova/c4ai-command-r-v01-tokenizer") +claude_json_str = json.dumps(json_data) import importlib.metadata from ._logging import verbose_logger from .types.router import LiteLLM_Params @@ -3856,12 +3854,15 @@ def get_replicate_completion_pricing(completion_response=None, total_time=0.0): @lru_cache(maxsize=128) def _select_tokenizer(model: str): - global claude_tokenizer, cohere_tokenizer if model in litellm.cohere_models and "command-r" in model: # cohere + cohere_tokenizer = Tokenizer.from_pretrained( + "Xenova/c4ai-command-r-v01-tokenizer" + ) return {"type": "huggingface_tokenizer", "tokenizer": cohere_tokenizer} # anthropic elif model in litellm.anthropic_models and "claude-3" not in model: + claude_tokenizer = Tokenizer.from_str(claude_json_str) return {"type": "huggingface_tokenizer", "tokenizer": claude_tokenizer} # llama2 elif "llama-2" in model.lower() or "replicate" in model.lower(): diff --git a/proxy_server_config.yaml b/proxy_server_config.yaml index 9b0e7c9d0cc..10f0d4a751f 100644 --- a/proxy_server_config.yaml +++ b/proxy_server_config.yaml @@ -1,10 +1,16 @@ model_list: - - model_name: gpt-3.5-turbo + - model_name: gpt-3.5-turbo-end-user-test litellm_params: model: gpt-3.5-turbo region_name: "eu" model_info: id: "1" + - model_name: gpt-3.5-turbo-end-user-test + litellm_params: + model: azure/chatgpt-v-2 + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + api_key: os.environ/AZURE_API_KEY # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault - model_name: gpt-3.5-turbo litellm_params: model: azure/chatgpt-v-2 diff --git a/tests/test_end_users.py b/tests/test_end_users.py index 3f1568f96dd..f49213044ff 100644 --- a/tests/test_end_users.py +++ b/tests/test_end_users.py @@ -153,7 +153,9 @@ async def test_end_user_specific_region(): ) ## MAKE CALL ## - key_gen = await generate_key(session=session, i=0, models=["gpt-3.5-turbo"]) + key_gen = await generate_key( + session=session, i=0, models=["gpt-3.5-turbo-end-user-test"] + ) key = key_gen["key"] @@ -162,7 +164,7 @@ async def test_end_user_specific_region(): print("SENDING USER PARAM - {}".format(end_user_obj["user_id"])) result = await client.chat.completions.with_raw_response.create( - model="gpt-3.5-turbo", + model="gpt-3.5-turbo-end-user-test", messages=[{"role": "user", "content": "Hey!"}], user=end_user_obj["user_id"], ) From 3b5c06747d0c1abd9a3da1109b991c5d43a79524 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:17:40 -0700 Subject: [PATCH 297/378] refactor(main.py): trigger new build --- litellm/main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/main.py b/litellm/main.py index 3429cab4d2f..69ec7985de4 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -14,7 +14,6 @@ from functools import partial import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx - import litellm from ._logging import verbose_logger from litellm import ( # type: ignore From 83ba819602551186d305936903120cec2b70ff54 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:17:52 -0700 Subject: [PATCH 298/378] =?UTF-8?q?bump:=20version=201.37.9=20=E2=86=92=20?= =?UTF-8?q?1.37.10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 49689da7881..3250eed82f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.37.9" +version = "1.37.10" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT" @@ -79,7 +79,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.37.9" +version = "1.37.10" version_files = [ "pyproject.toml:^version" ] From 8f3bf584be7388106045d46d9db59874b8613179 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:26:56 -0700 Subject: [PATCH 299/378] docs(vertex.md): add gemini 1.5 flash to vertex docs --- docs/my-website/docs/providers/vertex.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/my-website/docs/providers/vertex.md b/docs/my-website/docs/providers/vertex.md index 8d59088af5b..b67eb350b4b 100644 --- a/docs/my-website/docs/providers/vertex.md +++ b/docs/my-website/docs/providers/vertex.md @@ -364,6 +364,8 @@ response = completion( | Model Name | Function Call | |------------------|--------------------------------------| | gemini-1.5-pro | `completion('gemini-1.5-pro', messages)`, `completion('vertex_ai/gemini-pro', messages)` | +| gemini-1.5-flash-preview-0514 | `completion('gemini-1.5-flash-preview-0514', messages)`, `completion('vertex_ai/gemini-pro', messages)` | +| gemini-1.5-pro-preview-0514 | `completion('gemini-1.5-pro-preview-0514', messages)`, `completion('vertex_ai/gemini-1.5-pro-preview-0514', messages)` | From e0c1fe91f5ba58c73120b5b97bfa4c7eb0e385b4 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:34:26 -0700 Subject: [PATCH 300/378] test(test_end_users.py): fix end user test --- tests/test_end_users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_end_users.py b/tests/test_end_users.py index f49213044ff..83bffdc12be 100644 --- a/tests/test_end_users.py +++ b/tests/test_end_users.py @@ -169,4 +169,4 @@ async def test_end_user_specific_region(): user=end_user_obj["user_id"], ) - assert result.headers.get("x-litellm-model-id") == "1" + assert result.headers.get("x-litellm-model-region") == "eu" From b06f9898713807faa96cbb400b87743de9197c81 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:46:44 -0700 Subject: [PATCH 301/378] refactor(main.py): trigger new build --- litellm/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/main.py b/litellm/main.py index 69ec7985de4..3429cab4d2f 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -14,6 +14,7 @@ from functools import partial import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx + import litellm from ._logging import verbose_logger from litellm import ( # type: ignore From 4ff0703a3117abcf094b91334a9e8e886c676899 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 14 May 2024 22:54:33 -0700 Subject: [PATCH 302/378] fix(slack_alerting.py): fix timezone utc issue --- litellm/integrations/slack_alerting.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/litellm/integrations/slack_alerting.py b/litellm/integrations/slack_alerting.py index ec2740e3005..40258af6b8d 100644 --- a/litellm/integrations/slack_alerting.py +++ b/litellm/integrations/slack_alerting.py @@ -865,7 +865,10 @@ Model Info: # Calculate delta as an aware datetime object with the same timezone as report_sent delta = report_sent - delta_naive - if current_time >= delta: + current_time_utc = current_time.astimezone(timezone.utc) + delta_utc = delta.astimezone(timezone.utc) + + if current_time_utc >= delta_utc: # Sneak in the reporting logic here await self.send_daily_reports(router=llm_router) # Also, don't forget to update the report_sent time after sending the report! From 81836ebe5d19ea426da7de2197c29c5271718467 Mon Sep 17 00:00:00 2001 From: Edwin Jose George <52248484+edwinjosegeorge@users.noreply.github.com> Date: Wed, 15 May 2024 22:36:15 +0930 Subject: [PATCH 303/378] fix: custom_llm_provider needs to be set before setting timeout --- litellm/main.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 3429cab4d2f..d51c28f244a 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -674,20 +674,6 @@ def completion( k: v for k, v in kwargs.items() if k not in default_params } # model-specific params - pass them straight to the model/provider - ### TIMEOUT LOGIC ### - timeout = timeout or kwargs.get("request_timeout", 600) or 600 - # set timeout for 10 minutes by default - - if ( - timeout is not None - and isinstance(timeout, httpx.Timeout) - and supports_httpx_timeout(custom_llm_provider) == False - ): - read_timeout = timeout.read or 600 - timeout = read_timeout # default 10 min timeout - elif timeout is not None and not isinstance(timeout, httpx.Timeout): - timeout = float(timeout) # type: ignore - try: if base_url is not None: api_base = base_url @@ -727,6 +713,16 @@ def completion( "aws_region_name", None ) # support region-based pricing for bedrock + ### TIMEOUT LOGIC ### + timeout = timeout or kwargs.get("request_timeout", 600) or 600 + # set timeout for 10 minutes by default + if isinstance(timeout, httpx.Timeout) and not supports_httpx_timeout( + custom_llm_provider + ): + timeout = timeout.read or 600 # default 10 min timeout + elif not isinstance(timeout, httpx.Timeout): + timeout = float(timeout) # type: ignore + ### REGISTER CUSTOM MODEL PRICING -- IF GIVEN ### if input_cost_per_token is not None and output_cost_per_token is not None: litellm.register_model( From e0152c0b61e6e4b5ca1a8ba914211599ea8e47ca Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Wed, 15 May 2024 06:20:51 -0700 Subject: [PATCH 304/378] cloned gpt-4o models into openrouter/openai --- model_prices_and_context_window.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index a88d6875ca2..e181e0ef32b 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1744,6 +1744,30 @@ "litellm_provider": "openrouter", "mode": "chat" }, + "openrouter/openai/gpt-4o": { + "max_tokens": 4096, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.000005, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4o-2024-05-13": { + "max_tokens": 4096, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.000005, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_vision": true + }, "openrouter/openai/gpt-4-vision-preview": { "max_tokens": 130000, "input_cost_per_token": 0.00001, From 900bb9aba80f2279fdcd03e8918d45402d4e1d35 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 07:12:43 -0700 Subject: [PATCH 305/378] test(test_token_counter.py): fix load test --- litellm/tests/test_token_counter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_token_counter.py b/litellm/tests/test_token_counter.py index 4d851573cc5..78e276a85ca 100644 --- a/litellm/tests/test_token_counter.py +++ b/litellm/tests/test_token_counter.py @@ -178,7 +178,7 @@ def test_load_test_token_counter(model): messages = [{"role": "user", "content": text}] * 10 start_time = time.time() - for _ in range(50): + for _ in range(10): _ = token_counter(model=model, messages=messages) # enc.encode("".join(m["content"] for m in messages)) From 8117af664c69f770a2faebbd845ba75c4654e262 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 07:28:19 -0700 Subject: [PATCH 306/378] fix(huggingface_restapi.py): fix task extraction from model name --- litellm/llms/huggingface_restapi.py | 19 ++++++++++--------- litellm/proxy/_super_secret_config.yaml | 5 ++++- litellm/tests/test_completion.py | 4 ++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/litellm/llms/huggingface_restapi.py b/litellm/llms/huggingface_restapi.py index ad3c570e762..c54dba75f16 100644 --- a/litellm/llms/huggingface_restapi.py +++ b/litellm/llms/huggingface_restapi.py @@ -6,7 +6,7 @@ import httpx, requests from .base import BaseLLM import time import litellm -from typing import Callable, Dict, List, Any, Literal +from typing import Callable, Dict, List, Any, Literal, Tuple from litellm.utils import ModelResponse, Choices, Message, CustomStreamWrapper, Usage from typing import Optional from .prompt_templates.factory import prompt_factory, custom_prompt @@ -227,20 +227,21 @@ def read_tgi_conv_models(): return set(), set() -def get_hf_task_for_model(model: str) -> hf_tasks: +def get_hf_task_for_model(model: str) -> Tuple[hf_tasks, str]: # read text file, cast it to set # read the file called "huggingface_llms_metadata/hf_text_generation_models.txt" if model.split("/")[0] in hf_task_list: - return model.split("/")[0] # type: ignore + split_model = model.split("/", 1) + return split_model[0], split_model[1] # type: ignore tgi_models, conversational_models = read_tgi_conv_models() if model in tgi_models: - return "text-generation-inference" + return "text-generation-inference", model elif model in conversational_models: - return "conversational" + return "conversational", model elif "roneneldan/TinyStories" in model: - return "text-generation" + return "text-generation", model else: - return "text-generation-inference" # default to tgi + return "text-generation-inference", model # default to tgi class Huggingface(BaseLLM): @@ -403,7 +404,7 @@ class Huggingface(BaseLLM): exception_mapping_worked = False try: headers = self.validate_environment(api_key, headers) - task = get_hf_task_for_model(model) + task, model = get_hf_task_for_model(model) ## VALIDATE API FORMAT if task is None or not isinstance(task, str) or task not in hf_task_list: raise Exception( @@ -514,7 +515,7 @@ class Huggingface(BaseLLM): if task == "text-generation-inference": data["parameters"] = inference_params data["stream"] = ( # type: ignore - True + True # type: ignore if "stream" in optional_params and optional_params["stream"] == True else False diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml index 5f5ee89c3f9..42f9e3be50a 100644 --- a/litellm/proxy/_super_secret_config.yaml +++ b/litellm/proxy/_super_secret_config.yaml @@ -20,7 +20,10 @@ model_list: api_base: os.environ/AZURE_API_BASE input_cost_per_token: 0.0 output_cost_per_token: 0.0 - +- model_name: bert-classifier + litellm_params: + model: huggingface/text-classification/shahrukhx01/question-vs-statement-classifier + api_key: os.environ/HUGGINGFACE_API_KEY router_settings: redis_host: redis # redis_password: diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index b5fa141cc4a..4441ddf29a7 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1318,6 +1318,10 @@ def test_hf_test_completion_tgi(): def mock_post(url, data=None, json=None, headers=None): + + print(f"url={url}") + if "text-classification" in url: + raise Exception("Model not found") mock_response = MagicMock() mock_response.status_code = 200 mock_response.headers = {"Content-Type": "application/json"} From 1a3b0014325340c321143daf0bacb5514df30ddb Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 07:37:04 -0700 Subject: [PATCH 307/378] docs(langfuse_integration.md): cleanup docs --- docs/my-website/docs/observability/langfuse_integration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/my-website/docs/observability/langfuse_integration.md b/docs/my-website/docs/observability/langfuse_integration.md index 508ba63cde2..6dd5377ea7d 100644 --- a/docs/my-website/docs/observability/langfuse_integration.md +++ b/docs/my-website/docs/observability/langfuse_integration.md @@ -148,7 +148,7 @@ print(response) #### Trace Specific Parameters -* `trace_id` - Identifier for the trace, must use `existing_trace_id` instead or in conjunction with `trace_id` if this is an existing trace, auto-generated by default +* `trace_id` - Identifier for the trace, must use `existing_trace_id` instead of `trace_id` if this is an existing trace, auto-generated by default * `trace_name` - Name of the trace, auto-generated by default * `session_id` - Session identifier for the trace, defaults to `None` * `trace_version` - Version for the trace, defaults to value for `version` From 1840919ebdc182320888cbdc1852090396756b43 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 08:23:00 -0700 Subject: [PATCH 308/378] fix(main.py): testing fix --- litellm/main.py | 1 - litellm/tests/test_completion.py | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 3429cab4d2f..69ec7985de4 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -14,7 +14,6 @@ from functools import partial import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx - import litellm from ._logging import verbose_logger from litellm import ( # type: ignore diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 4441ddf29a7..2bc167ed099 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1161,28 +1161,28 @@ HF Tests we should pass # Test util to sort models to TGI, conv, None def test_get_hf_task_for_model(): model = "glaiveai/glaive-coder-7b" - model_type = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) + model_type, _ = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) print(f"model:{model}, model type: {model_type}") assert model_type == "text-generation-inference" model = "meta-llama/Llama-2-7b-hf" - model_type = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) + model_type, _ = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) print(f"model:{model}, model type: {model_type}") assert model_type == "text-generation-inference" model = "facebook/blenderbot-400M-distill" - model_type = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) + model_type, _ = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) print(f"model:{model}, model type: {model_type}") assert model_type == "conversational" model = "facebook/blenderbot-3B" - model_type = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) + model_type, _ = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) print(f"model:{model}, model type: {model_type}") assert model_type == "conversational" # neither Conv or None model = "roneneldan/TinyStories-3M" - model_type = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) + model_type, _ = litellm.llms.huggingface_restapi.get_hf_task_for_model(model) print(f"model:{model}, model type: {model_type}") assert model_type == "text-generation" From 51a02de4cf4b9660711862bca942b0bb8f94ba43 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 08:25:14 -0700 Subject: [PATCH 309/378] refactor(proxy_server.py): update doc string for /user/update --- litellm/proxy/proxy_server.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e747e1047ab..aee75d54f40 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -6622,7 +6622,19 @@ async def user_info( ) async def user_update(data: UpdateUserRequest): """ - [TODO]: Use this to update user budget + Example curl + + ``` + curl --location 'http://0.0.0.0:4000/user/update' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{ + "user_id": "test-litellm-user-4", + "user_role": "proxy_admin_viewer" + }' + + See below for all params + ``` """ global prisma_client try: From fffb2427f35146ea8754ef2f0e07623b08c37266 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 08:50:31 -0700 Subject: [PATCH 310/378] fix(types/init.py): don't import openai assistants types by default --- litellm/types/llms/__init__.py | 3 --- requirements.txt | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 litellm/types/llms/__init__.py diff --git a/litellm/types/llms/__init__.py b/litellm/types/llms/__init__.py deleted file mode 100644 index 14952c9aecf..00000000000 --- a/litellm/types/llms/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -__all__ = ["openai"] - -from . import openai diff --git a/requirements.txt b/requirements.txt index 88f7174b3ee..3c5abae5a8d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ # LITELLM PROXY DEPENDENCIES # anyio==4.2.0 # openai + http req. -openai==1.14.3 # openai req. +openai==1.27.0 # openai req. fastapi==0.111.0 # server dep backoff==2.2.1 # server dep pyyaml==6.0.0 # server dep From f43da3597dd544d1751723557211202e7c974810 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 08:51:40 -0700 Subject: [PATCH 311/378] test: fix test --- litellm/main.py | 1 + litellm/tests/test_token_counter.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/main.py b/litellm/main.py index 69ec7985de4..3429cab4d2f 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -14,6 +14,7 @@ from functools import partial import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx + import litellm from ._logging import verbose_logger from litellm import ( # type: ignore diff --git a/litellm/tests/test_token_counter.py b/litellm/tests/test_token_counter.py index 78e276a85ca..194dfb8af32 100644 --- a/litellm/tests/test_token_counter.py +++ b/litellm/tests/test_token_counter.py @@ -174,7 +174,6 @@ def test_load_test_token_counter(model): """ import tiktoken - enc = tiktoken.get_encoding("cl100k_base") messages = [{"role": "user", "content": text}] * 10 start_time = time.time() @@ -186,4 +185,4 @@ def test_load_test_token_counter(model): total_time = end_time - start_time print("model={}, total test time={}".format(model, total_time)) - assert total_time < 2, f"Total encoding time > 1.5s, {total_time}" + assert total_time < 10, f"Total encoding time > 10s, {total_time}" From 52f8c39bbf6ade79dc3e67a78652b3a83850de80 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 09:03:27 -0700 Subject: [PATCH 312/378] feat - don't cooldown deployment on BadRequestError --- litellm/router.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index ec7df1124c3..e88942c44f1 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1975,6 +1975,11 @@ class Router: if deployment is None: return + if exception_status == 400 or exception_status == "400": + # the user sent a BadRequest -> the Deployment is not unhealthy here + # Do NOT Cooldown + return + dt = get_utc_datetime() current_minute = dt.strftime("%H-%M") # get current fails for deployment From ae80148c12dfcabe2ae6b5939d841083d1c320cc Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 09:43:30 -0700 Subject: [PATCH 313/378] test - router cooldowns --- litellm/tests/test_router_cooldowns.py | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 litellm/tests/test_router_cooldowns.py diff --git a/litellm/tests/test_router_cooldowns.py b/litellm/tests/test_router_cooldowns.py new file mode 100644 index 00000000000..35095bb2cf6 --- /dev/null +++ b/litellm/tests/test_router_cooldowns.py @@ -0,0 +1,64 @@ +#### What this tests #### +# This tests calling router with fallback models + +import sys, os, time +import traceback, asyncio +import pytest + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path + +import litellm +from litellm import Router +from litellm.integrations.custom_logger import CustomLogger +import openai, httpx + + +@pytest.mark.asyncio +async def test_cooldown_badrequest_error(): + """ + Test 1. It SHOULD NOT cooldown a deployment on a BadRequestError + """ + + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + } + ], + debug_level="DEBUG", + set_verbose=True, + cooldown_time=300, + num_retries=0, + allowed_fails=0, + ) + + # Act & Assert + try: + + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "gm"}], + bad_param=200, + ) + except: + pass + + await asyncio.sleep(3) # wait for deployment to get cooled-down + + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "gm"}], + mock_response="hello", + ) + + assert response is not None + + print(response) From 5dcf3d672c87e1b588227afbf6f0f06cc0c828cc Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 09:50:52 -0700 Subject: [PATCH 314/378] feat(proxy_server.py): new `/end_user/info` endpoint get spend for a specific end-user --- litellm/proxy/_super_secret_config.yaml | 5 +- litellm/proxy/proxy_server.py | 138 ++++-------------------- litellm/proxy/utils.py | 26 +++-- 3 files changed, 43 insertions(+), 126 deletions(-) diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml index 42f9e3be50a..0e9e43bc995 100644 --- a/litellm/proxy/_super_secret_config.yaml +++ b/litellm/proxy/_super_secret_config.yaml @@ -20,6 +20,9 @@ model_list: api_base: os.environ/AZURE_API_BASE input_cost_per_token: 0.0 output_cost_per_token: 0.0 +- model_name: gpt-3.5-turbo + litellm_params: + model: gpt-4o - model_name: bert-classifier litellm_params: model: huggingface/text-classification/shahrukhx01/question-vs-statement-classifier @@ -40,6 +43,6 @@ litellm_settings: general_settings: enable_jwt_auth: True disable_reset_budget: True - proxy_batch_write_at: 60 # 👈 Frequency of batch writing logs to server (in seconds) + proxy_batch_write_at: 10 # 👈 Frequency of batch writing logs to server (in seconds) routing_strategy: simple-shuffle # Literal["simple-shuffle", "least-busy", "usage-based-routing","latency-based-routing"], default="simple-shuffle" alerting: ["slack"] diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index aee75d54f40..9192198453a 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1499,68 +1499,6 @@ async def update_database( end_user_id, 0 ) ) - elif custom_db_client is not None: - for id in user_ids: - if id is None: - continue - if ( - custom_db_client is not None - and id != litellm_proxy_budget_name - ): - existing_spend_obj = await custom_db_client.get_data( - key=id, table_name="user" - ) - verbose_proxy_logger.debug( - f"Updating existing_spend_obj: {existing_spend_obj}" - ) - if existing_spend_obj is None: - # if user does not exist in LiteLLM_UserTable, create a new user - existing_spend = 0 - max_user_budget = None - if litellm.max_user_budget is not None: - max_user_budget = litellm.max_user_budget - existing_spend_obj = LiteLLM_UserTable( - user_id=id, - spend=0, - max_budget=max_user_budget, - user_email=None, - ) - else: - existing_spend = existing_spend_obj.spend - - # Calculate the new cost by adding the existing cost and response_cost - existing_spend_obj.spend = existing_spend + response_cost - - # track cost per model, for the given user - spend_per_model = existing_spend_obj.model_spend or {} - current_model = kwargs.get("model") - - if current_model is not None and spend_per_model is not None: - if spend_per_model.get(current_model) is None: - spend_per_model[current_model] = response_cost - else: - spend_per_model[current_model] += response_cost - existing_spend_obj.model_spend = spend_per_model - - valid_token = user_api_key_cache.get_cache(key=id) - if valid_token is not None and isinstance(valid_token, dict): - user_api_key_cache.set_cache( - key=id, value=existing_spend_obj.json() - ) - - verbose_proxy_logger.debug( - f"user - new cost: {existing_spend_obj.spend}, user_id: {id}" - ) - data_list.append(existing_spend_obj) - - if custom_db_client is not None and user_id is not None: - new_spend = data_list[0].spend - await custom_db_client.update_data( - key=user_id, - value={"spend": new_spend}, - table_name="user", - ) - except Exception as e: verbose_proxy_logger.info( "\033[91m" @@ -1580,31 +1518,6 @@ async def update_database( response_cost + prisma_client.key_list_transactons.get(hashed_token, 0) ) - elif custom_db_client is not None: - # Fetch the existing cost for the given token - existing_spend_obj = await custom_db_client.get_data( - key=token, table_name="key" - ) - verbose_proxy_logger.debug( - f"_update_key_db existing spend: {existing_spend_obj}" - ) - if existing_spend_obj is None: - existing_spend = 0 - else: - existing_spend = existing_spend_obj.spend - # Calculate the new cost by adding the existing cost and response_cost - new_spend = existing_spend + response_cost - - verbose_proxy_logger.debug("new cost: %s", new_spend) - # Update the cost column for the given token - await custom_db_client.update_data( - key=token, value={"spend": new_spend}, table_name="key" - ) - - valid_token = user_api_key_cache.get_cache(key=token) - if valid_token is not None: - valid_token.spend = new_spend - user_api_key_cache.set_cache(key=token, value=valid_token) except Exception as e: verbose_proxy_logger.info( f"Update Key DB Call failed to execute - {str(e)}\n{traceback.format_exc()}" @@ -1622,6 +1535,7 @@ async def update_database( response_obj=completion_response, start_time=start_time, end_time=end_time, + end_user_id=end_user_id, ) payload["spend"] = response_cost @@ -1652,31 +1566,6 @@ async def update_database( response_cost + prisma_client.team_list_transactons.get(team_id, 0) ) - elif custom_db_client is not None: - # Fetch the existing cost for the given token - existing_spend_obj = await custom_db_client.get_data( - key=token, table_name="key" - ) - verbose_proxy_logger.debug( - f"_update_key_db existing spend: {existing_spend_obj}" - ) - if existing_spend_obj is None: - existing_spend = 0 - else: - existing_spend = existing_spend_obj.spend - # Calculate the new cost by adding the existing cost and response_cost - new_spend = existing_spend + response_cost - - verbose_proxy_logger.debug("new cost: %s", new_spend) - # Update the cost column for the given token - await custom_db_client.update_data( - key=token, value={"spend": new_spend}, table_name="key" - ) - - valid_token = user_api_key_cache.get_cache(key=token) - if valid_token is not None: - valid_token.spend = new_spend - user_api_key_cache.set_cache(key=token, value=valid_token) except Exception as e: verbose_proxy_logger.info( f"Update Team DB failed to execute - {str(e)}\n{traceback.format_exc()}" @@ -7032,16 +6921,29 @@ async def new_end_user( return end_user_record -@router.post( +@router.get( "/end_user/info", tags=["End User Management"], dependencies=[Depends(user_api_key_auth)], ) -async def end_user_info(): - """ - [TODO] Needs to be implemented. - """ - pass +async def end_user_info( + end_user_id: str = fastapi.Query( + description="End User ID in the request parameters" + ), +): + global prisma_client + + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + user_info = await prisma_client.db.litellm_endusertable.find_first( + where={"user_id": end_user_id} + ) + + return user_info @router.post( diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index a97864f0008..33127e957a3 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1787,7 +1787,9 @@ def hash_token(token: str): return hashed_token -def get_logging_payload(kwargs, response_obj, start_time, end_time): +def get_logging_payload( + kwargs, response_obj, start_time, end_time, end_user_id: Optional[str] +): from litellm.proxy._types import LiteLLM_SpendLogs from pydantic import Json import uuid @@ -1865,7 +1867,7 @@ def get_logging_payload(kwargs, response_obj, start_time, end_time): "prompt_tokens": usage.get("prompt_tokens", 0), "completion_tokens": usage.get("completion_tokens", 0), "request_tags": metadata.get("tags", []), - "end_user": kwargs.get("user", ""), + "end_user": end_user_id or "", "api_base": litellm_params.get("api_base", ""), } @@ -2028,6 +2030,11 @@ async def update_spend( raise e ### UPDATE END-USER TABLE ### + verbose_proxy_logger.debug( + "End-User Spend transactions: {}".format( + len(prisma_client.end_user_list_transactons.keys()) + ) + ) if len(prisma_client.end_user_list_transactons.keys()) > 0: for i in range(n_retry_times + 1): start_time = time.time() @@ -2043,13 +2050,18 @@ async def update_spend( max_end_user_budget = None if litellm.max_end_user_budget is not None: max_end_user_budget = litellm.max_end_user_budget - new_user_obj = LiteLLM_EndUserTable( - user_id=end_user_id, spend=response_cost, blocked=False - ) - batcher.litellm_endusertable.update_many( + batcher.litellm_endusertable.upsert( where={"user_id": end_user_id}, - data={"spend": {"increment": response_cost}}, + data={ + "create": { + "user_id": end_user_id, + "spend": response_cost, + "blocked": False, + }, + "update": {"spend": {"increment": response_cost}}, + }, ) + prisma_client.end_user_list_transactons = ( {} ) # Clear the remaining transactions after processing all batches in the loop. From f5d73547c788508528196f21a38f30520b8dbcc6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 09:59:21 -0700 Subject: [PATCH 315/378] fix(lowest_latency.py): allow ttl to be a float --- litellm/router_strategy/lowest_latency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router_strategy/lowest_latency.py b/litellm/router_strategy/lowest_latency.py index 81a0133a90f..c56db83f0b7 100644 --- a/litellm/router_strategy/lowest_latency.py +++ b/litellm/router_strategy/lowest_latency.py @@ -27,7 +27,7 @@ class LiteLLMBase(BaseModel): class RoutingArgs(LiteLLMBase): - ttl: int = 1 * 60 * 60 # 1 hour + ttl: float = 1 * 60 * 60 # 1 hour lowest_latency_buffer: float = 0 max_latency_list_size: int = 10 From f17f0a09d8b89fc2cc01b0ce29cf924ad514097c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 10:03:55 -0700 Subject: [PATCH 316/378] feat - router use _is_cooldown_required --- litellm/router.py | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index e88942c44f1..c4f7ed0f2c3 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -1962,6 +1962,45 @@ class Router: key=rpm_key, value=request_count, local_only=True ) # don't change existing ttl + def _is_cooldown_required(self, exception_status: Union[str, int]): + """ + A function to determine if a cooldown is required based on the exception status. + + Parameters: + exception_status (Union[str, int]): The status of the exception. + + Returns: + bool: True if a cooldown is required, False otherwise. + """ + try: + + if isinstance(exception_status, str): + exception_status = int(exception_status) + + if exception_status >= 400 and exception_status < 500: + if exception_status == 429: + # Cool down 429 Rate Limit Errors + return True + + elif exception_status == 401: + # Cool down 401 Auth Errors + return True + + elif exception_status == 408: + return True + + else: + # Do NOT cool down all other 4XX Errors + return False + + else: + # should cool down for all other errors + return True + + except: + # Catch all - if any exceptions default to cooling down + return True + def _set_cooldown_deployments( self, exception_status: Union[str, int], deployment: Optional[str] = None ): @@ -1975,9 +2014,7 @@ class Router: if deployment is None: return - if exception_status == 400 or exception_status == "400": - # the user sent a BadRequest -> the Deployment is not unhealthy here - # Do NOT Cooldown + if self._is_cooldown_required(exception_status=exception_status) == False: return dt = get_utc_datetime() From 2e8134760779f7af340aecd25505a883d1383268 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 10:27:02 -0700 Subject: [PATCH 317/378] fix - don't raise hanging request alert for /completions --- litellm/proxy/proxy_server.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index aee75d54f40..e9324dd96d5 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -4015,6 +4015,9 @@ async def completion( cache_key = hidden_params.get("cache_key", None) or "" api_base = hidden_params.get("api_base", None) or "" + ### ALERTING ### + data["litellm_status"] = "success" # used for alerting + verbose_proxy_logger.debug("final response: %s", response) if ( "stream" in data and data["stream"] == True From dba713ea4359e936338cee83bc30f4e189b41d63 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 10:43:46 -0700 Subject: [PATCH 318/378] fix(router.py): add validation for how router fallbacks are setup prevent user errors --- litellm/proxy/_super_secret_config.yaml | 5 +---- litellm/router.py | 27 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml index 42f9e3be50a..98191aa043b 100644 --- a/litellm/proxy/_super_secret_config.yaml +++ b/litellm/proxy/_super_secret_config.yaml @@ -18,8 +18,6 @@ model_list: model: azure/chatgpt-v-2 api_key: os.environ/AZURE_API_KEY api_base: os.environ/AZURE_API_BASE - input_cost_per_token: 0.0 - output_cost_per_token: 0.0 - model_name: bert-classifier litellm_params: model: huggingface/text-classification/shahrukhx01/question-vs-statement-classifier @@ -31,8 +29,7 @@ router_settings: enable_pre_call_checks: true litellm_settings: - set_verbose: True - fallbacks: [{"gpt-3.5-turbo-012": ["gpt-3.5-turbo-0125-preview"]}] + fallbacks: [{"gpt-3.5-turbo-012": ["azure-gpt-3.5-turbo"]}] # service_callback: ["prometheus_system"] # success_callback: ["prometheus"] # failure_callback: ["prometheus"] diff --git a/litellm/router.py b/litellm/router.py index c4f7ed0f2c3..5a47e0dbec0 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -262,13 +262,23 @@ class Router: self.retry_after = retry_after self.routing_strategy = routing_strategy - self.fallbacks = fallbacks or litellm.fallbacks + + ## SETTING FALLBACKS ## + ### validate if it's set + in correct format + _fallbacks = fallbacks or litellm.fallbacks + + self.validate_fallbacks(fallback_param=_fallbacks) + ### set fallbacks + self.fallbacks = _fallbacks + if default_fallbacks is not None or litellm.default_fallbacks is not None: _fallbacks = default_fallbacks or litellm.default_fallbacks + self.validate_fallbacks(fallback_param=_fallbacks) if self.fallbacks is not None: self.fallbacks.append({"*": _fallbacks}) else: self.fallbacks = [{"*": _fallbacks}] + self.context_window_fallbacks = ( context_window_fallbacks or litellm.context_window_fallbacks ) @@ -336,6 +346,21 @@ class Router: if self.alerting_config is not None: self._initialize_alerting() + def validate_fallbacks(self, fallback_param: Optional[List]): + if fallback_param is None: + return + if len(fallback_param) > 0: # if set + ## for dictionary in list, check if only 1 key in dict + for _dict in fallback_param: + assert isinstance(_dict, dict), "Item={}, not a dictionary".format( + _dict + ) + assert ( + len(_dict.keys()) == 1 + ), "Only 1 key allows in dictionary. You set={} for dict={}".format( + len(_dict.keys()), _dict + ) + def routing_strategy_init(self, routing_strategy: str, routing_strategy_args: dict): if routing_strategy == "least-busy": self.leastbusy_logger = LeastBusyLoggingHandler( From 59e18f23e07e1d2f1182632862119f23208d299f Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 13:07:04 -0700 Subject: [PATCH 319/378] fix - show litellm_debug_info --- litellm/exceptions.py | 117 ++++++++++++++++-- ...odel_prices_and_context_window_backup.json | 24 ++++ litellm/utils.py | 114 +++++++++++------ 3 files changed, 204 insertions(+), 51 deletions(-) diff --git a/litellm/exceptions.py b/litellm/exceptions.py index d239f1e1280..5eb66743b50 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -15,11 +15,19 @@ from typing import Optional class AuthenticationError(openai.AuthenticationError): # type: ignore - def __init__(self, message, llm_provider, model, response: httpx.Response): + def __init__( + self, + message, + llm_provider, + model, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 401 self.message = message self.llm_provider = llm_provider self.model = model + self.litellm_debug_info = litellm_debug_info super().__init__( self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs @@ -27,11 +35,19 @@ class AuthenticationError(openai.AuthenticationError): # type: ignore # raise when invalid models passed, example gpt-8 class NotFoundError(openai.NotFoundError): # type: ignore - def __init__(self, message, model, llm_provider, response: httpx.Response): + def __init__( + self, + message, + model, + llm_provider, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 404 self.message = message self.model = model self.llm_provider = llm_provider + self.litellm_debug_info = litellm_debug_info super().__init__( self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs @@ -39,12 +55,18 @@ class NotFoundError(openai.NotFoundError): # type: ignore class BadRequestError(openai.BadRequestError): # type: ignore def __init__( - self, message, model, llm_provider, response: Optional[httpx.Response] = None + self, + message, + model, + llm_provider, + response: Optional[httpx.Response] = None, + litellm_debug_info: Optional[str] = None, ): self.status_code = 400 self.message = message self.model = model self.llm_provider = llm_provider + self.litellm_debug_info = litellm_debug_info response = response or httpx.Response( status_code=self.status_code, request=httpx.Request( @@ -57,18 +79,28 @@ class BadRequestError(openai.BadRequestError): # type: ignore class UnprocessableEntityError(openai.UnprocessableEntityError): # type: ignore - def __init__(self, message, model, llm_provider, response: httpx.Response): + def __init__( + self, + message, + model, + llm_provider, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 422 self.message = message self.model = model self.llm_provider = llm_provider + self.litellm_debug_info = litellm_debug_info super().__init__( self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs class Timeout(openai.APITimeoutError): # type: ignore - def __init__(self, message, model, llm_provider): + def __init__( + self, message, model, llm_provider, litellm_debug_info: Optional[str] = None + ): request = httpx.Request(method="POST", url="https://api.openai.com/v1") super().__init__( request=request @@ -77,6 +109,7 @@ class Timeout(openai.APITimeoutError): # type: ignore self.message = message self.model = model self.llm_provider = llm_provider + self.litellm_debug_info = litellm_debug_info # custom function to convert to str def __str__(self): @@ -84,22 +117,38 @@ class Timeout(openai.APITimeoutError): # type: ignore class PermissionDeniedError(openai.PermissionDeniedError): # type:ignore - def __init__(self, message, llm_provider, model, response: httpx.Response): + def __init__( + self, + message, + llm_provider, + model, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 403 self.message = message self.llm_provider = llm_provider self.model = model + self.litellm_debug_info = litellm_debug_info super().__init__( self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs class RateLimitError(openai.RateLimitError): # type: ignore - def __init__(self, message, llm_provider, model, response: httpx.Response): + def __init__( + self, + message, + llm_provider, + model, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 429 self.message = message self.llm_provider = llm_provider self.modle = model + self.litellm_debug_info = litellm_debug_info super().__init__( self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs @@ -107,11 +156,19 @@ class RateLimitError(openai.RateLimitError): # type: ignore # sub class of rate limit error - meant to give more granularity for error handling context window exceeded errors class ContextWindowExceededError(BadRequestError): # type: ignore - def __init__(self, message, model, llm_provider, response: httpx.Response): + def __init__( + self, + message, + model, + llm_provider, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 400 self.message = message self.model = model self.llm_provider = llm_provider + self.litellm_debug_info = litellm_debug_info super().__init__( message=self.message, model=self.model, # type: ignore @@ -122,11 +179,19 @@ class ContextWindowExceededError(BadRequestError): # type: ignore class ContentPolicyViolationError(BadRequestError): # type: ignore # Error code: 400 - {'error': {'code': 'content_policy_violation', 'message': 'Your request was rejected as a result of our safety system. Image descriptions generated from your prompt may contain text that is not allowed by our safety system. If you believe this was done in error, your request may succeed if retried, or by adjusting your prompt.', 'param': None, 'type': 'invalid_request_error'}} - def __init__(self, message, model, llm_provider, response: httpx.Response): + def __init__( + self, + message, + model, + llm_provider, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 400 self.message = message self.model = model self.llm_provider = llm_provider + self.litellm_debug_info = litellm_debug_info super().__init__( message=self.message, model=self.model, # type: ignore @@ -136,11 +201,19 @@ class ContentPolicyViolationError(BadRequestError): # type: ignore class ServiceUnavailableError(openai.APIStatusError): # type: ignore - def __init__(self, message, llm_provider, model, response: httpx.Response): + def __init__( + self, + message, + llm_provider, + model, + response: httpx.Response, + litellm_debug_info: Optional[str] = None, + ): self.status_code = 503 self.message = message self.llm_provider = llm_provider self.model = model + self.litellm_debug_info = litellm_debug_info super().__init__( self.message, response=response, body=None ) # Call the base class constructor with the parameters it needs @@ -149,33 +222,51 @@ class ServiceUnavailableError(openai.APIStatusError): # type: ignore # raise this when the API returns an invalid response object - https://github.com/openai/openai-python/blob/1be14ee34a0f8e42d3f9aa5451aa4cb161f1781f/openai/api_requestor.py#L401 class APIError(openai.APIError): # type: ignore def __init__( - self, status_code, message, llm_provider, model, request: httpx.Request + self, + status_code, + message, + llm_provider, + model, + request: httpx.Request, + litellm_debug_info: Optional[str] = None, ): self.status_code = status_code self.message = message self.llm_provider = llm_provider self.model = model + self.litellm_debug_info = litellm_debug_info super().__init__(self.message, request=request, body=None) # type: ignore # raised if an invalid request (not get, delete, put, post) is made class APIConnectionError(openai.APIConnectionError): # type: ignore - def __init__(self, message, llm_provider, model, request: httpx.Request): + def __init__( + self, + message, + llm_provider, + model, + request: httpx.Request, + litellm_debug_info: Optional[str] = None, + ): self.message = message self.llm_provider = llm_provider self.model = model self.status_code = 500 + self.litellm_debug_info = litellm_debug_info super().__init__(message=self.message, request=request) # raised if an invalid request (not get, delete, put, post) is made class APIResponseValidationError(openai.APIResponseValidationError): # type: ignore - def __init__(self, message, llm_provider, model): + def __init__( + self, message, llm_provider, model, litellm_debug_info: Optional[str] = None + ): self.message = message self.llm_provider = llm_provider self.model = model request = httpx.Request(method="POST", url="https://api.openai.com/v1") response = httpx.Response(status_code=500, request=request) + self.litellm_debug_info = litellm_debug_info super().__init__(response=response, body=None, message=message) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index a88d6875ca2..e181e0ef32b 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1744,6 +1744,30 @@ "litellm_provider": "openrouter", "mode": "chat" }, + "openrouter/openai/gpt-4o": { + "max_tokens": 4096, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.000005, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4o-2024-05-13": { + "max_tokens": 4096, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.000005, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_vision": true + }, "openrouter/openai/gpt-4-vision-preview": { "max_tokens": 130000, "input_cost_per_token": 0.00001, diff --git a/litellm/utils.py b/litellm/utils.py index 7df79f37360..88b85feff71 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -8194,9 +8194,10 @@ def exception_type( if "Request Timeout Error" in error_str or "Request timed out" in error_str: exception_mapping_worked = True raise Timeout( - message=f"APITimeoutError - Request timed out. {extra_information} \n error_str: {error_str}", + message=f"APITimeoutError - Request timed out. \nerror_str: {error_str}", model=model, llm_provider=custom_llm_provider, + litellm_debug_info=extra_information, ) if ( @@ -8226,10 +8227,11 @@ def exception_type( if "This model's maximum context length is" in error_str: exception_mapping_worked = True raise ContextWindowExceededError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, response=original_exception.response, + litellm_debug_info=extra_information, ) elif ( "invalid_request_error" in error_str @@ -8237,10 +8239,11 @@ def exception_type( ): exception_mapping_worked = True raise NotFoundError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, response=original_exception.response, + litellm_debug_info=extra_information, ) elif ( "invalid_request_error" in error_str @@ -8248,10 +8251,11 @@ def exception_type( ): exception_mapping_worked = True raise ContentPolicyViolationError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, response=original_exception.response, + litellm_debug_info=extra_information, ) elif ( "invalid_request_error" in error_str @@ -8259,17 +8263,19 @@ def exception_type( ): exception_mapping_worked = True raise BadRequestError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, response=original_exception.response, + litellm_debug_info=extra_information, ) elif "Request too large" in error_str: raise RateLimitError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, response=original_exception.response, + litellm_debug_info=extra_information, ) elif ( "The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable" @@ -8277,10 +8283,11 @@ def exception_type( ): exception_mapping_worked = True raise AuthenticationError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, response=original_exception.response, + litellm_debug_info=extra_information, ) elif "Mistral API raised a streaming error" in error_str: exception_mapping_worked = True @@ -8289,82 +8296,92 @@ def exception_type( ) raise APIError( status_code=500, - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, request=_request, + litellm_debug_info=extra_information, ) elif hasattr(original_exception, "status_code"): exception_mapping_worked = True if original_exception.status_code == 401: exception_mapping_worked = True raise AuthenticationError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, response=original_exception.response, + litellm_debug_info=extra_information, ) elif original_exception.status_code == 404: exception_mapping_worked = True raise NotFoundError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, response=original_exception.response, + litellm_debug_info=extra_information, ) elif original_exception.status_code == 408: exception_mapping_worked = True raise Timeout( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, + litellm_debug_info=extra_information, ) elif original_exception.status_code == 422: exception_mapping_worked = True raise BadRequestError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, response=original_exception.response, + litellm_debug_info=extra_information, ) elif original_exception.status_code == 429: exception_mapping_worked = True raise RateLimitError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, response=original_exception.response, + litellm_debug_info=extra_information, ) elif original_exception.status_code == 503: exception_mapping_worked = True raise ServiceUnavailableError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, response=original_exception.response, + litellm_debug_info=extra_information, ) elif original_exception.status_code == 504: # gateway timeout error exception_mapping_worked = True raise Timeout( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", model=model, llm_provider=custom_llm_provider, + litellm_debug_info=extra_information, ) else: exception_mapping_worked = True raise APIError( status_code=original_exception.status_code, - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, request=original_exception.request, + litellm_debug_info=extra_information, ) else: # if no status code then it is an APIConnectionError: https://github.com/openai/openai-python#handling-errors raise APIConnectionError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider=custom_llm_provider, model=model, + litellm_debug_info=extra_information, request=httpx.Request( method="POST", url="https://api.openai.com/v1/" ), @@ -8666,10 +8683,11 @@ def exception_type( ): exception_mapping_worked = True raise BadRequestError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", model=model, llm_provider="vertex_ai", response=original_exception.response, + litellm_debug_info=extra_information, ) elif ( "None Unknown Error." in error_str @@ -8677,26 +8695,29 @@ def exception_type( ): exception_mapping_worked = True raise APIError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", status_code=500, model=model, llm_provider="vertex_ai", request=original_exception.request, + litellm_debug_info=extra_information, ) elif "403" in error_str: exception_mapping_worked = True raise BadRequestError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", model=model, llm_provider="vertex_ai", response=original_exception.response, + litellm_debug_info=extra_information, ) elif "The response was blocked." in error_str: exception_mapping_worked = True raise UnprocessableEntityError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", model=model, llm_provider="vertex_ai", + litellm_debug_info=extra_information, response=httpx.Response( status_code=429, request=httpx.Request( @@ -8713,9 +8734,10 @@ def exception_type( ): exception_mapping_worked = True raise RateLimitError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", model=model, llm_provider="vertex_ai", + litellm_debug_info=extra_information, response=httpx.Response( status_code=429, request=httpx.Request( @@ -8728,18 +8750,20 @@ def exception_type( if original_exception.status_code == 400: exception_mapping_worked = True raise BadRequestError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", model=model, llm_provider="vertex_ai", + litellm_debug_info=extra_information, response=original_exception.response, ) if original_exception.status_code == 500: exception_mapping_worked = True raise APIError( - message=f"VertexAIException - {error_str} {extra_information}", + message=f"VertexAIException - {error_str}", status_code=500, model=model, llm_provider="vertex_ai", + litellm_debug_info=extra_information, request=original_exception.request, ) elif custom_llm_provider == "palm" or custom_llm_provider == "gemini": @@ -9340,25 +9364,28 @@ def exception_type( exception_mapping_worked = True raise APIError( status_code=500, - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, request=httpx.Request(method="POST", url="https://openai.com/"), ) elif "This model's maximum context length is" in error_str: exception_mapping_worked = True raise ContextWindowExceededError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, response=original_exception.response, ) elif "DeploymentNotFound" in error_str: exception_mapping_worked = True raise NotFoundError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, response=original_exception.response, ) elif ( @@ -9370,17 +9397,19 @@ def exception_type( ): exception_mapping_worked = True raise ContentPolicyViolationError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, response=original_exception.response, ) elif "invalid_request_error" in error_str: exception_mapping_worked = True raise BadRequestError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, response=original_exception.response, ) elif ( @@ -9389,9 +9418,10 @@ def exception_type( ): exception_mapping_worked = True raise AuthenticationError( - message=f"{exception_provider} - {original_exception.message} {extra_information}", + message=f"{exception_provider} - {original_exception.message}", llm_provider=custom_llm_provider, model=model, + litellm_debug_info=extra_information, response=original_exception.response, ) elif hasattr(original_exception, "status_code"): @@ -9399,55 +9429,62 @@ def exception_type( if original_exception.status_code == 401: exception_mapping_worked = True raise AuthenticationError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, response=original_exception.response, ) elif original_exception.status_code == 408: exception_mapping_worked = True raise Timeout( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", model=model, + litellm_debug_info=extra_information, llm_provider="azure", ) if original_exception.status_code == 422: exception_mapping_worked = True raise BadRequestError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", model=model, llm_provider="azure", + litellm_debug_info=extra_information, response=original_exception.response, ) elif original_exception.status_code == 429: exception_mapping_worked = True raise RateLimitError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", model=model, llm_provider="azure", + litellm_debug_info=extra_information, response=original_exception.response, ) elif original_exception.status_code == 503: exception_mapping_worked = True raise ServiceUnavailableError( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", model=model, llm_provider="azure", + litellm_debug_info=extra_information, response=original_exception.response, ) elif original_exception.status_code == 504: # gateway timeout error exception_mapping_worked = True raise Timeout( - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", model=model, + litellm_debug_info=extra_information, llm_provider="azure", ) else: exception_mapping_worked = True raise APIError( status_code=original_exception.status_code, - message=f"AzureException - {original_exception.message} {extra_information}", + message=f"AzureException - {original_exception.message}", llm_provider="azure", + litellm_debug_info=extra_information, model=model, request=httpx.Request( method="POST", url="https://openai.com/" @@ -9456,9 +9493,10 @@ def exception_type( else: # if no status code then it is an APIConnectionError: https://github.com/openai/openai-python#handling-errors raise APIConnectionError( - message=f"{exception_provider} - {message} {extra_information}", + message=f"{exception_provider} - {message}", llm_provider="azure", model=model, + litellm_debug_info=extra_information, request=httpx.Request(method="POST", url="https://openai.com/"), ) if ( From d9ad7c621892170d1bb16eacacbfbaa8ab543c79 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 13:22:13 -0700 Subject: [PATCH 320/378] fix(router.py): fix validation error for default fallback --- ...odel_prices_and_context_window_backup.json | 24 +++++++++++++++++++ litellm/router.py | 1 - 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index a88d6875ca2..e181e0ef32b 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1744,6 +1744,30 @@ "litellm_provider": "openrouter", "mode": "chat" }, + "openrouter/openai/gpt-4o": { + "max_tokens": 4096, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.000005, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4o-2024-05-13": { + "max_tokens": 4096, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.000005, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_vision": true + }, "openrouter/openai/gpt-4-vision-preview": { "max_tokens": 130000, "input_cost_per_token": 0.00001, diff --git a/litellm/router.py b/litellm/router.py index 5a47e0dbec0..08576f78e10 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -273,7 +273,6 @@ class Router: if default_fallbacks is not None or litellm.default_fallbacks is not None: _fallbacks = default_fallbacks or litellm.default_fallbacks - self.validate_fallbacks(fallback_param=_fallbacks) if self.fallbacks is not None: self.fallbacks.append({"*": _fallbacks}) else: From f6e342303e2ed94669fa09961de29661a6cc40be Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 13:23:44 -0700 Subject: [PATCH 321/378] show debug info on slack alerts --- litellm/proxy/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index a97864f0008..0555a485b50 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -418,9 +418,14 @@ class ProxyLogging: Related issue - https://github.com/BerriAI/litellm/issues/3395 """ + litellm_debug_info = getattr(original_exception, "litellm_debug_info", None) + exception_str = str(original_exception) + if litellm_debug_info is not None: + exception_str += litellm_debug_info + asyncio.create_task( self.alerting_handler( - message=f"LLM API call failed: {str(original_exception)}", + message=f"LLM API call failed: {exception_str}", level="High", alert_type="llm_exceptions", request_data=request_data, From 1a11b151b7914d13476bc187f2398b8a3e3ab6ad Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 14:18:12 -0700 Subject: [PATCH 322/378] fix - show litellm debug info in errors --- litellm/proxy/proxy_server.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index aee75d54f40..145c281b0d6 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -3857,8 +3857,11 @@ async def chat_completion( await proxy_logging_obj.post_call_failure_hook( user_api_key_dict=user_api_key_dict, original_exception=e, request_data=data ) + litellm_debug_info = getattr(e, "litellm_debug_info", "") verbose_proxy_logger.debug( - f"\033[1;31mAn error occurred: {e}\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`" + "\033[1;31mAn error occurred: %s %s\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`", + e, + litellm_debug_info, ) router_model_names = llm_router.model_names if llm_router is not None else [] if user_debug: @@ -4046,9 +4049,11 @@ async def completion( except Exception as e: data["litellm_status"] = "fail" # used for alerting verbose_proxy_logger.debug("EXCEPTION RAISED IN PROXY MAIN.PY") + litellm_debug_info = getattr(e, "litellm_debug_info", "") verbose_proxy_logger.debug( - "\033[1;31mAn error occurred: %s\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`", + "\033[1;31mAn error occurred: %s %s\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`", e, + litellm_debug_info, ) traceback.print_exc() error_traceback = traceback.format_exc() @@ -4251,6 +4256,12 @@ async def embeddings( await proxy_logging_obj.post_call_failure_hook( user_api_key_dict=user_api_key_dict, original_exception=e, request_data=data ) + litellm_debug_info = getattr(e, "litellm_debug_info", "") + verbose_proxy_logger.debug( + "\033[1;31mAn error occurred: %s %s\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`", + e, + litellm_debug_info, + ) traceback.print_exc() if isinstance(e, HTTPException): raise ProxyException( From fdf7a4d8c899f85297aff84a480559fccef814b6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 14:24:13 -0700 Subject: [PATCH 323/378] fix - test_lowest_latency_routing_first_pick --- litellm/tests/test_lowest_latency_routing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_lowest_latency_routing.py b/litellm/tests/test_lowest_latency_routing.py index 4da87920875..3d79e5c8f72 100644 --- a/litellm/tests/test_lowest_latency_routing.py +++ b/litellm/tests/test_lowest_latency_routing.py @@ -705,7 +705,7 @@ async def test_lowest_latency_routing_first_pick(): ) # type: ignore deployments = {} - for _ in range(5): + for _ in range(10): response = await router.acompletion( model="azure-model", messages=[{"role": "user", "content": "hello"}] ) From 3e831b4e1aed1cd246ad689d98dd1688b989c437 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 14:28:17 -0700 Subject: [PATCH 324/378] fix debug logs on router test --- litellm/tests/test_router_debug_logs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/tests/test_router_debug_logs.py b/litellm/tests/test_router_debug_logs.py index 1d908abe81b..cde9a8edd18 100644 --- a/litellm/tests/test_router_debug_logs.py +++ b/litellm/tests/test_router_debug_logs.py @@ -82,7 +82,7 @@ def test_async_fallbacks(caplog): # Define the expected log messages # - error request, falling back notice, success notice expected_logs = [ - "litellm.acompletion(model=gpt-3.5-turbo)\x1b[31m Exception OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: bad-key. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}} \nModel: gpt-3.5-turbo\nAPI Base: https://api.openai.com\nMessages: [{'content': 'Hello, how are you?', 'role': 'user'}]\nmodel_group: gpt-3.5-turbo\n\ndeployment: gpt-3.5-turbo\n\x1b[0m", + "litellm.acompletion(model=gpt-3.5-turbo)\x1b[31m Exception OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: bad-key. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}\x1b[0m", "Falling back to model_group = azure/gpt-3.5-turbo", "litellm.acompletion(model=azure/chatgpt-v-2)\x1b[32m 200 OK\x1b[0m", "Successful fallback b/w models.", From 371043d6831977ce35c92af9cfb331c50a780538 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 14:31:00 -0700 Subject: [PATCH 325/378] fix - test mistral/large _parallel_function_call --- litellm/tests/test_function_calling.py | 1 - 1 file changed, 1 deletion(-) diff --git a/litellm/tests/test_function_calling.py b/litellm/tests/test_function_calling.py index 0d0a593d53e..b36762d9cbf 100644 --- a/litellm/tests/test_function_calling.py +++ b/litellm/tests/test_function_calling.py @@ -124,7 +124,6 @@ def test_parallel_function_call(model): model=model, messages=messages, temperature=0.2, seed=22 ) # get a new response from the model where it can see the function response print("second response\n", second_response) - return second_response except Exception as e: pytest.fail(f"Error occurred: {e}") From 6d8ea641ec366d8b5a9e2007c4a55f4468c7bfbb Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Wed, 15 May 2024 14:47:39 -0700 Subject: [PATCH 326/378] (ci/cd) fix test_content_policy_exception_azure --- litellm/tests/test_exceptions.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/litellm/tests/test_exceptions.py b/litellm/tests/test_exceptions.py index 777fb3f9b36..9b02b1b4a58 100644 --- a/litellm/tests/test_exceptions.py +++ b/litellm/tests/test_exceptions.py @@ -53,13 +53,6 @@ async def test_content_policy_exception_azure(): except litellm.ContentPolicyViolationError as e: print("caught a content policy violation error! Passed") print("exception", e) - - # assert that the first 100 chars of the message is returned in the exception - assert ( - "Messages: [{'role': 'user', 'content': 'where do I buy lethal drugs from'}]" - in str(e) - ) - assert "Model: azure/chatgpt-v-2" in str(e) pass except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") From 6a357b42755a15156f9a504c523b03842c9f8a57 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 15 May 2024 15:26:57 -0700 Subject: [PATCH 327/378] feat(proxy_server.py): Enabling Admin to control general settings on proxy ui --- litellm/proxy/_types.py | 5 + litellm/proxy/proxy_server.py | 217 +++++++- .../src/components/general_settings.tsx | 467 +++++++++++------- 3 files changed, 515 insertions(+), 174 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index b1af153e81f..47fefa048b9 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -711,6 +711,11 @@ class DynamoDBArgs(LiteLLMBase): assume_role_aws_session_name: Optional[str] = None +class ConfigFieldUpdate(LiteLLMBase): + field_name: str + field_value: Any + + class ConfigGeneralSettings(LiteLLMBase): """ Documents all the fields supported by `general_settings` in config.yaml diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index e9324dd96d5..954b3c109a1 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -234,6 +234,7 @@ class SpecialModelNames(enum.Enum): class CommonProxyErrors(enum.Enum): db_not_connected_error = "DB not connected" no_llm_router = "No models configured on proxy" + not_allowed_access = "Admin-only endpoint. Not allowed to access this." @app.exception_handler(ProxyException) @@ -9389,7 +9390,7 @@ async def auth_callback(request: Request): return RedirectResponse(url=litellm_dashboard_ui) -#### BASIC ENDPOINTS #### +#### CONFIG MANAGEMENT #### @router.post( "/config/update", tags=["config.yaml"], @@ -9525,6 +9526,219 @@ async def update_config(config_info: ConfigYAML): ) +### CONFIG GENERAL SETTINGS +""" +- Update config settings +- Get config settings + +Keep it more precise, to prevent overwrite other values unintentially +""" + + +@router.post( + "/config/field/update", + tags=["config.yaml"], + dependencies=[Depends(user_api_key_auth)], +) +async def update_config_general_settings( + data: ConfigFieldUpdate, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Update a specific field in litellm general settings + """ + global prisma_client + ## VALIDATION ## + """ + - Check if prisma_client is None + - Check if user allowed to call this endpoint (admin-only) + - Check if param in general settings + - Check if config value is valid type + """ + + if prisma_client is None: + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + if user_api_key_dict.user_role != "proxy_admin": + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.not_allowed_access.value}, + ) + + if data.field_name not in ConfigGeneralSettings.model_fields: + raise HTTPException( + status_code=400, + detail={"error": "Invalid field={} passed in.".format(data.field_name)}, + ) + + try: + cgs = ConfigGeneralSettings(**{data.field_name: data.field_value}) + except: + raise HTTPException( + status_code=400, + detail={ + "error": "Invalid type of field value={} passed in.".format( + type(data.field_value), + ) + }, + ) + + ## get general settings from db + db_general_settings = await prisma_client.db.litellm_config.find_first( + where={"param_name": "general_settings"} + ) + ### update value + + if db_general_settings is None or db_general_settings.param_value is None: + general_settings = {} + else: + general_settings = dict(db_general_settings.param_value) + + ## update db + + general_settings[data.field_name] = data.field_value + + response = await prisma_client.db.litellm_config.upsert( + where={"param_name": "general_settings"}, + data={ + "create": {"param_name": "general_settings", "param_value": json.dumps(general_settings)}, # type: ignore + "update": {"param_value": json.dumps(general_settings)}, # type: ignore + }, + ) + + return response + + +@router.get( + "/config/field/info", + tags=["config.yaml"], + dependencies=[Depends(user_api_key_auth)], +) +async def get_config_general_settings( + field_name: str, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + global prisma_client + + ## VALIDATION ## + """ + - Check if prisma_client is None + - Check if user allowed to call this endpoint (admin-only) + - Check if param in general settings + """ + if prisma_client is None: + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + if user_api_key_dict.user_role != "proxy_admin": + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.not_allowed_access.value}, + ) + + if field_name not in ConfigGeneralSettings.model_fields: + raise HTTPException( + status_code=400, + detail={"error": "Invalid field={} passed in.".format(field_name)}, + ) + + ## get general settings from db + db_general_settings = await prisma_client.db.litellm_config.find_first( + where={"param_name": "general_settings"} + ) + ### pop the value + + if db_general_settings is None or db_general_settings.param_value is None: + raise HTTPException( + status_code=400, + detail={"error": "Field name={} not in DB".format(field_name)}, + ) + else: + general_settings = dict(db_general_settings.param_value) + + if field_name in general_settings: + return { + "field_name": field_name, + "field_value": general_settings[field_name], + } + else: + raise HTTPException( + status_code=400, + detail={"error": "Field name={} not in DB".format(field_name)}, + ) + + +@router.post( + "/config/field/delete", + tags=["config.yaml"], + dependencies=[Depends(user_api_key_auth)], +) +async def delete_config_general_settings( + field_name: str, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Delete the db value of this field in litellm general settings. Resets it to it's initial default value on litellm. + """ + global prisma_client + ## VALIDATION ## + """ + - Check if prisma_client is None + - Check if user allowed to call this endpoint (admin-only) + - Check if param in general settings + """ + if prisma_client is None: + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + if user_api_key_dict.user_role != "proxy_admin": + raise HTTPException( + status_code=400, + detail={"error": CommonProxyErrors.not_allowed_access.value}, + ) + + if field_name not in ConfigGeneralSettings.model_fields: + raise HTTPException( + status_code=400, + detail={"error": "Invalid field={} passed in.".format(field_name)}, + ) + + ## get general settings from db + db_general_settings = await prisma_client.db.litellm_config.find_first( + where={"param_name": "general_settings"} + ) + ### pop the value + + if db_general_settings is None or db_general_settings.param_value is None: + raise HTTPException( + status_code=400, + detail={"error": "Field name={} not in config".format(field_name)}, + ) + else: + general_settings = dict(db_general_settings.param_value) + + ## update db + + general_settings.pop(field_name) + + response = await prisma_client.db.litellm_config.upsert( + where={"param_name": "general_settings"}, + data={ + "create": {"param_name": "general_settings", "param_value": json.dumps(general_settings)}, # type: ignore + "update": {"param_value": json.dumps(general_settings)}, # type: ignore + }, + ) + + return response + + @router.get( "/get/config/callbacks", tags=["config.yaml"], @@ -9692,6 +9906,7 @@ async def config_yaml_endpoint(config_info: ConfigYAML): return {"hello": "world"} +#### BASIC ENDPOINTS #### @router.get( "/test", tags=["health"], diff --git a/ui/litellm-dashboard/src/components/general_settings.tsx b/ui/litellm-dashboard/src/components/general_settings.tsx index c2013b15785..2063c049888 100644 --- a/ui/litellm-dashboard/src/components/general_settings.tsx +++ b/ui/litellm-dashboard/src/components/general_settings.tsx @@ -23,12 +23,30 @@ import { AccordionHeader, AccordionList, } from "@tremor/react"; -import { TabPanel, TabPanels, TabGroup, TabList, Tab, Icon } from "@tremor/react"; -import { getCallbacksCall, setCallbacksCall, serviceHealthCheck } from "./networking"; +import { + TabPanel, + TabPanels, + TabGroup, + TabList, + Tab, + Icon, +} from "@tremor/react"; +import { + getCallbacksCall, + setCallbacksCall, + serviceHealthCheck, +} from "./networking"; import { Modal, Form, Input, Select, Button as Button2, message } from "antd"; -import { InformationCircleIcon, PencilAltIcon, PencilIcon, StatusOnlineIcon, TrashIcon, RefreshIcon } from "@heroicons/react/outline"; +import { + InformationCircleIcon, + PencilAltIcon, + PencilIcon, + StatusOnlineIcon, + TrashIcon, + RefreshIcon, +} from "@heroicons/react/outline"; import StaticGenerationSearchParamsBailoutProvider from "next/dist/client/components/static-generation-searchparams-bailout-provider"; -import AddFallbacks from "./add_fallbacks" +import AddFallbacks from "./add_fallbacks"; import openai from "openai"; import Paragraph from "antd/es/skeleton/Paragraph"; @@ -36,7 +54,7 @@ interface GeneralSettingsPageProps { accessToken: string | null; userRole: string | null; userID: string | null; - modelData: any + modelData: any; } async function testFallbackModelResponse( @@ -65,43 +83,63 @@ async function testFallbackModelResponse( }, ], // @ts-ignore - mock_testing_fallbacks: true + mock_testing_fallbacks: true, }); message.success( - Test model={selectedModel}, received model={response.model}. - See window.open('https://docs.litellm.ai/docs/proxy/reliability', '_blank')} style={{ textDecoration: 'underline', color: 'blue' }}>curl + Test model={selectedModel}, received model= + {response.model}. See{" "} + + window.open( + "https://docs.litellm.ai/docs/proxy/reliability", + "_blank" + ) + } + style={{ textDecoration: "underline", color: "blue" }} + > + curl + ); } catch (error) { - message.error(`Error occurred while generating model response. Please try again. Error: ${error}`, 20); + message.error( + `Error occurred while generating model response. Please try again. Error: ${error}`, + 20 + ); } } interface AccordionHeroProps { selectedStrategy: string | null; strategyArgs: routingStrategyArgs; - paramExplanation: { [key: string]: string } + paramExplanation: { [key: string]: string }; } interface routingStrategyArgs { - ttl?: number; - lowest_latency_buffer?: number; + ttl?: number; + lowest_latency_buffer?: number; } const defaultLowestLatencyArgs: routingStrategyArgs = { - "ttl": 3600, - "lowest_latency_buffer": 0 -} + ttl: 3600, + lowest_latency_buffer: 0, +}; -export const AccordionHero: React.FC = ({ selectedStrategy, strategyArgs, paramExplanation }) => ( +export const AccordionHero: React.FC = ({ + selectedStrategy, + strategyArgs, + paramExplanation, +}) => ( - Routing Strategy Specific Args - - { - selectedStrategy == "latency-based-routing" ? - + + Routing Strategy Specific Args + + + {selectedStrategy == "latency-based-routing" ? ( + @@ -114,51 +152,69 @@ export const AccordionHero: React.FC = ({ selectedStrategy, {param} -

{paramExplanation[param]}

+

+ {paramExplanation[param]} +

+ name={param} + defaultValue={ + typeof value === "object" + ? JSON.stringify(value, null, 2) + : value.toString() + } + />
))}
-
- : No specific settings - } -
-
+ + ) : ( + No specific settings + )} + + ); const GeneralSettings: React.FC = ({ accessToken, userRole, userID, - modelData + modelData, }) => { - const [routerSettings, setRouterSettings] = useState<{ [key: string]: any }>({}); + const [routerSettings, setRouterSettings] = useState<{ [key: string]: any }>( + {} + ); const [isModalVisible, setIsModalVisible] = useState(false); const [form] = Form.useForm(); const [selectedCallback, setSelectedCallback] = useState(null); - const [selectedStrategy, setSelectedStrategy] = useState(null) - const [strategySettings, setStrategySettings] = useState(null); + const [selectedStrategy, setSelectedStrategy] = useState(null); + const [strategySettings, setStrategySettings] = + useState(null); let paramExplanation: { [key: string]: string } = { - "routing_strategy_args": "(dict) Arguments to pass to the routing strategy", - "routing_strategy": "(string) Routing strategy to use", - "allowed_fails": "(int) Number of times a deployment can fail before being added to cooldown", - "cooldown_time": "(int) time in seconds to cooldown a deployment after failure", - "num_retries": "(int) Number of retries for failed requests. Defaults to 0.", - "timeout": "(float) Timeout for requests. Defaults to None.", - "retry_after": "(int) Minimum time to wait before retrying a failed request", - "ttl": "(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).", - "lowest_latency_buffer": "(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)." - } + routing_strategy_args: "(dict) Arguments to pass to the routing strategy", + routing_strategy: "(string) Routing strategy to use", + allowed_fails: + "(int) Number of times a deployment can fail before being added to cooldown", + cooldown_time: + "(int) time in seconds to cooldown a deployment after failure", + num_retries: "(int) Number of retries for failed requests. Defaults to 0.", + timeout: "(float) Timeout for requests. Defaults to None.", + retry_after: "(int) Minimum time to wait before retrying a failed request", + ttl: "(int) Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).", + lowest_latency_buffer: + "(float) Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency).", + }; useEffect(() => { if (!accessToken || !userRole || !userID) { @@ -190,8 +246,8 @@ const GeneralSettings: React.FC = ({ return; } - console.log(`received key: ${key}`) - console.log(`routerSettings['fallbacks']: ${routerSettings['fallbacks']}`) + console.log(`received key: ${key}`); + console.log(`routerSettings['fallbacks']: ${routerSettings["fallbacks"]}`); routerSettings["fallbacks"].map((dict: { [key: string]: any }) => { // Check if the dictionary has the specified key and delete it if present @@ -202,18 +258,18 @@ const GeneralSettings: React.FC = ({ }); const payload = { - router_settings: routerSettings + router_settings: routerSettings, }; try { await setCallbacksCall(accessToken, payload); setRouterSettings({ ...routerSettings }); - setSelectedStrategy(routerSettings["routing_strategy"]) + setSelectedStrategy(routerSettings["routing_strategy"]); message.success("Router settings updated successfully"); } catch (error) { message.error("Failed to update router settings: " + error, 20); } - } + }; const handleSaveChanges = (router_settings: any) => { if (!accessToken) { @@ -223,39 +279,55 @@ const GeneralSettings: React.FC = ({ console.log("router_settings", router_settings); const updatedVariables = Object.fromEntries( - Object.entries(router_settings).map(([key, value]) => { - if (key !== 'routing_strategy_args' && key !== "routing_strategy") { - return [key, (document.querySelector(`input[name="${key}"]`) as HTMLInputElement)?.value || value]; - } - else if (key == "routing_strategy") { - return [key, selectedStrategy] - } - else if (key == "routing_strategy_args" && selectedStrategy == "latency-based-routing") { - let setRoutingStrategyArgs: routingStrategyArgs = {} + Object.entries(router_settings) + .map(([key, value]) => { + if (key !== "routing_strategy_args" && key !== "routing_strategy") { + return [ + key, + ( + document.querySelector( + `input[name="${key}"]` + ) as HTMLInputElement + )?.value || value, + ]; + } else if (key == "routing_strategy") { + return [key, selectedStrategy]; + } else if ( + key == "routing_strategy_args" && + selectedStrategy == "latency-based-routing" + ) { + let setRoutingStrategyArgs: routingStrategyArgs = {}; - const lowestLatencyBufferElement = document.querySelector(`input[name="lowest_latency_buffer"]`) as HTMLInputElement; - const ttlElement = document.querySelector(`input[name="ttl"]`) as HTMLInputElement; + const lowestLatencyBufferElement = document.querySelector( + `input[name="lowest_latency_buffer"]` + ) as HTMLInputElement; + const ttlElement = document.querySelector( + `input[name="ttl"]` + ) as HTMLInputElement; - if (lowestLatencyBufferElement?.value) { - setRoutingStrategyArgs["lowest_latency_buffer"] = Number(lowestLatencyBufferElement.value) + if (lowestLatencyBufferElement?.value) { + setRoutingStrategyArgs["lowest_latency_buffer"] = Number( + lowestLatencyBufferElement.value + ); + } + + if (ttlElement?.value) { + setRoutingStrategyArgs["ttl"] = Number(ttlElement.value); + } + + console.log(`setRoutingStrategyArgs: ${setRoutingStrategyArgs}`); + return ["routing_strategy_args", setRoutingStrategyArgs]; } - - if (ttlElement?.value) { - setRoutingStrategyArgs["ttl"] = Number(ttlElement.value) - } - - console.log(`setRoutingStrategyArgs: ${setRoutingStrategyArgs}`) - return [ - "routing_strategy_args", setRoutingStrategyArgs - ] - } - return null; - }).filter(entry => entry !== null && entry !== undefined) as Iterable<[string, unknown]> + return null; + }) + .filter((entry) => entry !== null && entry !== undefined) as Iterable< + [string, unknown] + > ); console.log("updatedVariables", updatedVariables); const payload = { - router_settings: updatedVariables + router_settings: updatedVariables, }; try { @@ -267,117 +339,166 @@ const GeneralSettings: React.FC = ({ message.success("router settings updated successfully"); }; - - if (!accessToken) { return null; } - return (

e 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 literal 0 HcmV?d00001 From 416d459a777a25d5cc21cebad9e4e828f9329820 Mon Sep 17 00:00:00 2001 From: alisalim17 Date: Sat, 4 May 2024 19:33:38 +0400 Subject: [PATCH 017/378] enable exception logging in logfire_openai.error() by setting _exc_info to True --- litellm/integrations/logfire_logger.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/litellm/integrations/logfire_logger.py b/litellm/integrations/logfire_logger.py index fbe390b52ca..e27d848fb4d 100644 --- a/litellm/integrations/logfire_logger.py +++ b/litellm/integrations/logfire_logger.py @@ -153,7 +153,6 @@ class LogfireLogger: "metadata": clean_metadata, } logfire_openai = logfire.with_settings(custom_scope_suffix="openai") - message_template, span_data = self._get_span_config(payload) if level == LogfireLevel.INFO: logfire_openai.info( @@ -164,7 +163,7 @@ class LogfireLogger: logfire_openai.error( message_template, **span_data, - exc_info=str(kwargs.get("exception", None)), + _exc_info=True, ) print_verbose(f"\ndd Logger - Logging payload = {payload}") From 4b655d8b3343be0d5a537be59e58c12f29820c89 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Tue, 7 May 2024 15:02:37 +0000 Subject: [PATCH 018/378] feat(util.py): Add OIDC support. --- litellm/tests/test_secret_manager.py | 33 +++++++++++++++++ litellm/utils.py | 54 ++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/litellm/tests/test_secret_manager.py b/litellm/tests/test_secret_manager.py index 3ea38f8061b..892a8831cfa 100644 --- a/litellm/tests/test_secret_manager.py +++ b/litellm/tests/test_secret_manager.py @@ -23,3 +23,36 @@ def test_aws_secret_manager(): print(f"secret_val: {secret_val}") assert secret_val == "sk-1234" + + +def redact_oidc_signature(secret_val): + # remove the last part of `.` and replace it with "SIGNATURE_REMOVED" + return secret_val.split(".")[:-1] + ["SIGNATURE_REMOVED"] + + +@pytest.mark.skipif(os.environ.get('K_SERVICE') is None, reason="Cannot run without being in GCP Cloud Run") +def test_oidc_google(): + secret_val = get_secret("oidc/google/https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.titan-text-express-v1/invoke") + + print(f"secret_val: {redact_oidc_signature(secret_val)}") + + +@pytest.mark.skipif(os.environ.get('ACTIONS_ID_TOKEN_REQUEST_TOKEN') is None, reason="Cannot run without being in GitHub Actions") +def test_oidc_github(): + secret_val = get_secret("oidc/github/https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.titan-text-express-v1/invoke") + + print(f"secret_val: {redact_oidc_signature(secret_val)}") + + +@pytest.mark.skipif(os.environ.get('CIRCLE_OIDC_TOKEN') is None, reason="Cannot run without being in a CircleCI Runner") +def test_oidc_circleci(): + secret_val = get_secret("oidc/circleci/https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.titan-text-express-v1/invoke") + + print(f"secret_val: {redact_oidc_signature(secret_val)}") + + +@pytest.mark.skipif(os.environ.get('CIRCLE_OIDC_TOKEN_V2') is None, reason="Cannot run without being in a CircleCI Runner") +def test_oidc_circleci_v2(): + secret_val = get_secret("oidc/circleci_v2/https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.titan-text-express-v1/invoke") + + print(f"secret_val: {redact_oidc_signature(secret_val)}") diff --git a/litellm/utils.py b/litellm/utils.py index a938a0ba841..652406f64e8 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -33,6 +33,7 @@ from dataclasses import ( ) import litellm._service_logger # for storing API inputs, outputs, and metadata +from litellm.llms.custom_httpx.http_handler import HTTPHandler try: # this works in python 3.8 @@ -9288,6 +9289,59 @@ def get_secret( if secret_name.startswith("os.environ/"): secret_name = secret_name.replace("os.environ/", "") + # Example: oidc/google/https://bedrock-runtime.us-east-1.amazonaws.com/model/stability.stable-diffusion-xl-v1/invoke + if secret_name.startswith("oidc/"): + secret_name = secret_name.replace("oidc/", "") + oidc_provider, oidc_aud = secret_name.split("/", 1) + # TODO: Add caching for HTTP requests + match oidc_provider: + case "google": + client = HTTPHandler(timeout=httpx.Timeout(timeout=600.0, connect=5.0)) + # https://cloud.google.com/compute/docs/instances/verifying-instance-identity#request_signature + response = client.get( + "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity", + params={"audience": oidc_aud}, + headers={"Metadata-Flavor": "Google"}, + ) + if response.status_code == 200: + return response.text + else: + raise ValueError("Google OIDC provider failed") + case "circleci": + # https://circleci.com/docs/openid-connect-tokens/ + env_secret = os.getenv("CIRCLE_OIDC_TOKEN") + if env_secret is None: + raise ValueError("CIRCLE_OIDC_TOKEN not found in environment") + return env_secret + case "circleci_v2": + # https://circleci.com/docs/openid-connect-tokens/ + env_secret = os.getenv("CIRCLE_OIDC_TOKEN_V2") + if env_secret is None: + raise ValueError("CIRCLE_OIDC_TOKEN_V2 not found in environment") + return env_secret + case "github": + # https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-cloud-providers#using-custom-actions + actions_id_token_request_url = os.getenv("ACTIONS_ID_TOKEN_REQUEST_URL") + actions_id_token_request_token = os.getenv("ACTIONS_ID_TOKEN_REQUEST_TOKEN") + if actions_id_token_request_url is None or actions_id_token_request_token is None: + raise ValueError("ACTIONS_ID_TOKEN_REQUEST_URL or ACTIONS_ID_TOKEN_REQUEST_TOKEN not found in environment") + client = HTTPHandler(timeout=httpx.Timeout(timeout=600.0, connect=5.0)) + response = client.get( + actions_id_token_request_url, + params={"audience": oidc_aud}, + headers={ + "Authorization": f"Bearer {actions_id_token_request_token}", + "Accept": "application/json; api-version=2.0", + }, + ) + if response.status_code == 200: + return response.text['value'] + else: + raise ValueError("Github OIDC provider failed") + case _: + raise ValueError("Unsupported OIDC provider") + + try: if litellm.secret_manager_client is not None: try: From 3ee0328b044e84e6bd7c3085681a468e69c3c646 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Tue, 7 May 2024 15:01:46 +0000 Subject: [PATCH 019/378] feat(bedrock.py): Support using OIDC tokens. --- litellm/llms/bedrock.py | 42 +++++++++++++++++++++++- litellm/tests/test_bedrock_completion.py | 29 ++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 2f26ae4a9a0..fe0aca44e73 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -550,6 +550,7 @@ def init_bedrock_client( aws_session_name: Optional[str] = None, aws_profile_name: Optional[str] = None, aws_role_name: Optional[str] = None, + aws_web_identity_token: Optional[str] = None, extra_headers: Optional[dict] = None, timeout: Optional[Union[float, httpx.Timeout]] = None, ): @@ -566,6 +567,7 @@ def init_bedrock_client( aws_session_name, aws_profile_name, aws_role_name, + aws_web_identity_token, ] # Iterate over parameters and update if needed @@ -581,6 +583,7 @@ def init_bedrock_client( aws_session_name, aws_profile_name, aws_role_name, + aws_web_identity_token, ) = params_to_check ### SET REGION NAME @@ -619,7 +622,38 @@ def init_bedrock_client( config = boto3.session.Config() ### CHECK STS ### - if aws_role_name is not None and aws_session_name is not None: + if aws_web_identity_token is not None and aws_role_name is not None and aws_session_name is not None: + oidc_token = get_secret(aws_web_identity_token) + + if oidc_token is None: + raise BedrockError( + message="OIDC token could not be retrieved from secret manager.", + status_code=401, + ) + + sts_client = boto3.client( + "sts" + ) + + # https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html + # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts/client/assume_role_with_web_identity.html + sts_response = sts_client.assume_role_with_web_identity( + RoleArn=aws_role_name, + RoleSessionName=aws_session_name, + WebIdentityToken=oidc_token, + DurationSeconds=3600, + ) + + client = boto3.client( + service_name="bedrock-runtime", + aws_access_key_id=sts_response["Credentials"]["AccessKeyId"], + aws_secret_access_key=sts_response["Credentials"]["SecretAccessKey"], + aws_session_token=sts_response["Credentials"]["SessionToken"], + region_name=region_name, + endpoint_url=endpoint_url, + config=config, + ) + elif aws_role_name is not None and aws_session_name is not None: # use sts if role name passed in sts_client = boto3.client( "sts", @@ -752,6 +786,7 @@ def completion( aws_bedrock_runtime_endpoint = optional_params.pop( "aws_bedrock_runtime_endpoint", None ) + aws_web_identity_token = optional_params.pop("aws_web_identity_token", None) # use passed in BedrockRuntime.Client if provided, otherwise create a new one client = optional_params.pop("aws_bedrock_client", None) @@ -766,6 +801,7 @@ def completion( aws_role_name=aws_role_name, aws_session_name=aws_session_name, aws_profile_name=aws_profile_name, + aws_web_identity_token=aws_web_identity_token, extra_headers=extra_headers, timeout=timeout, ) @@ -1288,6 +1324,7 @@ def embedding( aws_bedrock_runtime_endpoint = optional_params.pop( "aws_bedrock_runtime_endpoint", None ) + aws_web_identity_token = optional_params.pop("aws_web_identity_token", None) # use passed in BedrockRuntime.Client if provided, otherwise create a new one client = init_bedrock_client( @@ -1295,6 +1332,7 @@ def embedding( aws_secret_access_key=aws_secret_access_key, aws_region_name=aws_region_name, aws_bedrock_runtime_endpoint=aws_bedrock_runtime_endpoint, + aws_web_identity_token=aws_web_identity_token, aws_role_name=aws_role_name, aws_session_name=aws_session_name, ) @@ -1377,6 +1415,7 @@ def image_generation( aws_bedrock_runtime_endpoint = optional_params.pop( "aws_bedrock_runtime_endpoint", None ) + aws_web_identity_token = optional_params.pop("aws_web_identity_token", None) # use passed in BedrockRuntime.Client if provided, otherwise create a new one client = init_bedrock_client( @@ -1384,6 +1423,7 @@ def image_generation( aws_secret_access_key=aws_secret_access_key, aws_region_name=aws_region_name, aws_bedrock_runtime_endpoint=aws_bedrock_runtime_endpoint, + aws_web_identity_token=aws_web_identity_token, aws_role_name=aws_role_name, aws_session_name=aws_session_name, timeout=timeout, diff --git a/litellm/tests/test_bedrock_completion.py b/litellm/tests/test_bedrock_completion.py index 3f5c831d73a..ef6774fd2f8 100644 --- a/litellm/tests/test_bedrock_completion.py +++ b/litellm/tests/test_bedrock_completion.py @@ -206,6 +206,35 @@ def test_completion_bedrock_claude_sts_client_auth(): # test_completion_bedrock_claude_sts_client_auth() +@pytest.mark.skipif(os.environ.get('CIRCLE_OIDC_TOKEN_V2') is None, reason="CIRCLE_OIDC_TOKEN_V2 is not set") +def test_completion_bedrock_claude_sts_oidc_auth(): + print("\ncalling bedrock claude with oidc auth") + import os + + aws_web_identity_token = "oidc/circleci_v2/" + aws_region_name = os.environ["AWS_REGION_NAME"] + aws_role_name = os.environ["AWS_TEMP_ROLE_NAME"] + + try: + litellm.set_verbose = True + + response = completion( + model="bedrock/anthropic.claude-instant-v1", + messages=messages, + max_tokens=10, + temperature=0.1, + aws_region_name=aws_region_name, + aws_web_identity_token=aws_web_identity_token, + aws_role_name=aws_role_name, + aws_session_name="my-test-session", + ) + # Add any assertions here to check the response + print(response) + except RateLimitError: + pass + except Exception as e: + pytest.fail(f"Error occurred: {e}") + def test_bedrock_extra_headers(): try: From e268354acc3dbdbf0a2313aa7fd87fd485774b34 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Tue, 7 May 2024 19:18:28 +0000 Subject: [PATCH 020/378] feat(azure.py): Support OIDC auth --- litellm/llms/azure.py | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/litellm/llms/azure.py b/litellm/llms/azure.py index e7af9d43b64..c2bbe54c152 100644 --- a/litellm/llms/azure.py +++ b/litellm/llms/azure.py @@ -8,6 +8,7 @@ from litellm.utils import ( CustomStreamWrapper, convert_to_model_response_object, TranscriptionResponse, + get_secret, ) from typing import Callable, Optional, BinaryIO from litellm import OpenAIConfig @@ -16,6 +17,7 @@ import httpx from .custom_httpx.azure_dall_e_2 import CustomHTTPTransport, AsyncCustomHTTPTransport from openai import AzureOpenAI, AsyncAzureOpenAI import uuid +import os class AzureOpenAIError(Exception): @@ -126,6 +128,51 @@ def select_azure_base_url_or_endpoint(azure_client_params: dict): return azure_client_params +def get_azure_ad_token_from_oidc(azure_ad_token: str): + azure_client_id = os.getenv("AZURE_CLIENT_ID", None) + azure_tenant = os.getenv("AZURE_TENANT_ID", None) + + if azure_client_id is None or azure_tenant is None: + raise AzureOpenAIError( + status_code=422, + message="AZURE_CLIENT_ID and AZURE_TENANT_ID must be set", + ) + + oidc_token = get_secret(azure_ad_token) + + if oidc_token is None: + raise AzureOpenAIError( + status_code=401, + message="OIDC token could not be retrieved from secret manager.", + ) + + req_token = httpx.get( + f"https://login.microsoftonline.com/{azure_tenant}/oauth2/v2.0/token", + data={ + "client_id": azure_client_id, + "grant_type": "client_credentials", + "scope": "https://cognitiveservices.azure.com/.default", + "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", + "client_assertion": oidc_token, + }, + ) + + if req_token.status_code != 200: + raise AzureOpenAIError( + status_code=req_token.status_code, + message=req_token.text, + ) + + possible_azure_ad_token = req_token.json().get("access_token", None) + + if possible_azure_ad_token is None: + raise AzureOpenAIError( + status_code=422, message="Azure AD Token not returned" + ) + + return possible_azure_ad_token + + class AzureChatCompletion(BaseLLM): def __init__(self) -> None: super().__init__() @@ -137,6 +184,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: headers["api-key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) headers["Authorization"] = f"Bearer {azure_ad_token}" return headers @@ -189,6 +238,9 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) + azure_client_params["azure_ad_token"] = azure_ad_token if acompletion is True: @@ -276,6 +328,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token if client is None: azure_client = AzureOpenAI(**azure_client_params) @@ -351,6 +405,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token # setting Azure client @@ -422,6 +478,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token if client is None: azure_client = AzureOpenAI(**azure_client_params) @@ -478,6 +536,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token if client is None: azure_client = AsyncAzureOpenAI(**azure_client_params) @@ -599,6 +659,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token ## LOGGING @@ -755,6 +817,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token if aimg_generation == True: @@ -833,6 +897,8 @@ class AzureChatCompletion(BaseLLM): if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) azure_client_params["azure_ad_token"] = azure_ad_token if max_retries is not None: From 9a0bb36865a3ed10325eab67f5d74169fd152891 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Tue, 7 May 2024 19:43:18 +0000 Subject: [PATCH 021/378] fix+feat(router.py): Fix missing azure_ad_token, and allow use OIDC auth --- litellm/router.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index 4353da804b4..24a926e5d9c 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -45,6 +45,7 @@ from litellm.types.router import ( RetryPolicy, ) from litellm.integrations.custom_logger import CustomLogger +from litellm.llms.azure import get_azure_ad_token_from_oidc class Router: @@ -2089,6 +2090,10 @@ class Router: raise ValueError( f"api_base is required for Azure OpenAI. Set it on your config. Model - {model}" ) + azure_ad_token = litellm_params.get("azure_ad_token") + if azure_ad_token is not None: + if azure_ad_token.startswith("oidc/"): + azure_ad_token = get_azure_ad_token_from_oidc(azure_ad_token) if api_version is None: api_version = "2023-07-01-preview" if "gateway.ai.cloudflare.com" in api_base: @@ -2099,6 +2104,7 @@ class Router: cache_key = f"{model_id}_async_client" _client = openai.AsyncAzureOpenAI( api_key=api_key, + azure_ad_token=azure_ad_token, base_url=api_base, api_version=api_version, timeout=timeout, @@ -2123,6 +2129,7 @@ class Router: cache_key = f"{model_id}_client" _client = openai.AzureOpenAI( # type: ignore api_key=api_key, + azure_ad_token=azure_ad_token, base_url=api_base, api_version=api_version, timeout=timeout, @@ -2147,6 +2154,7 @@ class Router: cache_key = f"{model_id}_stream_async_client" _client = openai.AsyncAzureOpenAI( # type: ignore api_key=api_key, + azure_ad_token=azure_ad_token, base_url=api_base, api_version=api_version, timeout=stream_timeout, @@ -2171,6 +2179,7 @@ class Router: cache_key = f"{model_id}_stream_client" _client = openai.AzureOpenAI( # type: ignore api_key=api_key, + azure_ad_token=azure_ad_token, base_url=api_base, api_version=api_version, timeout=stream_timeout, From cb49fb004d7bba866d229760931256bf96971f8e Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Tue, 7 May 2024 19:51:57 +0000 Subject: [PATCH 022/378] fix(azure.py): Correct invalid .get to a .post for OIDC --- litellm/llms/azure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/llms/azure.py b/litellm/llms/azure.py index c2bbe54c152..1e807b5e7dc 100644 --- a/litellm/llms/azure.py +++ b/litellm/llms/azure.py @@ -146,7 +146,7 @@ def get_azure_ad_token_from_oidc(azure_ad_token: str): message="OIDC token could not be retrieved from secret manager.", ) - req_token = httpx.get( + req_token = httpx.post( f"https://login.microsoftonline.com/{azure_tenant}/oauth2/v2.0/token", data={ "client_id": azure_client_id, From 44b1b219115f9d4804ca9dec2b82441059a3c128 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Tue, 7 May 2024 21:20:15 +0000 Subject: [PATCH 023/378] feat(utils.py) - Add OIDC caching for Google Cloud Run and GitHub Actions. --- litellm/utils.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/litellm/utils.py b/litellm/utils.py index 652406f64e8..f5d3b974b6d 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -34,6 +34,8 @@ from dataclasses import ( import litellm._service_logger # for storing API inputs, outputs, and metadata from litellm.llms.custom_httpx.http_handler import HTTPHandler +from litellm.caching import DualCache +oidc_cache = DualCache() try: # this works in python 3.8 @@ -9291,11 +9293,15 @@ def get_secret( # Example: oidc/google/https://bedrock-runtime.us-east-1.amazonaws.com/model/stability.stable-diffusion-xl-v1/invoke if secret_name.startswith("oidc/"): - secret_name = secret_name.replace("oidc/", "") - oidc_provider, oidc_aud = secret_name.split("/", 1) + secret_name_split = secret_name.replace("oidc/", "") + oidc_provider, oidc_aud = secret_name_split.split("/", 1) # TODO: Add caching for HTTP requests match oidc_provider: case "google": + oidc_token = oidc_cache.get_cache(key=secret_name) + if oidc_token is not None: + return oidc_token + client = HTTPHandler(timeout=httpx.Timeout(timeout=600.0, connect=5.0)) # https://cloud.google.com/compute/docs/instances/verifying-instance-identity#request_signature response = client.get( @@ -9304,7 +9310,9 @@ def get_secret( headers={"Metadata-Flavor": "Google"}, ) if response.status_code == 200: - return response.text + oidc_token = response.text + oidc_cache.set_cache(key=secret_name, value=oidc_token, ttl=3600 - 60) + return oidc_token else: raise ValueError("Google OIDC provider failed") case "circleci": @@ -9325,6 +9333,11 @@ def get_secret( actions_id_token_request_token = os.getenv("ACTIONS_ID_TOKEN_REQUEST_TOKEN") if actions_id_token_request_url is None or actions_id_token_request_token is None: raise ValueError("ACTIONS_ID_TOKEN_REQUEST_URL or ACTIONS_ID_TOKEN_REQUEST_TOKEN not found in environment") + + oidc_token = oidc_cache.get_cache(key=secret_name) + if oidc_token is not None: + return oidc_token + client = HTTPHandler(timeout=httpx.Timeout(timeout=600.0, connect=5.0)) response = client.get( actions_id_token_request_url, @@ -9335,7 +9348,9 @@ def get_secret( }, ) if response.status_code == 200: - return response.text['value'] + oidc_token = response.text['value'] + oidc_cache.set_cache(key=secret_name, value=oidc_token, ttl=300 - 5) + return oidc_token else: raise ValueError("Github OIDC provider failed") case _: From 77b3acb396269ac31dc1916c17ff2b9e430d1585 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Wed, 8 May 2024 14:34:45 +0000 Subject: [PATCH 024/378] fix(router.py): Add missing azure_ad_token param. --- litellm/router.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/router.py b/litellm/router.py index 24a926e5d9c..ea8d17286ff 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2212,6 +2212,7 @@ class Router: "api_key": api_key, "azure_endpoint": api_base, "api_version": api_version, + "azure_ad_token": azure_ad_token, } from litellm.llms.azure import select_azure_base_url_or_endpoint From dde2e3249afff2d8c0579c93662a08210cde62ec Mon Sep 17 00:00:00 2001 From: Kade Heckel <51248168+kmheckel@users.noreply.github.com> Date: Thu, 9 May 2024 11:01:25 +0100 Subject: [PATCH 025/378] Update model_prices_and_context_window.json Added Mistral and Mixtral Chat entries for Ollama. --- model_prices_and_context_window.json | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 10c70a858da..cb0f54aa6ab 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -2758,6 +2758,42 @@ "litellm_provider": "ollama", "mode": "completion" }, + "ollama/mistral-7B-Instruct-v0.1": { + "max_tokens": 8192, + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/mistral-7B-Instruct-v0.2": { + "max_tokens": 32768, + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/mixtral-8x7B-Instruct-v0.1": { + "max_tokens": 32768, + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/mixtral-8x22B-Instruct-v0.1": { + "max_tokens": 65536, + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, "ollama/codellama": { "max_tokens": 4096, "max_input_tokens": 4096, From 256107c9990d5e8a66141c2110c1d12e813e913b Mon Sep 17 00:00:00 2001 From: Kade Heckel Date: Thu, 9 May 2024 12:06:51 +0100 Subject: [PATCH 026/378] Added Ollama LLMs for LLaMa and Mistral --- litellm/utils.py | 2 +- model_prices_and_context_window.json | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/litellm/utils.py b/litellm/utils.py index d1af1b44a7b..fab8beb14fb 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -6620,7 +6620,7 @@ def get_max_tokens(model: str): raise Exception() except: raise Exception( - "This model isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json" + f"Model {model} from provider {custom_llm_provider} isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json" ) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index cb0f54aa6ab..d9dc82d54aa 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -2749,6 +2749,24 @@ "litellm_provider": "ollama", "mode": "completion" }, + "ollama/llama3": { + "max_tokens": 8192, + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "input_cost_per_token": 0.00000010, + "output_cost_per_token": 0.00000010, + "litellm_provider": "ollama", + "mode": "chat" + }, + "ollama/llama3:70b": { + "max_tokens": 8192, + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ollama", + "mode": "chat" + }, "ollama/mistral": { "max_tokens": 8192, "max_input_tokens": 8192, From 615a4760afc83388a0a165921003cdd6624fcd81 Mon Sep 17 00:00:00 2001 From: Kade Heckel Date: Thu, 9 May 2024 12:29:01 +0100 Subject: [PATCH 027/378] Updated docs for Ollama. --- docs/my-website/docs/providers/ollama.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/my-website/docs/providers/ollama.md b/docs/my-website/docs/providers/ollama.md index 1c913c08c83..c1c8fc57c83 100644 --- a/docs/my-website/docs/providers/ollama.md +++ b/docs/my-website/docs/providers/ollama.md @@ -101,13 +101,19 @@ Ollama supported models: https://github.com/ollama/ollama | Model Name | Function Call | |----------------------|----------------------------------------------------------------------------------- -| Mistral | `completion(model='ollama/mistral', messages, api_base="http://localhost:11434", stream=True)` | +| Mistral | `completion(model='ollama/mistral', messages, api_base="http://localhost:11434", stream=True)` | +| Mistral-7B-Instruct-v0.1 | `completion(model='ollama/mistral-7B-Instruct-v0.1', messages, api_base="http://localhost:11434", stream=False)` | +| Mistral-7B-Instruct-v0.2 | `completion(model='ollama/mistral-7B-Instruct-v0.2', messages, api_base="http://localhost:11434", stream=False)` | +| Mixtral-8x7B-Instruct-v0.1 | `completion(model='ollama/mistral-8x7B-Instruct-v0.1', messages, api_base="http://localhost:11434", stream=False)` | +| Mixtral-8x22B-Instruct-v0.1 | `completion(model='ollama/mixtral-8x22B-Instruct-v0.1', messages, api_base="http://localhost:11434", stream=False)` | | Llama2 7B | `completion(model='ollama/llama2', messages, api_base="http://localhost:11434", stream=True)` | | Llama2 13B | `completion(model='ollama/llama2:13b', messages, api_base="http://localhost:11434", stream=True)` | | Llama2 70B | `completion(model='ollama/llama2:70b', messages, api_base="http://localhost:11434", stream=True)` | | Llama2 Uncensored | `completion(model='ollama/llama2-uncensored', messages, api_base="http://localhost:11434", stream=True)` | | Code Llama | `completion(model='ollama/codellama', messages, api_base="http://localhost:11434", stream=True)` | -| Llama2 Uncensored | `completion(model='ollama/llama2-uncensored', messages, api_base="http://localhost:11434", stream=True)` | +| Llama2 Uncensored | `completion(model='ollama/llama2-uncensored', messages, api_base="http://localhost:11434", stream=True)` | +|Meta LLaMa3 8B | `completion(model='ollama/llama3', messages, api_base="http://localhost:11434", stream=False)` | +| Meta LLaMa3 70B | `completion(model='ollama/llama3:70b', messages, api_base="http://localhost:11434", stream=False)` | | Orca Mini | `completion(model='ollama/orca-mini', messages, api_base="http://localhost:11434", stream=True)` | | Vicuna | `completion(model='ollama/vicuna', messages, api_base="http://localhost:11434", stream=True)` | | Nous-Hermes | `completion(model='ollama/nous-hermes', messages, api_base="http://localhost:11434", stream=True)` | From fc51a3631e235c11fbbcee4fbb0e013c8b41f69a Mon Sep 17 00:00:00 2001 From: Merlinvt Date: Thu, 9 May 2024 15:16:34 +0200 Subject: [PATCH 028/378] add additional models from openrouter --- model_prices_and_context_window.json | 138 ++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 1 deletion(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 10c70a858da..dbd812038f4 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1571,6 +1571,142 @@ "litellm_provider": "replicate", "mode": "chat" }, + "openrouter/mistralai/mixtral-8x22b-instruct": { + "max_tokens": 65536, + "input_cost_per_token": 0.00000065, + "output_cost_per_token": 0.00000065, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/microsoft/wizardlm-2-8x22b:nitro": { + "max_tokens": 65536, + "input_cost_per_token": 0.000001, + "output_cost_per_token": 0.000001, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/google/gemini-pro-1.5": { + "max_tokens": 8192, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "input_cost_per_token": 0.0000025, + "output_cost_per_token": 0.0000075, + "input_cost_per_image": 0.00265, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, + "openrouter/mistralai/mixtral-8x22b-instruct": { + "max_tokens": 65536, + "input_cost_per_token": 0.00000065, + "output_cost_per_token": 0.00000065, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/cohere/command-r-plus": { + "max_tokens": 128000, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.000015, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/databricks/dbrx-instruct": { + "max_tokens": 32768, + "input_cost_per_token": 0.0000006, + "output_cost_per_token": 0.0000006, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/anthropic/claude-3-haiku": { + "max_tokens": 200000, + "input_cost_per_token": 0.00000025, + "output_cost_per_token": 0.00000125, + "input_cost_per_image": 0.0004, // Calculated for per 1000 images. + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, + "openrouter/anthropic/claude-3-sonnet": { + "max_tokens": 200000, + "input_cost_per_token": 0.000003, + "output_cost_per_token": 0.000015, + "input_cost_per_image": 0.0048, // Per 1000 images. + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, + "openrouter/mistralai/mistral-large": { + "max_tokens": 32000, + "input_cost_per_token": 0.000008, + "output_cost_per_token": 0.000024, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/cognitivecomputations/dolphin-mixtral-8x7b": { + "max_tokens": 32769, + "input_cost_per_token": 0.0000005, + "output_cost_per_token": 0.0000005, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/google/gemini-pro-vision": { + "max_tokens": 45875, + "input_cost_per_token": 0.000000125, + "output_cost_per_token": 0.000000375, + "input_cost_per_image": 0.0025, // Per 1000 images. + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, + "openrouter/fireworks/firellava-13b": { + "max_tokens": 4096, + "input_cost_per_token": 0.0000002, + "output_cost_per_token": 0.0000002, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/meta-llama/llama-3-8b-instruct:free": { + "max_tokens": 8200, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/meta-llama/llama-3-8b-instruct:extended": { + "max_tokens": 16000, + "input_cost_per_token": 0.000000225, + "output_cost_per_token": 0.00000225, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/meta-llama/llama-3-70b-instruct:nitro": { + "max_tokens": 8200, + "input_cost_per_token": 0.0000009, + "output_cost_per_token": 0.0000009, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/meta-llama/llama-3-70b-instruct": { + "max_tokens": 8200, + "input_cost_per_token": 0.00000059, + "output_cost_per_token": 0.00000079, + "litellm_provider": "openrouter", + "mode": "chat" + }, + "openrouter/openai/gpt-4-vision-preview": { + "max_tokens": 130000, + "input_cost_per_token": 0.00001, + "output_cost_per_token": 0.00003, + "input_cost_per_image": 0.01445, // Per 1000 images. + "litellm_provider": "openrouter", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, "openrouter/openai/gpt-3.5-turbo": { "max_tokens": 4095, "input_cost_per_token": 0.0000015, @@ -3226,4 +3362,4 @@ "mode": "embedding" } -} +} \ No newline at end of file From ccdd2046af00e420983ee655d56aa84d38315ce4 Mon Sep 17 00:00:00 2001 From: Merlinvt Date: Thu, 9 May 2024 15:20:32 +0200 Subject: [PATCH 029/378] fixes --- model_prices_and_context_window.json | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index dbd812038f4..2f575757e59 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1571,13 +1571,6 @@ "litellm_provider": "replicate", "mode": "chat" }, - "openrouter/mistralai/mixtral-8x22b-instruct": { - "max_tokens": 65536, - "input_cost_per_token": 0.00000065, - "output_cost_per_token": 0.00000065, - "litellm_provider": "openrouter", - "mode": "chat" - }, "openrouter/microsoft/wizardlm-2-8x22b:nitro": { "max_tokens": 65536, "input_cost_per_token": 0.000001, @@ -1622,7 +1615,7 @@ "max_tokens": 200000, "input_cost_per_token": 0.00000025, "output_cost_per_token": 0.00000125, - "input_cost_per_image": 0.0004, // Calculated for per 1000 images. + "input_cost_per_image": 0.0004, "litellm_provider": "openrouter", "mode": "chat", "supports_function_calling": true, @@ -1632,7 +1625,7 @@ "max_tokens": 200000, "input_cost_per_token": 0.000003, "output_cost_per_token": 0.000015, - "input_cost_per_image": 0.0048, // Per 1000 images. + "input_cost_per_image": 0.0048, "litellm_provider": "openrouter", "mode": "chat", "supports_function_calling": true, @@ -1656,7 +1649,7 @@ "max_tokens": 45875, "input_cost_per_token": 0.000000125, "output_cost_per_token": 0.000000375, - "input_cost_per_image": 0.0025, // Per 1000 images. + "input_cost_per_image": 0.0025, "litellm_provider": "openrouter", "mode": "chat", "supports_function_calling": true, @@ -1701,7 +1694,7 @@ "max_tokens": 130000, "input_cost_per_token": 0.00001, "output_cost_per_token": 0.00003, - "input_cost_per_image": 0.01445, // Per 1000 images. + "input_cost_per_image": 0.01445, "litellm_provider": "openrouter", "mode": "chat", "supports_function_calling": true, @@ -1847,13 +1840,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "openrouter/meta-llama/llama-3-70b-instruct": { - "max_tokens": 8192, - "input_cost_per_token": 0.0000008, - "output_cost_per_token": 0.0000008, - "litellm_provider": "openrouter", - "mode": "chat" - }, "j2-ultra": { "max_tokens": 8192, "max_input_tokens": 8192, From 265d777894a16a4daad03b18a91341229ecae788 Mon Sep 17 00:00:00 2001 From: Merlinvt Date: Thu, 9 May 2024 15:27:14 +0200 Subject: [PATCH 030/378] fixes 2 --- model_prices_and_context_window.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 2f575757e59..1ade08fe35e 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1663,28 +1663,28 @@ "mode": "chat" }, "openrouter/meta-llama/llama-3-8b-instruct:free": { - "max_tokens": 8200, + "max_tokens": 8192, "input_cost_per_token": 0.0, "output_cost_per_token": 0.0, "litellm_provider": "openrouter", "mode": "chat" }, "openrouter/meta-llama/llama-3-8b-instruct:extended": { - "max_tokens": 16000, + "max_tokens": 16384, "input_cost_per_token": 0.000000225, "output_cost_per_token": 0.00000225, "litellm_provider": "openrouter", "mode": "chat" }, "openrouter/meta-llama/llama-3-70b-instruct:nitro": { - "max_tokens": 8200, + "max_tokens": 8192, "input_cost_per_token": 0.0000009, "output_cost_per_token": 0.0000009, "litellm_provider": "openrouter", "mode": "chat" }, "openrouter/meta-llama/llama-3-70b-instruct": { - "max_tokens": 8200, + "max_tokens": 8192, "input_cost_per_token": 0.00000059, "output_cost_per_token": 0.00000079, "litellm_provider": "openrouter", @@ -1750,14 +1750,14 @@ "tool_use_system_prompt_tokens": 395 }, "openrouter/google/palm-2-chat-bison": { - "max_tokens": 8000, + "max_tokens": 25804, "input_cost_per_token": 0.0000005, "output_cost_per_token": 0.0000005, "litellm_provider": "openrouter", "mode": "chat" }, "openrouter/google/palm-2-codechat-bison": { - "max_tokens": 8000, + "max_tokens": 20070, "input_cost_per_token": 0.0000005, "output_cost_per_token": 0.0000005, "litellm_provider": "openrouter", From 54c57450ab67c482fa1609fe33cf92ecfbe4f516 Mon Sep 17 00:00:00 2001 From: Kade Heckel <51248168+kmheckel@users.noreply.github.com> Date: Thu, 9 May 2024 16:03:22 +0100 Subject: [PATCH 031/378] Update model_prices_and_context_window.json fixed typo with ollama/llama3 token cost (now set to 0) --- model_prices_and_context_window.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index d9dc82d54aa..a3a13ed810a 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -2753,8 +2753,8 @@ "max_tokens": 8192, "max_input_tokens": 8192, "max_output_tokens": 8192, - "input_cost_per_token": 0.00000010, - "output_cost_per_token": 0.00000010, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, "litellm_provider": "ollama", "mode": "chat" }, From 9bcd93178f56379492bc4befdea4f4305dc28e91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 22:42:27 +0000 Subject: [PATCH 032/378] build(deps): bump next from 14.1.0 to 14.1.1 in /ui/litellm-dashboard Bumps [next](https://github.com/vercel/next.js) from 14.1.0 to 14.1.1. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v14.1.0...v14.1.1) --- updated-dependencies: - dependency-name: next dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- ui/litellm-dashboard/package-lock.json | 88 +++++++++++++------------- ui/litellm-dashboard/package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/ui/litellm-dashboard/package-lock.json b/ui/litellm-dashboard/package-lock.json index 846189b27a7..80efdd2cfc6 100644 --- a/ui/litellm-dashboard/package-lock.json +++ b/ui/litellm-dashboard/package-lock.json @@ -17,7 +17,7 @@ "fs": "^0.0.1-security", "jsonwebtoken": "^9.0.2", "jwt-decode": "^4.0.0", - "next": "14.1.0", + "next": "14.1.1", "openai": "^4.28.0", "react": "^18", "react-copy-to-clipboard": "^5.1.0", @@ -412,9 +412,9 @@ } }, "node_modules/@next/env": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", - "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==" + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.1.tgz", + "integrity": "sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.1.0", @@ -426,9 +426,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", - "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.1.tgz", + "integrity": "sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==", "cpu": [ "arm64" ], @@ -441,9 +441,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", - "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.1.tgz", + "integrity": "sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==", "cpu": [ "x64" ], @@ -456,9 +456,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", - "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.1.tgz", + "integrity": "sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==", "cpu": [ "arm64" ], @@ -471,9 +471,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", - "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.1.tgz", + "integrity": "sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==", "cpu": [ "arm64" ], @@ -486,9 +486,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", - "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.1.tgz", + "integrity": "sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==", "cpu": [ "x64" ], @@ -501,9 +501,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", - "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.1.tgz", + "integrity": "sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==", "cpu": [ "x64" ], @@ -516,9 +516,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", - "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.1.tgz", + "integrity": "sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==", "cpu": [ "arm64" ], @@ -531,9 +531,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", - "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.1.tgz", + "integrity": "sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==", "cpu": [ "ia32" ], @@ -546,9 +546,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", - "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.1.tgz", + "integrity": "sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==", "cpu": [ "x64" ], @@ -4907,11 +4907,11 @@ "dev": true }, "node_modules/next": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", - "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/next/-/next-14.1.1.tgz", + "integrity": "sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==", "dependencies": { - "@next/env": "14.1.0", + "@next/env": "14.1.1", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -4926,15 +4926,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.1.0", - "@next/swc-darwin-x64": "14.1.0", - "@next/swc-linux-arm64-gnu": "14.1.0", - "@next/swc-linux-arm64-musl": "14.1.0", - "@next/swc-linux-x64-gnu": "14.1.0", - "@next/swc-linux-x64-musl": "14.1.0", - "@next/swc-win32-arm64-msvc": "14.1.0", - "@next/swc-win32-ia32-msvc": "14.1.0", - "@next/swc-win32-x64-msvc": "14.1.0" + "@next/swc-darwin-arm64": "14.1.1", + "@next/swc-darwin-x64": "14.1.1", + "@next/swc-linux-arm64-gnu": "14.1.1", + "@next/swc-linux-arm64-musl": "14.1.1", + "@next/swc-linux-x64-gnu": "14.1.1", + "@next/swc-linux-x64-musl": "14.1.1", + "@next/swc-win32-arm64-msvc": "14.1.1", + "@next/swc-win32-ia32-msvc": "14.1.1", + "@next/swc-win32-x64-msvc": "14.1.1" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/ui/litellm-dashboard/package.json b/ui/litellm-dashboard/package.json index 108d70d98a7..0fb9f1a53e2 100644 --- a/ui/litellm-dashboard/package.json +++ b/ui/litellm-dashboard/package.json @@ -18,7 +18,7 @@ "fs": "^0.0.1-security", "jsonwebtoken": "^9.0.2", "jwt-decode": "^4.0.0", - "next": "14.1.0", + "next": "14.1.1", "openai": "^4.28.0", "react": "^18", "react-copy-to-clipboard": "^5.1.0", From c45085b728ab2994db7cf0412a9aa076d1c11b77 Mon Sep 17 00:00:00 2001 From: Rajan Paneru Date: Fri, 10 May 2024 10:06:50 +0930 Subject: [PATCH 033/378] Based on the data-type using json The value of response_obj["choices"][0]["message"] is Message object and dict Added a conditional to use .json only iff it is Message Object --- litellm/integrations/langfuse.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index caf5437b242..140dced9d32 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -135,7 +135,9 @@ class LangFuseLogger: response_obj, litellm.ModelResponse ): input = prompt - output = response_obj["choices"][0]["message"].json() + output = response_obj["choices"][0]["message"] + if isinstance(output, litellm.Message): + output = output.json() elif response_obj is not None and isinstance( response_obj, litellm.TextCompletionResponse ): From c1a81d90a60951ad583446db1d6226f8cb814be7 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Wed, 24 Apr 2024 15:15:19 +0200 Subject: [PATCH 034/378] build(caching.py) - add disk cache object --- litellm/caching.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++ poetry.lock | 13 +++++++- pyproject.toml | 1 + 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/litellm/caching.py b/litellm/caching.py index 83cfe060b14..b9fc6b28f09 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -15,6 +15,7 @@ from openai._models import BaseModel as OpenAIObject from litellm._logging import verbose_logger from litellm.types.services import ServiceLoggerPayload, ServiceTypes import traceback +import diskcache as dc def print_verbose(print_statement): @@ -1914,6 +1915,79 @@ class Cache: await self.cache.disconnect() +class DiskCache(BaseCache): + def __init__(self, cache_dir: str = ".cache"): + # if users don't provider one, use the default litellm cache + self.disk_cache = dc.Cache(cache_dir) + + def set_cache(self, key, value, **kwargs): + print_verbose("DiskCache: set_cache") + if "ttl" in kwargs: + self.disk_cache.set(key, value, expire=kwargs["ttl"]) + else: + self.disk_cache.set(key, value) + + async def async_set_cache(self, key, value, **kwargs): + self.set_cache(key=key, value=value, **kwargs) + + async def async_set_cache_pipeline(self, cache_list, ttl=None): + for cache_key, cache_value in cache_list: + if ttl is not None: + self.set_cache(key=cache_key, value=cache_value, ttl=ttl) + else: + self.set_cache(key=cache_key, value=cache_value) + + def get_cache(self, key, **kwargs): + original_cached_response = self.disk_cache.get(key) + if original_cached_response: + try: + cached_response = json.loads(original_cached_response) + except: + cached_response = original_cached_response + return cached_response + return None + + def batch_get_cache(self, keys: list, **kwargs): + return_val = [] + for k in keys: + val = self.get_cache(key=k, **kwargs) + return_val.append(val) + return return_val + + def increment_cache(self, key, value: int, **kwargs) -> int: + # get the value + init_value = self.get_cache(key=key) or 0 + value = init_value + value + self.set_cache(key, value, **kwargs) + return value + + async def async_get_cache(self, key, **kwargs): + return self.get_cache(key=key, **kwargs) + + async def async_batch_get_cache(self, keys: list, **kwargs): + return_val = [] + for k in keys: + val = self.get_cache(key=k, **kwargs) + return_val.append(val) + return return_val + + async def async_increment(self, key, value: int, **kwargs) -> int: + # get the value + init_value = await self.async_get_cache(key=key) or 0 + value = init_value + value + await self.async_set_cache(key, value, **kwargs) + return value + + def flush_cache(self): + self.disk_cache.clear() + + async def disconnect(self): + pass + + def delete_cache(self, key): + self.disk_cache.pop(key) + + def enable_cache( type: Optional[Literal["local", "redis", "s3"]] = "local", host: Optional[str] = None, diff --git a/poetry.lock b/poetry.lock index f3f7d40d5b8..842dfe31087 100644 --- a/poetry.lock +++ b/poetry.lock @@ -605,6 +605,17 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "diskcache" +version = "5.6.3" +description = "Disk Cache -- Disk and file backed persistent cache." +optional = true +python-versions = ">=3" +files = [ + {file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"}, + {file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"}, +] + [[package]] name = "distro" version = "1.9.0" @@ -2674,4 +2685,4 @@ proxy = ["PyJWT", "apscheduler", "backoff", "cryptography", "fastapi", "fastapi- [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "ff38be297294f084a739ef869d41d3d80f09c80e1d05d2963073d49790f33f37" +content-hash = "9d2c78a508742a83a9dce1f3f55f8ef9cac8a453a863eaa91a179f031894be1b" diff --git a/pyproject.toml b/pyproject.toml index a9854cf692a..81e2e9abff9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ azure-identity = {version = "^1.15.0", optional = true} azure-keyvault-secrets = {version = "^4.8.0", optional = true} google-cloud-kms = {version = "^2.21.3", optional = true} resend = {version = "^0.8.0", optional = true} +diskcache = {version = "^5.6.3", optional = true} [tool.poetry.extras] proxy = [ From ac27f431a4396526ccce3586c0b23b4277873e85 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Wed, 24 Apr 2024 15:59:22 +0200 Subject: [PATCH 035/378] test(test_caching.py): add disk cache test when using completion --- litellm/tests/test_caching.py | 60 +++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 903ce69c771..42b175c72f4 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -875,6 +875,66 @@ async def test_redis_cache_acompletion_stream_bedrock(): print(e) raise e +def test_disk_cache_completion(): + litellm.set_verbose = False + + random_number = random.randint( + 1, 100000 + ) # add a random number to ensure it's always adding / reading from cache + messages = [ + {"role": "user", "content": f"write a one sentence poem about: {random_number}"} + ] + litellm.cache = Cache( + type="disk", + ) + print("test2 for Redis Caching - non streaming") + response1 = completion( + model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20 + ) + response2 = completion( + model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20 + ) + response3 = completion( + model="gpt-3.5-turbo", messages=messages, caching=True, temperature=0.5 + ) + + print("\nresponse 1", response1) + print("\nresponse 2", response2) + print("\nresponse 3", response3) + # print("\nresponse 4", response4) + litellm.cache = None + litellm.success_callback = [] + litellm._async_success_callback = [] + + """ + 1 & 2 should be exactly the same + 1 & 3 should be different, since input params are diff + 1 & 4 should be diff, since models are diff + """ + if ( + response1["choices"][0]["message"]["content"] + != response2["choices"][0]["message"]["content"] + ): # 1 and 2 should be the same + # 1&2 have the exact same input params. This MUST Be a CACHE HIT + print(f"response1: {response1}") + print(f"response2: {response2}") + pytest.fail(f"Error occurred:") + if ( + response1["choices"][0]["message"]["content"] + == response3["choices"][0]["message"]["content"] + ): + # if input params like seed, max_tokens are diff it should NOT be a cache hit + print(f"response1: {response1}") + print(f"response3: {response3}") + pytest.fail( + f"Response 1 == response 3. Same model, diff params shoudl not cache Error" + f" occurred:" + ) + + assert response1.id == response2.id + assert response1.created == response2.created + assert response1.choices[0].message.content == response2.choices[0].message.content + @pytest.mark.skip(reason="AWS Suspended Account") @pytest.mark.asyncio From 004877c7e5e7cbee43ea2095620c80249effc512 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 10:00:25 +0200 Subject: [PATCH 036/378] build(caching.py): add disk option for cache --- litellm/caching.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index b9fc6b28f09..63e2cd39a6a 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -1449,7 +1449,7 @@ class DualCache(BaseCache): class Cache: def __init__( self, - type: Optional[Literal["local", "redis", "redis-semantic", "s3"]] = "local", + type: Optional[Literal["local", "redis", "redis-semantic", "s3", "disk"]] = "local", host: Optional[str] = None, port: Optional[str] = None, password: Optional[str] = None, @@ -1498,7 +1498,7 @@ class Cache: Initializes the cache based on the given type. Args: - type (str, optional): The type of cache to initialize. Can be "local", "redis", "redis-semantic", or "s3". Defaults to "local". + type (str, optional): The type of cache to initialize. Can be "local", "redis", "redis-semantic", "s3" or "disk". Defaults to "local". host (str, optional): The host address for the Redis cache. Required if type is "redis". port (int, optional): The port number for the Redis cache. Required if type is "redis". password (str, optional): The password for the Redis cache. Required if type is "redis". @@ -1544,6 +1544,8 @@ class Cache: s3_path=s3_path, **kwargs, ) + elif type == "disk": + self.cache = DiskCache() if "cache" not in litellm.input_callback: litellm.input_callback.append("cache") if "cache" not in litellm.success_callback: @@ -1916,7 +1918,7 @@ class Cache: class DiskCache(BaseCache): - def __init__(self, cache_dir: str = ".cache"): + def __init__(self, cache_dir: str = ".litellm_cache"): # if users don't provider one, use the default litellm cache self.disk_cache = dc.Cache(cache_dir) @@ -1989,7 +1991,7 @@ class DiskCache(BaseCache): def enable_cache( - type: Optional[Literal["local", "redis", "s3"]] = "local", + type: Optional[Literal["local", "redis", "s3", "disk"]] = "local", host: Optional[str] = None, port: Optional[str] = None, password: Optional[str] = None, @@ -2018,7 +2020,7 @@ def enable_cache( Enable cache with the specified configuration. Args: - type (Optional[Literal["local", "redis"]]): The type of cache to enable. Defaults to "local". + type (Optional[Literal["local", "redis", "s3", "disk"]]): The type of cache to enable. Defaults to "local". host (Optional[str]): The host address of the cache server. Defaults to None. port (Optional[str]): The port number of the cache server. Defaults to None. password (Optional[str]): The password for the cache server. Defaults to None. @@ -2054,7 +2056,7 @@ def enable_cache( def update_cache( - type: Optional[Literal["local", "redis"]] = "local", + type: Optional[Literal["local", "redis", "s3", "disk"]] = "local", host: Optional[str] = None, port: Optional[str] = None, password: Optional[str] = None, @@ -2083,7 +2085,7 @@ def update_cache( Update the cache for LiteLLM. Args: - type (Optional[Literal["local", "redis"]]): The type of cache. Defaults to "local". + type (Optional[Literal["local", "redis", "s3", "disk"]]): The type of cache. Defaults to "local". host (Optional[str]): The host of the cache. Defaults to None. port (Optional[str]): The port of the cache. Defaults to None. password (Optional[str]): The password for the cache. Defaults to None. From 9b2dcb2807dbf6ead895ce1cc09f71e9c4fae98f Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 10:56:36 +0200 Subject: [PATCH 037/378] chore(pyproject.toml): add diskcache as extra --- poetry.lock | 3 ++- pyproject.toml | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 842dfe31087..0c1b26a9ae7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2679,10 +2679,11 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] +extra-cache = ["diskcache"] extra-proxy = ["azure-identity", "azure-keyvault-secrets", "google-cloud-kms", "prisma", "resend"] proxy = ["PyJWT", "apscheduler", "backoff", "cryptography", "fastapi", "fastapi-sso", "gunicorn", "orjson", "python-multipart", "pyyaml", "rq", "uvicorn"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "9d2c78a508742a83a9dce1f3f55f8ef9cac8a453a863eaa91a179f031894be1b" +content-hash = "a21a41c1f683d7cb9a07fa76ee396b7da95cebf8c82d44de92e318916436a506" diff --git a/pyproject.toml b/pyproject.toml index 81e2e9abff9..486a04f3c7a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,6 +66,9 @@ extra_proxy = [ "resend" ] +extra_cache = [ + "diskcache" +] [tool.poetry.scripts] litellm = 'litellm:run_server' From 7ee07cd961fe7913f110cc3b7f46818eb48bd3c8 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 10:57:24 +0200 Subject: [PATCH 038/378] test(test_caching.py): use mock_response in disk cache test --- litellm/tests/test_caching.py | 40 ++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 42b175c72f4..2f0f1dbfe6d 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -599,7 +599,10 @@ def test_redis_cache_completion(): ) print("test2 for Redis Caching - non streaming") response1 = completion( - model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20 + model="gpt-3.5-turbo", + messages=messages, + caching=True, + max_tokens=20, ) response2 = completion( model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20 @@ -653,7 +656,6 @@ def test_redis_cache_completion(): assert response1.created == response2.created assert response1.choices[0].message.content == response2.choices[0].message.content - # test_redis_cache_completion() @@ -887,15 +889,32 @@ def test_disk_cache_completion(): litellm.cache = Cache( type="disk", ) - print("test2 for Redis Caching - non streaming") + response1 = completion( - model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20 + model="gpt-3.5-turbo", + messages=messages, + caching=True, + max_tokens=20, + mock_response="This number is so great!", ) + # response2 is mocked to a different response from response1, + # but the completion from the cache should be used instead of the mock + # response since the input is the same as response1 response2 = completion( - model="gpt-3.5-turbo", messages=messages, caching=True, max_tokens=20 + model="gpt-3.5-turbo", + messages=messages, + caching=True, + max_tokens=20, + mock_response="This number is awful!", ) + # Since the parameters are not the same as response1, response3 should actually + # be the mock response response3 = completion( - model="gpt-3.5-turbo", messages=messages, caching=True, temperature=0.5 + model="gpt-3.5-turbo", + messages=messages, + caching=True, + temperature=0.5, + mock_response="This number is awful!", ) print("\nresponse 1", response1) @@ -906,11 +925,8 @@ def test_disk_cache_completion(): litellm.success_callback = [] litellm._async_success_callback = [] - """ - 1 & 2 should be exactly the same - 1 & 3 should be different, since input params are diff - 1 & 4 should be diff, since models are diff - """ + # 1 & 2 should be exactly the same + # 1 & 3 should be different, since input params are diff if ( response1["choices"][0]["message"]["content"] != response2["choices"][0]["message"]["content"] @@ -923,7 +939,7 @@ def test_disk_cache_completion(): response1["choices"][0]["message"]["content"] == response3["choices"][0]["message"]["content"] ): - # if input params like seed, max_tokens are diff it should NOT be a cache hit + # if input params like max_tokens, temperature are diff it should NOT be a cache hit print(f"response1: {response1}") print(f"response3: {response3}") pytest.fail( From c1ba4ec0780c47c950bf4baacdc0c880aad91b46 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 11:19:14 +0200 Subject: [PATCH 039/378] chore: add diskcache as extra dependency --- litellm/caching.py | 2 +- poetry.lock | 4 ++-- pyproject.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index 63e2cd39a6a..6906a1a98af 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -15,7 +15,6 @@ from openai._models import BaseModel as OpenAIObject from litellm._logging import verbose_logger from litellm.types.services import ServiceLoggerPayload, ServiceTypes import traceback -import diskcache as dc def print_verbose(print_statement): @@ -1919,6 +1918,7 @@ class Cache: class DiskCache(BaseCache): def __init__(self, cache_dir: str = ".litellm_cache"): + import diskcache as dc # if users don't provider one, use the default litellm cache self.disk_cache = dc.Cache(cache_dir) diff --git a/poetry.lock b/poetry.lock index 0c1b26a9ae7..2911806cb3c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2679,11 +2679,11 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -extra-cache = ["diskcache"] +disk-caching = ["diskcache"] extra-proxy = ["azure-identity", "azure-keyvault-secrets", "google-cloud-kms", "prisma", "resend"] proxy = ["PyJWT", "apscheduler", "backoff", "cryptography", "fastapi", "fastapi-sso", "gunicorn", "orjson", "python-multipart", "pyyaml", "rq", "uvicorn"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "a21a41c1f683d7cb9a07fa76ee396b7da95cebf8c82d44de92e318916436a506" +content-hash = "aa6283846b24f5703626c2de10459254166551f469c34e75b229adafb6985eba" diff --git a/pyproject.toml b/pyproject.toml index 486a04f3c7a..ca01141d2c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,7 +66,7 @@ extra_proxy = [ "resend" ] -extra_cache = [ +disk_caching = [ "diskcache" ] From 170fd11c8208f57739da1410d546bd6a9cb996ff Mon Sep 17 00:00:00 2001 From: Simon Sanchez Viloria Date: Fri, 10 May 2024 11:53:33 +0200 Subject: [PATCH 040/378] (fix) watsonx.py: Fixed linting errors and make sure stream chunk always return usage --- litellm/llms/watsonx.py | 365 ++++++++++++++++++++++++++++++---------- litellm/utils.py | 6 +- 2 files changed, 279 insertions(+), 92 deletions(-) diff --git a/litellm/llms/watsonx.py b/litellm/llms/watsonx.py index 082cdb3255b..ad4aff4b607 100644 --- a/litellm/llms/watsonx.py +++ b/litellm/llms/watsonx.py @@ -1,12 +1,25 @@ from enum import Enum import json, types, time # noqa: E401 from contextlib import asynccontextmanager, contextmanager -from typing import AsyncGenerator, Callable, Dict, Generator, Optional, Any, Union, List +from typing import ( + Callable, + Dict, + Generator, + AsyncGenerator, + Iterator, + AsyncIterator, + Optional, + Any, + Union, + List, + ContextManager, + AsyncContextManager, +) import httpx # type: ignore import requests # type: ignore import litellm -from litellm.utils import Logging, ModelResponse, Usage, get_secret +from litellm.utils import ModelResponse, Usage, get_secret from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler from .base import BaseLLM @@ -189,6 +202,7 @@ class WatsonXAIEndpoint(str, Enum): ) EMBEDDINGS = "/ml/v1/text/embeddings" PROMPTS = "/ml/v1/prompts" + AVAILABLE_MODELS = "/ml/v1/foundation_model_specs" class IBMWatsonXAI(BaseLLM): @@ -378,12 +392,12 @@ class IBMWatsonXAI(BaseLLM): model_response: ModelResponse, print_verbose: Callable, encoding, - logging_obj: Logging, - optional_params: Optional[dict] = None, - acompletion: bool = None, - litellm_params: Optional[dict] = None, + logging_obj, + optional_params=None, + acompletion=None, + litellm_params=None, logger_fn=None, - timeout: Optional[float] = None, + timeout=None, ): """ Send a text generation request to the IBM Watsonx.ai API. @@ -403,8 +417,6 @@ class IBMWatsonXAI(BaseLLM): prompt = convert_messages_to_prompt( model, messages, provider, custom_prompt_dict ) - - manage_response = self._make_response_manager(async_=(acompletion is True), logging_obj=logging_obj) def process_text_gen_response(json_resp: dict) -> ModelResponse: if "results" not in json_resp: @@ -419,62 +431,72 @@ class IBMWatsonXAI(BaseLLM): model_response["finish_reason"] = json_resp["results"][0]["stop_reason"] model_response["created"] = int(time.time()) model_response["model"] = model - setattr( - model_response, - "usage", - Usage( - prompt_tokens=prompt_tokens, - completion_tokens=completion_tokens, - total_tokens=prompt_tokens + completion_tokens, - ), + usage = Usage( + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + total_tokens=prompt_tokens + completion_tokens, ) + setattr(model_response, "usage", usage) return model_response + def process_stream_response( + stream_resp: Union[Iterator[str], AsyncIterator], + ) -> litellm.CustomStreamWrapper: + streamwrapper = litellm.CustomStreamWrapper( + stream_resp, + model=model, + custom_llm_provider="watsonx", + logging_obj=logging_obj, + ) + return streamwrapper + + # create the function to manage the request to watsonx.ai + # manage_request = self._make_request_manager( + # async_=(acompletion is True), logging_obj=logging_obj + # ) + self.request_manager = RequestManager(logging_obj) + def handle_text_request(request_params: dict) -> ModelResponse: - with manage_response( - request_params, input=prompt, timeout=timeout, + with self.request_manager.request( + request_params, + input=prompt, + timeout=timeout, ) as resp: json_resp = resp.json() return process_text_gen_response(json_resp) async def handle_text_request_async(request_params: dict) -> ModelResponse: - async with manage_response( - request_params, input=prompt, timeout=timeout, + async with self.request_manager.async_request( + request_params, + input=prompt, + timeout=timeout, ) as resp: json_resp = resp.json() return process_text_gen_response(json_resp) - def handle_stream_request( - request_params: dict, - ) -> litellm.CustomStreamWrapper: + def handle_stream_request(request_params: dict) -> litellm.CustomStreamWrapper: # stream the response - generated chunks will be handled # by litellm.utils.CustomStreamWrapper.handle_watsonx_stream - with manage_response( - request_params, stream=True, input=prompt, timeout=timeout, + with self.request_manager.request( + request_params, + stream=True, + input=prompt, + timeout=timeout, ) as resp: - streamwrapper = litellm.CustomStreamWrapper( - resp.iter_lines(), - model=model, - custom_llm_provider="watsonx", - logging_obj=logging_obj, - ) + streamwrapper = process_stream_response(resp.iter_lines()) return streamwrapper - async def handle_stream_request_async( - request_params: dict, - ) -> litellm.CustomStreamWrapper: + async def handle_stream_request_async(request_params: dict) -> litellm.CustomStreamWrapper: # stream the response - generated chunks will be handled # by litellm.utils.CustomStreamWrapper.handle_watsonx_stream - async with manage_response( - request_params, stream=True, input=prompt, timeout=timeout, + async with self.request_manager.async_request( + request_params, + stream=True, + input=prompt, + timeout=timeout, ) as resp: - streamwrapper = litellm.CustomStreamWrapper( - resp.aiter_lines(), - model=model, - custom_llm_provider="watsonx", - logging_obj=logging_obj, - ) + streamwrapper = process_stream_response(resp.aiter_lines()) return streamwrapper try: @@ -486,13 +508,13 @@ class IBMWatsonXAI(BaseLLM): optional_params=optional_params, print_verbose=print_verbose, ) - if stream and acompletion: + if stream and (acompletion is True): # stream and async text generation return handle_stream_request_async(req_params) elif stream: # streaming text generation return handle_stream_request(req_params) - elif acompletion: + elif (acompletion is True): # async text generation return handle_text_request_async(req_params) else: @@ -554,43 +576,48 @@ class IBMWatsonXAI(BaseLLM): "json": payload, "params": request_params, } - manage_response = self._make_response_manager(async_=(aembedding is True), logging_obj=logging_obj) - + # manage_request = self._make_request_manager( + # async_=(aembedding is True), logging_obj=logging_obj + # ) + request_manager = RequestManager(logging_obj) + def process_embedding_response(json_resp: dict) -> ModelResponse: results = json_resp.get("results", []) embedding_response = [] for idx, result in enumerate(results): embedding_response.append( - {"object": "embedding", "index": idx, "embedding": result["embedding"]} + { + "object": "embedding", + "index": idx, + "embedding": result["embedding"], + } ) model_response["object"] = "list" model_response["data"] = embedding_response model_response["model"] = model input_tokens = json_resp.get("input_token_count", 0) model_response.usage = Usage( - prompt_tokens=input_tokens, completion_tokens=0, total_tokens=input_tokens + prompt_tokens=input_tokens, + completion_tokens=0, + total_tokens=input_tokens, ) return model_response - - def handle_embedding_request(request_params: dict) -> ModelResponse: - with manage_response( - request_params, input=input - ) as resp: + + def handle_embedding(request_params: dict) -> ModelResponse: + with request_manager.request(request_params, input=input) as resp: json_resp = resp.json() return process_embedding_response(json_resp) - - async def handle_embedding_request_async(request_params: dict) -> ModelResponse: - async with manage_response( - request_params, input=input - ) as resp: + + async def handle_aembedding(request_params: dict) -> ModelResponse: + async with request_manager.async_request(request_params, input=input) as resp: json_resp = resp.json() return process_embedding_response(json_resp) - + try: - if aembedding: - return handle_embedding_request_async(req_params) + if aembedding is True: + return handle_embedding(req_params) else: - return handle_embedding_request(req_params) + return handle_aembedding(req_params) except WatsonXAIError as e: raise e except Exception as e: @@ -616,64 +643,88 @@ class IBMWatsonXAI(BaseLLM): iam_access_token = json_data["access_token"] self.token = iam_access_token return iam_access_token - - def _make_response_manager( - self, - async_: bool, - logging_obj: Logging - ) -> Callable[..., Generator[Union[requests.Response, httpx.Response], None, None]]: + + def get_available_models(self, *, ids_only: bool = True, **params): + api_params = self._get_api_params(params) + headers = { + "Authorization": f"Bearer {api_params['token']}", + "Content-Type": "application/json", + "Accept": "application/json", + } + request_params = dict(version=api_params["api_version"]) + url = api_params["url"].rstrip("/") + WatsonXAIEndpoint.AVAILABLE_MODELS + req_params = dict(method="GET", url=url, headers=headers, params=request_params) + # manage_request = self._make_request_manager(async_=False, logging_obj=None) + with RequestManager(logging_obj=None).request(req_params) as resp: + json_resp = resp.json() + if not ids_only: + return json_resp + return [res["model_id"] for res in json_resp["resources"]] + + def _make_request_manager( + self, async_: bool, logging_obj=None + ) -> Callable[ + ..., + Union[ContextManager[requests.Response], AsyncContextManager[httpx.Response]], + ]: """ Returns a context manager that manages the response from the request. if async_ is True, returns an async context manager, otherwise returns a regular context manager. Usage: ```python - manage_response = self._make_response_manager(async_=True, logging_obj=logging_obj) - async with manage_response(request_params) as resp: + manage_request = self._make_request_manager(async_=True, logging_obj=logging_obj) + async with manage_request(request_params) as resp: ... # or - manage_response = self._make_response_manager(async_=False, logging_obj=logging_obj) - with manage_response(request_params) as resp: + manage_request = self._make_request_manager(async_=False, logging_obj=logging_obj) + with manage_request(request_params) as resp: ... ``` """ def pre_call( request_params: dict, - input:Optional[Any]=None, + input: Optional[Any] = None, ): + if logging_obj is None: + return request_str = ( f"response = {'await ' if async_ else ''}{request_params['method']}(\n" f"\turl={request_params['url']},\n" - f"\tjson={request_params['json']},\n" + f"\tjson={request_params.get('json')},\n" f")" ) logging_obj.pre_call( input=input, api_key=request_params["headers"].get("Authorization"), additional_args={ - "complete_input_dict": request_params["json"], + "complete_input_dict": request_params.get("json"), "request_str": request_str, }, ) def post_call(resp, request_params): + if logging_obj is None: + return logging_obj.post_call( input=input, api_key=request_params["headers"].get("Authorization"), original_response=json.dumps(resp.json()), additional_args={ "status_code": resp.status_code, - "complete_input_dict": request_params.get("data", request_params.get("json")), + "complete_input_dict": request_params.get( + "data", request_params.get("json") + ), }, ) - + @contextmanager - def _manage_response( + def _manage_request( request_params: dict, stream: bool = False, input: Optional[Any] = None, - timeout: float = None, + timeout=None, ) -> Generator[requests.Response, None, None]: """ Returns a context manager that yields the response from the request. @@ -685,20 +736,23 @@ class IBMWatsonXAI(BaseLLM): request_params["stream"] = stream try: resp = requests.request(**request_params) - resp.raise_for_status() + if not resp.ok: + raise WatsonXAIError( + status_code=resp.status_code, + message=f"Error {resp.status_code} ({resp.reason}): {resp.text}", + ) yield resp except Exception as e: raise WatsonXAIError(status_code=500, message=str(e)) if not stream: post_call(resp, request_params) - - + @asynccontextmanager - async def _manage_response_async( + async def _manage_request_async( request_params: dict, stream: bool = False, input: Optional[Any] = None, - timeout: float = None, + timeout=None, ) -> AsyncGenerator[httpx.Response, None]: pre_call(request_params, input) if timeout: @@ -708,16 +762,23 @@ class IBMWatsonXAI(BaseLLM): try: # async with AsyncHTTPHandler(timeout=timeout) as client: self.async_handler = AsyncHTTPHandler( - timeout=httpx.Timeout(timeout=request_params.pop("timeout", 600.0), connect=5.0), + timeout=httpx.Timeout( + timeout=request_params.pop("timeout", 600.0), connect=5.0 + ), ) # async_handler.client.verify = False if "json" in request_params: - request_params['data'] = json.dumps(request_params.pop("json", {})) + request_params["data"] = json.dumps(request_params.pop("json", {})) method = request_params.pop("method") if method.upper() == "POST": resp = await self.async_handler.post(**request_params) else: resp = await self.async_handler.get(**request_params) + if resp.status_code not in [200, 201]: + raise WatsonXAIError( + status_code=resp.status_code, + message=f"Error {resp.status_code} ({resp.reason}): {resp.text}", + ) yield resp # await async_handler.close() except Exception as e: @@ -726,6 +787,132 @@ class IBMWatsonXAI(BaseLLM): post_call(resp, request_params) if async_: - return _manage_response_async + return _manage_request_async else: - return _manage_response + return _manage_request + +class RequestManager: + """ + Returns a context manager that manages the response from the request. + if async_ is True, returns an async context manager, otherwise returns a regular context manager. + + Usage: + ```python + request_params = dict(method="POST", url="https://api.example.com", headers={"Authorization" : "Bearer token"}, json={"key": "value"}) + request_manager = RequestManager(logging_obj=logging_obj) + async with request_manager.request(request_params) as resp: + ... + # or + with request_manager.async_request(request_params) as resp: + ... + ``` + """ + + def __init__(self, logging_obj=None): + self.logging_obj = logging_obj + + def pre_call( + self, + request_params: dict, + input: Optional[Any] = None, + ): + if self.logging_obj is None: + return + request_str = ( + f"response = {request_params['method']}(\n" + f"\turl={request_params['url']},\n" + f"\tjson={request_params.get('json')},\n" + f")" + ) + self.logging_obj.pre_call( + input=input, + api_key=request_params["headers"].get("Authorization"), + additional_args={ + "complete_input_dict": request_params.get("json"), + "request_str": request_str, + }, + ) + + def post_call(self, resp, request_params): + if self.logging_obj is None: + return + self.logging_obj.post_call( + input=input, + api_key=request_params["headers"].get("Authorization"), + original_response=json.dumps(resp.json()), + additional_args={ + "status_code": resp.status_code, + "complete_input_dict": request_params.get( + "data", request_params.get("json") + ), + }, + ) + + @contextmanager + def request( + self, + request_params: dict, + stream: bool = False, + input: Optional[Any] = None, + timeout=None, + ) -> Generator[requests.Response, None, None]: + """ + Returns a context manager that yields the response from the request. + """ + self.pre_call(request_params, input) + if timeout: + request_params["timeout"] = timeout + if stream: + request_params["stream"] = stream + try: + resp = requests.request(**request_params) + if not resp.ok: + raise WatsonXAIError( + status_code=resp.status_code, + message=f"Error {resp.status_code} ({resp.reason}): {resp.text}", + ) + yield resp + except Exception as e: + raise WatsonXAIError(status_code=500, message=str(e)) + if not stream: + self.post_call(resp, request_params) + + @asynccontextmanager + async def async_request( + self, + request_params: dict, + stream: bool = False, + input: Optional[Any] = None, + timeout=None, + ) -> AsyncGenerator[httpx.Response, None]: + self.pre_call(request_params, input) + if timeout: + request_params["timeout"] = timeout + if stream: + request_params["stream"] = stream + try: + # async with AsyncHTTPHandler(timeout=timeout) as client: + self.async_handler = AsyncHTTPHandler( + timeout=httpx.Timeout( + timeout=request_params.pop("timeout", 600.0), connect=5.0 + ), + ) + # async_handler.client.verify = False + if "json" in request_params: + request_params["data"] = json.dumps(request_params.pop("json", {})) + method = request_params.pop("method") + if method.upper() == "POST": + resp = await self.async_handler.post(**request_params) + else: + resp = await self.async_handler.get(**request_params) + if resp.status_code not in [200, 201]: + raise WatsonXAIError( + status_code=resp.status_code, + message=f"Error {resp.status_code} ({resp.reason}): {resp.text}", + ) + yield resp + # await async_handler.close() + except Exception as e: + raise WatsonXAIError(status_code=500, message=str(e)) + if not stream: + self.post_call(resp, request_params) \ No newline at end of file diff --git a/litellm/utils.py b/litellm/utils.py index d1af1b44a7b..3d1b0c1a709 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -10285,7 +10285,7 @@ class CustomStreamWrapper: response = chunk.replace("data: ", "").strip() parsed_response = json.loads(response) else: - return {"text": "", "is_finished": False} + return {"text": "", "is_finished": False, "prompt_tokens": 0, "completion_tokens": 0} else: print_verbose(f"chunk: {chunk} (Type: {type(chunk)})") raise ValueError( @@ -10300,8 +10300,8 @@ class CustomStreamWrapper: "text": text, "is_finished": is_finished, "finish_reason": finish_reason, - "prompt_tokens": results[0].get("input_token_count", None), - "completion_tokens": results[0].get("generated_token_count", None), + "prompt_tokens": results[0].get("input_token_count", 0), + "completion_tokens": results[0].get("generated_token_count", 0), } return {"text": "", "is_finished": False} except Exception as e: From d3d82827edbe9c5c3840795f1385c915629b957d Mon Sep 17 00:00:00 2001 From: Simon Sanchez Viloria Date: Fri, 10 May 2024 11:55:58 +0200 Subject: [PATCH 041/378] (test) Add tests for WatsonX completion/acompletion streaming --- litellm/tests/test_completion.py | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 32b65faea5f..fa3e669f019 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -3089,6 +3089,24 @@ def test_completion_watsonx(): except Exception as e: pytest.fail(f"Error occurred: {e}") +def test_completion_stream_watsonx(): + litellm.set_verbose = True + model_name = "watsonx/ibm/granite-13b-chat-v2" + try: + response = completion( + model=model_name, + messages=messages, + stop=["stop"], + max_tokens=20, + stream=True + ) + for chunk in response: + print(chunk) + except litellm.APIError as e: + pass + except Exception as e: + pytest.fail(f"Error occurred: {e}") + @pytest.mark.parametrize( "provider, model, project, region_name, token", @@ -3153,6 +3171,25 @@ async def test_acompletion_watsonx(): except Exception as e: pytest.fail(f"Error occurred: {e}") +@pytest.mark.asyncio +async def test_acompletion_stream_watsonx(): + litellm.set_verbose = True + model_name = "watsonx/ibm/granite-13b-chat-v2" + print("testing watsonx") + try: + response = await litellm.acompletion( + model=model_name, + messages=messages, + temperature=0.2, + max_tokens=80, + stream=True + ) + # Add any assertions here to check the response + async for chunk in response: + print(chunk) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + # test_completion_palm_stream() From 79c3d39d670d3e7d2012bafc05d9dc8cec44eea0 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 12:04:54 +0200 Subject: [PATCH 042/378] build(caching.py): move diskcache import inside class and add cache_dir argument to Cache --- litellm/caching.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/litellm/caching.py b/litellm/caching.py index 6906a1a98af..8aec7efdc94 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -1491,6 +1491,7 @@ class Cache: redis_semantic_cache_use_async=False, redis_semantic_cache_embedding_model="text-embedding-ada-002", redis_flush_size=None, + disk_cache_dir=None, **kwargs, ): """ @@ -1544,7 +1545,7 @@ class Cache: **kwargs, ) elif type == "disk": - self.cache = DiskCache() + self.cache = DiskCache(disk_cache_dir=disk_cache_dir) if "cache" not in litellm.input_callback: litellm.input_callback.append("cache") if "cache" not in litellm.success_callback: @@ -1917,10 +1918,14 @@ class Cache: class DiskCache(BaseCache): - def __init__(self, cache_dir: str = ".litellm_cache"): + def __init__(self, disk_cache_dir: Optional[str] = None): import diskcache as dc + # if users don't provider one, use the default litellm cache - self.disk_cache = dc.Cache(cache_dir) + if disk_cache_dir is None: + self.disk_cache = dc.Cache(".litellm_cache") + else: + self.disk_cache = dc.Cache(disk_cache_dir) def set_cache(self, key, value, **kwargs): print_verbose("DiskCache: set_cache") From 9c1d312fddfc9f19470af2c359200914b33efe54 Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 12:17:03 +0200 Subject: [PATCH 043/378] docs: add disk cache doc and update cache arguments --- .../caching/{redis_cache.md => all_caches.md} | 70 ++++++++++++++----- docs/my-website/docs/caching/local_caching.md | 2 +- docs/my-website/sidebars.js | 2 +- 3 files changed, 56 insertions(+), 18 deletions(-) rename docs/my-website/docs/caching/{redis_cache.md => all_caches.md} (82%) diff --git a/docs/my-website/docs/caching/redis_cache.md b/docs/my-website/docs/caching/all_caches.md similarity index 82% rename from docs/my-website/docs/caching/redis_cache.md rename to docs/my-website/docs/caching/all_caches.md index b00a118c124..8f4196856ec 100644 --- a/docs/my-website/docs/caching/redis_cache.md +++ b/docs/my-website/docs/caching/all_caches.md @@ -1,7 +1,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Caching - In-Memory, Redis, s3, Redis Semantic Cache +# Caching - In-Memory, Redis, s3, Redis Semantic Cache, Disk [**See Code**](https://github.com/BerriAI/litellm/blob/main/litellm/caching.py) @@ -11,7 +11,7 @@ Need to use Caching on LiteLLM Proxy Server? Doc here: [Caching Proxy Server](ht ::: -## Initialize Cache - In Memory, Redis, s3 Bucket, Redis Semantic Cache +## Initialize Cache - In Memory, Redis, s3 Bucket, Redis Semantic, Disk Cache @@ -159,7 +159,7 @@ litellm.cache = Cache() # Make completion calls response1 = completion( model="gpt-3.5-turbo", - messages=[{"role": "user", "content": "Tell me a joke."}] + messages=[{"role": "user", "content": "Tell me a joke."}], caching=True ) response2 = completion( @@ -174,6 +174,33 @@ response2 = completion( + + +### Quick Start + +```python +import litellm +from litellm import completion +from litellm.caching import Cache +litellm.cache = Cache(type="disk") + +# Make completion calls +response1 = completion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "Tell me a joke."}], + caching=True +) +response2 = completion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "Tell me a joke."}], + caching=True +) + +# response1 == response2, response 1 is cached + +``` + + @@ -191,13 +218,13 @@ Advanced Params ```python litellm.enable_cache( - type: Optional[Literal["local", "redis"]] = "local", + type: Optional[Literal["local", "redis", "s3", "disk"]] = "local", host: Optional[str] = None, port: Optional[str] = None, password: Optional[str] = None, supported_call_types: Optional[ - List[Literal["completion", "acompletion", "embedding", "aembedding"]] - ] = ["completion", "acompletion", "embedding", "aembedding"], + List[Literal["completion", "acompletion", "embedding", "aembedding", "atranscription", "transcription"]] + ] = ["completion", "acompletion", "embedding", "aembedding", "atranscription", "transcription"], **kwargs, ) ``` @@ -215,13 +242,13 @@ Update the Cache params ```python litellm.update_cache( - type: Optional[Literal["local", "redis"]] = "local", + type: Optional[Literal["local", "redis", "s3", "disk"]] = "local", host: Optional[str] = None, port: Optional[str] = None, password: Optional[str] = None, supported_call_types: Optional[ - List[Literal["completion", "acompletion", "embedding", "aembedding"]] - ] = ["completion", "acompletion", "embedding", "aembedding"], + List[Literal["completion", "acompletion", "embedding", "aembedding", "atranscription", "transcription"]] + ] = ["completion", "acompletion", "embedding", "aembedding", "atranscription", "transcription"], **kwargs, ) ``` @@ -276,22 +303,29 @@ cache.get_cache = get_cache ```python def __init__( self, - type: Optional[Literal["local", "redis", "s3"]] = "local", + type: Optional[Literal["local", "redis", "redis-semantic", "s3", "disk"]] = "local", supported_call_types: Optional[ - List[Literal["completion", "acompletion", "embedding", "aembedding"]] - ] = ["completion", "acompletion", "embedding", "aembedding"], # A list of litellm call types to cache for. Defaults to caching for all litellm call types. - + List[Literal["completion", "acompletion", "embedding", "aembedding", "atranscription", "transcription"]] + ] = ["completion", "acompletion", "embedding", "aembedding", "atranscription", "transcription"], + ttl: Optional[float] = None, + default_in_memory_ttl: Optional[float] = None, + # redis cache params host: Optional[str] = None, port: Optional[str] = None, password: Optional[str] = None, - + namespace: Optional[str] = None, + default_in_redis_ttl: Optional[float] = None, + similarity_threshold: Optional[float] = None, + redis_semantic_cache_use_async=False, + redis_semantic_cache_embedding_model="text-embedding-ada-002", + redis_flush_size=None, # s3 Bucket, boto3 configuration s3_bucket_name: Optional[str] = None, s3_region_name: Optional[str] = None, s3_api_version: Optional[str] = None, - s3_path: Optional[str] = None, # if you wish to save to a spefic path + s3_path: Optional[str] = None, # if you wish to save to a specific path s3_use_ssl: Optional[bool] = True, s3_verify: Optional[Union[bool, str]] = None, s3_endpoint_url: Optional[str] = None, @@ -299,7 +333,11 @@ def __init__( s3_aws_secret_access_key: Optional[str] = None, s3_aws_session_token: Optional[str] = None, s3_config: Optional[Any] = None, - **kwargs, + + # disk cache params + disk_cache_dir=None, + + **kwargs ): ``` diff --git a/docs/my-website/docs/caching/local_caching.md b/docs/my-website/docs/caching/local_caching.md index d0e26e4bf97..81c4edcb82e 100644 --- a/docs/my-website/docs/caching/local_caching.md +++ b/docs/my-website/docs/caching/local_caching.md @@ -40,7 +40,7 @@ cache = Cache() cache.add_cache(cache_key="test-key", result="1234") -cache.get_cache(cache_key="test-key) +cache.get_cache(cache_key="test-key") ``` ## Caching with Streaming diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 3c968ea57fd..82b5cfa0bc9 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -186,7 +186,7 @@ const sidebars = { `observability/telemetry`, ], }, - "caching/redis_cache", + "caching/all_caches", { type: "category", label: "Tutorials", From c0c244006f53b7b21f2b95d3470e8a2c3400100a Mon Sep 17 00:00:00 2001 From: Antonio Loison Date: Fri, 10 May 2024 12:34:05 +0200 Subject: [PATCH 044/378] deps: remove diskcache from dependencies and add install in docs --- docs/my-website/docs/caching/all_caches.md | 10 ++++++++++ poetry.lock | 14 +------------- pyproject.toml | 5 ----- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/docs/my-website/docs/caching/all_caches.md b/docs/my-website/docs/caching/all_caches.md index 8f4196856ec..eb309f9b8b8 100644 --- a/docs/my-website/docs/caching/all_caches.md +++ b/docs/my-website/docs/caching/all_caches.md @@ -178,6 +178,14 @@ response2 = completion( ### Quick Start +Install diskcache: + +```shell +pip install diskcache +``` + +Then you can use the disk cache as follows. + ```python import litellm from litellm import completion @@ -200,6 +208,8 @@ response2 = completion( ``` +If you run the code two times, response1 will use the cache from the first run that was stored in a cache file. + diff --git a/poetry.lock b/poetry.lock index 2911806cb3c..f3f7d40d5b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -605,17 +605,6 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] -[[package]] -name = "diskcache" -version = "5.6.3" -description = "Disk Cache -- Disk and file backed persistent cache." -optional = true -python-versions = ">=3" -files = [ - {file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"}, - {file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"}, -] - [[package]] name = "distro" version = "1.9.0" @@ -2679,11 +2668,10 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -disk-caching = ["diskcache"] extra-proxy = ["azure-identity", "azure-keyvault-secrets", "google-cloud-kms", "prisma", "resend"] proxy = ["PyJWT", "apscheduler", "backoff", "cryptography", "fastapi", "fastapi-sso", "gunicorn", "orjson", "python-multipart", "pyyaml", "rq", "uvicorn"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "aa6283846b24f5703626c2de10459254166551f469c34e75b229adafb6985eba" +content-hash = "ff38be297294f084a739ef869d41d3d80f09c80e1d05d2963073d49790f33f37" diff --git a/pyproject.toml b/pyproject.toml index ca01141d2c5..ecd5e97bc6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,6 @@ azure-identity = {version = "^1.15.0", optional = true} azure-keyvault-secrets = {version = "^4.8.0", optional = true} google-cloud-kms = {version = "^2.21.3", optional = true} resend = {version = "^0.8.0", optional = true} -diskcache = {version = "^5.6.3", optional = true} [tool.poetry.extras] proxy = [ @@ -66,10 +65,6 @@ extra_proxy = [ "resend" ] -disk_caching = [ - "diskcache" -] - [tool.poetry.scripts] litellm = 'litellm:run_server' From 8eb842dcf584c9cf6ff9d7675899fb84f39e35e7 Mon Sep 17 00:00:00 2001 From: Rajan Paneru Date: Fri, 10 May 2024 22:04:44 +0930 Subject: [PATCH 045/378] revered the patch so that the fix can be applied in the main place --- litellm/integrations/langfuse.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index 140dced9d32..caf5437b242 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -135,9 +135,7 @@ class LangFuseLogger: response_obj, litellm.ModelResponse ): input = prompt - output = response_obj["choices"][0]["message"] - if isinstance(output, litellm.Message): - output = output.json() + output = response_obj["choices"][0]["message"].json() elif response_obj is not None and isinstance( response_obj, litellm.TextCompletionResponse ): From 65b07bcb8c737152f26afa6b51cb3919a05007c3 Mon Sep 17 00:00:00 2001 From: Rajan Paneru Date: Fri, 10 May 2024 22:12:32 +0930 Subject: [PATCH 046/378] Preserving the Pydantic Message Object Following statement replaces the Pydantic Message Object and initialize it with the dict model_response["choices"][0]["message"] = response_json["message"] We need to make sure message is always litellm.Message object As a fix, based on the code of ollama.py file, i am updating just the content intead of entire object for both sync and async functions --- litellm/llms/ollama_chat.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/llms/ollama_chat.py b/litellm/llms/ollama_chat.py index 866761905f5..d1ff4953fa2 100644 --- a/litellm/llms/ollama_chat.py +++ b/litellm/llms/ollama_chat.py @@ -300,7 +300,7 @@ def get_ollama_response( model_response["choices"][0]["message"] = message model_response["choices"][0]["finish_reason"] = "tool_calls" else: - model_response["choices"][0]["message"] = response_json["message"] + model_response["choices"][0]["message"]["content"] = response_json["message"]["content"] model_response["created"] = int(time.time()) model_response["model"] = "ollama/" + model prompt_tokens = response_json.get("prompt_eval_count", litellm.token_counter(messages=messages)) # type: ignore @@ -484,7 +484,7 @@ async def ollama_acompletion( model_response["choices"][0]["message"] = message model_response["choices"][0]["finish_reason"] = "tool_calls" else: - model_response["choices"][0]["message"] = response_json["message"] + model_response["choices"][0]["message"]["content"] = response_json["message"]["content"] model_response["created"] = int(time.time()) model_response["model"] = "ollama_chat/" + data["model"] From 9d3f01c6ae23e63f20ff1f066b5ca12a9a29d5e1 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 12:32:16 -0700 Subject: [PATCH 047/378] fix - router add model logic --- litellm/router.py | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 39d49a14745..5e71fea5837 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2558,20 +2558,20 @@ class Router: self.set_client(model=deployment.to_json(exclude_none=True)) # set region (if azure model) - try: - if "azure" in deployment.litellm_params.model: - region = litellm.utils.get_model_region( - litellm_params=deployment.litellm_params, mode=None - ) + # try: + # if "azure" in deployment.litellm_params.model: + # region = litellm.utils.get_model_region( + # litellm_params=deployment.litellm_params, mode=None + # ) - deployment.litellm_params.region_name = region - except Exception as e: - verbose_router_logger.error( - "Unable to get the region for azure model - {}, {}".format( - deployment.litellm_params.model, str(e) - ) - ) - pass # [NON-BLOCKING] + # deployment.litellm_params.region_name = region + # except Exception as e: + # verbose_router_logger.error( + # "Unable to get the region for azure model - {}, {}".format( + # deployment.litellm_params.model, str(e) + # ) + # ) + # pass # [NON-BLOCKING] return deployment @@ -2610,7 +2610,6 @@ class Router: - The added/updated deployment """ # check if deployment already exists - if deployment.model_info.id in self.get_model_ids(): # remove the previous deployment removal_idx: Optional[int] = None @@ -2620,16 +2619,9 @@ class Router: if removal_idx is not None: self.model_list.pop(removal_idx) - - # add to model list - _deployment = deployment.to_json(exclude_none=True) - self.model_list.append(_deployment) - - # initialize client - self._add_deployment(deployment=deployment) - - # add to model names - self.model_names.append(deployment.model_name) + else: + # if the model_id is not in router + self.add_deployment(deployment=deployment) return deployment def delete_deployment(self, id: str) -> Optional[Deployment]: From 6fd6490d6304043d9687723fb495a67e2749ac36 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 12:38:06 -0700 Subject: [PATCH 048/378] fix hide - _auto_infer_region behind a feature flag --- litellm/router.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index 5e71fea5837..3c777e2f07e 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2558,20 +2558,23 @@ class Router: self.set_client(model=deployment.to_json(exclude_none=True)) # set region (if azure model) - # try: - # if "azure" in deployment.litellm_params.model: - # region = litellm.utils.get_model_region( - # litellm_params=deployment.litellm_params, mode=None - # ) + _auto_infer_region = os.environ.get("AUTO_INFER_REGION", "true") + _auto_infer_region_value = bool(_auto_infer_region) + if _auto_infer_region_value == True: + try: + if "azure" in deployment.litellm_params.model: + region = litellm.utils.get_model_region( + litellm_params=deployment.litellm_params, mode=None + ) - # deployment.litellm_params.region_name = region - # except Exception as e: - # verbose_router_logger.error( - # "Unable to get the region for azure model - {}, {}".format( - # deployment.litellm_params.model, str(e) - # ) - # ) - # pass # [NON-BLOCKING] + deployment.litellm_params.region_name = region + except Exception as e: + verbose_router_logger.error( + "Unable to get the region for azure model - {}, {}".format( + deployment.litellm_params.model, str(e) + ) + ) + pass # [NON-BLOCKING] return deployment From 75d6658bbcb54e9a9d73f38ece0a0f9d7be81866 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 12:39:19 -0700 Subject: [PATCH 049/378] fix - explain why behind feature flag --- litellm/router.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/litellm/router.py b/litellm/router.py index 3c777e2f07e..ac9b4cb4794 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2561,6 +2561,10 @@ class Router: _auto_infer_region = os.environ.get("AUTO_INFER_REGION", "true") _auto_infer_region_value = bool(_auto_infer_region) if _auto_infer_region_value == True: + """ + Hiding behind a feature flag + When there is a large amount of LLM deployments this makes startup times blow up + """ try: if "azure" in deployment.litellm_params.model: region = litellm.utils.get_model_region( From 547976448f094af5875285cac400e3872446ee6a Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 12:50:46 -0700 Subject: [PATCH 050/378] fix feature flag logic --- litellm/router.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index ac9b4cb4794..d833c1a85dd 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2558,9 +2558,8 @@ class Router: self.set_client(model=deployment.to_json(exclude_none=True)) # set region (if azure model) - _auto_infer_region = os.environ.get("AUTO_INFER_REGION", "true") - _auto_infer_region_value = bool(_auto_infer_region) - if _auto_infer_region_value == True: + _auto_infer_region = os.environ.get("AUTO_INFER_REGION", False) + if _auto_infer_region == True: """ Hiding behind a feature flag When there is a large amount of LLM deployments this makes startup times blow up From 5c69515a1347751f25e99671a1260cdc96108be8 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 13:41:51 -0700 Subject: [PATCH 051/378] fix - upsert_deployment logic --- litellm/router.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/litellm/router.py b/litellm/router.py index d833c1a85dd..20566f255bc 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2606,7 +2606,7 @@ class Router: self.model_names.append(deployment.model_name) return deployment - def upsert_deployment(self, deployment: Deployment) -> Deployment: + def upsert_deployment(self, deployment: Deployment) -> Deployment | None: """ Add or update deployment Parameters: @@ -2616,7 +2616,17 @@ class Router: - The added/updated deployment """ # check if deployment already exists - if deployment.model_info.id in self.get_model_ids(): + _deployment_model_id = deployment.model_info.id or "" + _deployment_on_router: Optional[Deployment] = self.get_deployment( + model_id=_deployment_model_id + ) + if _deployment_on_router is not None: + # deployment with this model_id exists on the router + if deployment.litellm_params == _deployment_on_router.litellm_params: + # No need to update + return None + + # if there is a new litellm param -> then update the deployment # remove the previous deployment removal_idx: Optional[int] = None for idx, model in enumerate(self.model_list): From 414af64343e696196d0ee3ddad3e1f51996ddb58 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 13:43:19 -0700 Subject: [PATCH 052/378] test - OpenAI client is re-used for Azure, OpenAI --- tests/test_models.py | 55 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tests/test_models.py b/tests/test_models.py index b009ded6c11..9696c52a230 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -246,6 +246,33 @@ async def get_model_info_v2(session, key): raise Exception(f"Request did not return a 200 status code: {status}") +async def get_specific_model_info_v2(session, key, model_name): + url = "http://0.0.0.0:4000/v2/model/info?debug=True&model=" + model_name + print("running /model/info check for model=", model_name) + + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + print("response from v2/model/info") + print(response_text) + print() + + _json_response = await response.json() + print("JSON response from /v2/model/info?model=", model_name, _json_response) + + _model_info = _json_response["data"] + assert len(_model_info) == 1, f"Expected 1 model, got {len(_model_info)}" + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return _model_info[0] + + async def get_model_health(session, key, model_name): url = "http://0.0.0.0:4000/health?model=" + model_name headers = { @@ -285,6 +312,11 @@ async def test_add_model_run_health(): model_name = f"azure-model-health-check-{model_id}" print("adding model", model_name) await add_model_for_health_checking(session=session, model_id=model_id) + _old_model_info = await get_specific_model_info_v2( + session=session, key=key, model_name=model_name + ) + print("model info before test", _old_model_info) + await asyncio.sleep(30) print("calling /model/info") await get_model_info(session=session, key=key) @@ -305,5 +337,28 @@ async def test_add_model_run_health(): _healthy_endpooint["model"] == "azure/chatgpt-v-2" ) # this is the model that got added + # assert httpx client is is unchanges + + await asyncio.sleep(10) + + _model_info_after_test = await get_specific_model_info_v2( + session=session, key=key, model_name=model_name + ) + + print("model info after test", _model_info_after_test) + old_openai_client = _old_model_info["openai_client"] + new_openai_client = _model_info_after_test["openai_client"] + print("old openai client", old_openai_client) + print("new openai client", new_openai_client) + + """ + PROD TEST - This is extremly important + The OpenAI client used should be the same after 30 seconds + It is a serious bug if the openai client does not match here + """ + assert ( + old_openai_client == new_openai_client + ), "OpenAI client does not match for the same model after 30 seconds" + # cleanup await delete_model(session=session, model_id=model_id) From 933f8ed16be60ff38223425b30a360c057995716 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 13:47:35 -0700 Subject: [PATCH 053/378] fix - proxy_server.py --- litellm/proxy/proxy_server.py | 38 ++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index af1be7f2660..46c13277328 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -7795,11 +7795,15 @@ async def update_model( ) async def model_info_v2( user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), + model: Optional[str] = fastapi.Query( + None, description="Specify the model name (optional)" + ), + debug: Optional[bool] = False, ): """ BETA ENDPOINT. Might change unexpectedly. Use `/v1/model/info` for now. """ - global llm_model_list, general_settings, user_config_file_path, proxy_config + global llm_model_list, general_settings, user_config_file_path, proxy_config, llm_router if llm_model_list is None or not isinstance(llm_model_list, list): raise HTTPException( @@ -7822,19 +7826,35 @@ async def model_info_v2( if len(user_api_key_dict.models) > 0: user_models = user_api_key_dict.models + if model is not None: + all_models = [m for m in all_models if m["model_name"] == model] + # fill in model info based on config.yaml and litellm model_prices_and_context_window.json - for model in all_models: + for _model in all_models: # provided model_info in config.yaml - model_info = model.get("model_info", {}) + model_info = _model.get("model_info", {}) + if debug == True: + _openai_client = "None" + if llm_router is not None: + _openai_client = ( + llm_router._get_client( + deployment=_model, kwargs={}, client_type="async" + ) + or "None" + ) + else: + _openai_client = "llm_router_is_None" + openai_client = str(_openai_client) + _model["openai_client"] = openai_client # read litellm model_prices_and_context_window.json to get the following: # input_cost_per_token, output_cost_per_token, max_tokens - litellm_model_info = get_litellm_model_info(model=model) + litellm_model_info = get_litellm_model_info(model=_model) # 2nd pass on the model, try seeing if we can find model in litellm model_cost map if litellm_model_info == {}: # use litellm_param model_name to get model_info - litellm_params = model.get("litellm_params", {}) + litellm_params = _model.get("litellm_params", {}) litellm_model = litellm_params.get("model", None) try: litellm_model_info = litellm.get_model_info(model=litellm_model) @@ -7843,7 +7863,7 @@ async def model_info_v2( # 3rd pass on the model, try seeing if we can find model but without the "/" in model cost map if litellm_model_info == {}: # use litellm_param model_name to get model_info - litellm_params = model.get("litellm_params", {}) + litellm_params = _model.get("litellm_params", {}) litellm_model = litellm_params.get("model", None) split_model = litellm_model.split("/") if len(split_model) > 0: @@ -7855,10 +7875,10 @@ async def model_info_v2( for k, v in litellm_model_info.items(): if k not in model_info: model_info[k] = v - model["model_info"] = model_info + _model["model_info"] = model_info # don't return the api key / vertex credentials - model["litellm_params"].pop("api_key", None) - model["litellm_params"].pop("vertex_credentials", None) + _model["litellm_params"].pop("api_key", None) + _model["litellm_params"].pop("vertex_credentials", None) verbose_proxy_logger.debug("all_models: %s", all_models) return {"data": all_models} From 9bbb13c373313107a21d62e6e051d65b0afce91b Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 13:54:52 -0700 Subject: [PATCH 054/378] fix bug upsert_deployment --- litellm/router.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/router.py b/litellm/router.py index 20566f255bc..32c2b61d13a 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2606,7 +2606,7 @@ class Router: self.model_names.append(deployment.model_name) return deployment - def upsert_deployment(self, deployment: Deployment) -> Deployment | None: + def upsert_deployment(self, deployment: Deployment) -> Optional[Deployment]: """ Add or update deployment Parameters: From c17f221b8966e4b3581702822e2b8e181976a8f2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 10 May 2024 14:07:01 -0700 Subject: [PATCH 055/378] test(test_completion.py): reintegrate testing for huggingface tgi + non-tgi --- litellm/llms/huggingface_restapi.py | 103 +++++++++++++++++++--- litellm/tests/test_completion.py | 129 ++++++++++++++++++++++++++-- litellm/utils.py | 44 ++-------- 3 files changed, 218 insertions(+), 58 deletions(-) diff --git a/litellm/llms/huggingface_restapi.py b/litellm/llms/huggingface_restapi.py index a2c4457c23e..26591b95dac 100644 --- a/litellm/llms/huggingface_restapi.py +++ b/litellm/llms/huggingface_restapi.py @@ -6,10 +6,12 @@ import httpx, requests from .base import BaseLLM import time import litellm -from typing import Callable, Dict, List, Any +from typing import Callable, Dict, List, Any, Literal from litellm.utils import ModelResponse, Choices, Message, CustomStreamWrapper, Usage from typing import Optional from .prompt_templates.factory import prompt_factory, custom_prompt +from litellm.types.completion import ChatCompletionMessageToolCallParam +import enum class HuggingfaceError(Exception): @@ -39,11 +41,29 @@ class HuggingfaceError(Exception): ) # Call the base class constructor with the parameters it needs +hf_task_list = [ + "text-generation-inference", + "conversational", + "text-classification", + "text-generation", +] + +hf_tasks = Literal[ + "text-generation-inference", + "conversational", + "text-classification", + "text-generation", +] + + class HuggingfaceConfig: """ Reference: https://huggingface.github.io/text-generation-inference/#/Text%20Generation%20Inference/compat_generate """ + hf_task: Optional[hf_tasks] = ( + None # litellm-specific param, used to know the api spec to use when calling huggingface api + ) best_of: Optional[int] = None decoder_input_details: Optional[bool] = None details: Optional[bool] = True # enables returning logprobs + best of @@ -101,6 +121,51 @@ class HuggingfaceConfig: and v is not None } + def get_supported_openai_params(self): + return [ + "stream", + "temperature", + "max_tokens", + "top_p", + "stop", + "n", + "echo", + ] + + def map_openai_params( + self, non_default_params: dict, optional_params: dict + ) -> dict: + for param, value in non_default_params.items(): + # temperature, top_p, n, stream, stop, max_tokens, n, presence_penalty default to None + if param == "temperature": + if value == 0.0 or value == 0: + # hugging face exception raised when temp==0 + # Failed: Error occurred: HuggingfaceException - Input validation error: `temperature` must be strictly positive + value = 0.01 + optional_params["temperature"] = value + if param == "top_p": + optional_params["top_p"] = value + if param == "n": + optional_params["best_of"] = value + optional_params["do_sample"] = ( + True # Need to sample if you want best of for hf inference endpoints + ) + if param == "stream": + optional_params["stream"] = value + if param == "stop": + optional_params["stop"] = value + if param == "max_tokens": + # HF TGI raises the following exception when max_new_tokens==0 + # Failed: Error occurred: HuggingfaceException - Input validation error: `max_new_tokens` must be strictly positive + if value == 0: + value = 1 + optional_params["max_new_tokens"] = value + if param == "echo": + # https://huggingface.co/docs/huggingface_hub/main/en/package_reference/inference_client#huggingface_hub.InferenceClient.text_generation.decoder_input_details + # Return the decoder input token logprobs and ids. You must set details=True as well for it to be taken into account. Defaults to False + optional_params["decoder_input_details"] = True + return optional_params + def output_parser(generated_text: str): """ @@ -162,7 +227,7 @@ def read_tgi_conv_models(): return set(), set() -def get_hf_task_for_model(model): +def get_hf_task_for_model(model: str) -> hf_tasks: # read text file, cast it to set # read the file called "huggingface_llms_metadata/hf_text_generation_models.txt" tgi_models, conversational_models = read_tgi_conv_models() @@ -171,7 +236,7 @@ def get_hf_task_for_model(model): elif model in conversational_models: return "conversational" elif "roneneldan/TinyStories" in model: - return None + return "text-generation" else: return "text-generation-inference" # default to tgi @@ -202,7 +267,7 @@ class Huggingface(BaseLLM): self, completion_response, model_response, - task, + task: hf_tasks, optional_params, encoding, input_text, @@ -270,6 +335,10 @@ class Huggingface(BaseLLM): ) choices_list.append(choice_obj) model_response["choices"].extend(choices_list) + elif task == "text-classification": + model_response["choices"][0]["message"]["content"] = json.dumps( + completion_response + ) else: if len(completion_response[0]["generated_text"]) > 0: model_response["choices"][0]["message"]["content"] = output_parser( @@ -332,7 +401,16 @@ class Huggingface(BaseLLM): exception_mapping_worked = False try: headers = self.validate_environment(api_key, headers) - task = get_hf_task_for_model(model) + if optional_params.get("hf_task") is None: + task = get_hf_task_for_model(model) + else: + task = optional_params.get("hf_task") # type: ignore + ## VALIDATE API FORMAT + if task is None or not isinstance(task, str) or task not in hf_task_list: + raise Exception( + "Invalid hf task - {}. Valid formats - {}.".format(task, hf_tasks) + ) + print_verbose(f"{model}, {task}") completion_url = "" input_text = "" @@ -433,14 +511,15 @@ class Huggingface(BaseLLM): inference_params.pop("return_full_text") data = { "inputs": prompt, - "parameters": inference_params, - "stream": ( # type: ignore + } + if task == "text-generation-inference": + data["parameters"] = inference_params + data["stream"] = ( # type: ignore True if "stream" in optional_params and optional_params["stream"] == True else False - ), - } + ) input_text = prompt ## LOGGING logging_obj.pre_call( @@ -531,10 +610,10 @@ class Huggingface(BaseLLM): isinstance(completion_response, dict) and "error" in completion_response ): - print_verbose(f"completion error: {completion_response['error']}") + print_verbose(f"completion error: {completion_response['error']}") # type: ignore print_verbose(f"response.status_code: {response.status_code}") raise HuggingfaceError( - message=completion_response["error"], + message=completion_response["error"], # type: ignore status_code=response.status_code, ) return self.convert_to_model_response_object( @@ -563,7 +642,7 @@ class Huggingface(BaseLLM): data: dict, headers: dict, model_response: ModelResponse, - task: str, + task: hf_tasks, encoding: Any, input_text: str, model: str, diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 630baf34659..4da489cc53d 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -13,6 +13,7 @@ import litellm from litellm import embedding, completion, completion_cost, Timeout from litellm import RateLimitError from litellm.llms.prompt_templates.factory import anthropic_messages_pt +from unittest.mock import patch, MagicMock # litellm.num_retries=3 litellm.cache = None @@ -1145,15 +1146,92 @@ def test_get_hf_task_for_model(): # ################### Hugging Face TGI models ######################## # # TGI model # # this is a TGI model https://huggingface.co/glaiveai/glaive-coder-7b -def hf_test_completion_tgi(): - # litellm.set_verbose=True +def tgi_mock_post(url, data=None, json=None, headers=None): + mock_response = MagicMock() + mock_response.status_code = 200 + mock_response.headers = {"Content-Type": "application/json"} + mock_response.json.return_value = [ + { + "generated_text": "<|assistant|>\nI'm", + "details": { + "finish_reason": "length", + "generated_tokens": 10, + "seed": None, + "prefill": [], + "tokens": [ + { + "id": 28789, + "text": "<", + "logprob": -0.025222778, + "special": False, + }, + { + "id": 28766, + "text": "|", + "logprob": -0.000003695488, + "special": False, + }, + { + "id": 489, + "text": "ass", + "logprob": -0.0000019073486, + "special": False, + }, + { + "id": 11143, + "text": "istant", + "logprob": -0.000002026558, + "special": False, + }, + { + "id": 28766, + "text": "|", + "logprob": -0.0000015497208, + "special": False, + }, + { + "id": 28767, + "text": ">", + "logprob": -0.0000011920929, + "special": False, + }, + { + "id": 13, + "text": "\n", + "logprob": -0.00009703636, + "special": False, + }, + {"id": 28737, "text": "I", "logprob": -0.1953125, "special": False}, + { + "id": 28742, + "text": "'", + "logprob": -0.88183594, + "special": False, + }, + { + "id": 28719, + "text": "m", + "logprob": -0.00032639503, + "special": False, + }, + ], + }, + } + ] + return mock_response + + +def test_hf_test_completion_tgi(): + litellm.set_verbose = True try: - response = completion( - model="huggingface/HuggingFaceH4/zephyr-7b-beta", - messages=[{"content": "Hello, how are you?", "role": "user"}], - ) - # Add any assertions here to check the response - print(response) + with patch("requests.post", side_effect=tgi_mock_post): + response = completion( + model="huggingface/HuggingFaceH4/zephyr-7b-beta", + messages=[{"content": "Hello, how are you?", "role": "user"}], + max_tokens=10, + ) + # Add any assertions here to check the response + print(response) except litellm.ServiceUnavailableError as e: pass except Exception as e: @@ -1191,6 +1269,41 @@ def hf_test_completion_tgi(): # except Exception as e: # pytest.fail(f"Error occurred: {e}") # hf_test_completion_none_task() + + +def mock_post(url, data=None, json=None, headers=None): + mock_response = MagicMock() + mock_response.status_code = 200 + mock_response.headers = {"Content-Type": "application/json"} + mock_response.json.return_value = [ + [ + {"label": "LABEL_0", "score": 0.9990691542625427}, + {"label": "LABEL_1", "score": 0.0009308889275416732}, + ] + ] + return mock_response + + +def test_hf_classifier_task(): + try: + with patch("requests.post", side_effect=mock_post): + litellm.set_verbose = True + user_message = "I like you. I love you" + messages = [{"content": user_message, "role": "user"}] + response = completion( + model="huggingface/shahrukhx01/question-vs-statement-classifier", + messages=messages, + hf_task="text-classification", + ) + print(f"response: {response}") + assert isinstance(response, litellm.ModelResponse) + assert isinstance(response.choices[0], litellm.Choices) + assert response.choices[0].message.content is not None + assert isinstance(response.choices[0].message.content, str) + except Exception as e: + pytest.fail(f"Error occurred: {str(e)}") + + ########################### End of Hugging Face Tests ############################################## # def test_completion_hf_api(): # # failing on circle ci commenting out diff --git a/litellm/utils.py b/litellm/utils.py index 838d0fe553e..f20cd220ce9 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -4840,6 +4840,7 @@ def get_optional_params_embeddings( def get_optional_params( # use the openai defaults # https://platform.openai.com/docs/api-reference/chat/create + model: str, functions=None, function_call=None, temperature=None, @@ -4853,7 +4854,6 @@ def get_optional_params( frequency_penalty=None, logit_bias=None, user=None, - model=None, custom_llm_provider="", response_format=None, seed=None, @@ -4882,7 +4882,7 @@ def get_optional_params( passed_params[k] = v - optional_params = {} + optional_params: Dict = {} common_auth_dict = litellm.common_cloud_provider_auth_params if custom_llm_provider in common_auth_dict["providers"]: @@ -5156,41 +5156,9 @@ def get_optional_params( model=model, custom_llm_provider=custom_llm_provider ) _check_valid_arg(supported_params=supported_params) - # temperature, top_p, n, stream, stop, max_tokens, n, presence_penalty default to None - if temperature is not None: - if temperature == 0.0 or temperature == 0: - # hugging face exception raised when temp==0 - # Failed: Error occurred: HuggingfaceException - Input validation error: `temperature` must be strictly positive - temperature = 0.01 - optional_params["temperature"] = temperature - if top_p is not None: - optional_params["top_p"] = top_p - if n is not None: - optional_params["best_of"] = n - optional_params["do_sample"] = ( - True # Need to sample if you want best of for hf inference endpoints - ) - if stream is not None: - optional_params["stream"] = stream - if stop is not None: - optional_params["stop"] = stop - if max_tokens is not None: - # HF TGI raises the following exception when max_new_tokens==0 - # Failed: Error occurred: HuggingfaceException - Input validation error: `max_new_tokens` must be strictly positive - if max_tokens == 0: - max_tokens = 1 - optional_params["max_new_tokens"] = max_tokens - if n is not None: - optional_params["best_of"] = n - if presence_penalty is not None: - optional_params["repetition_penalty"] = presence_penalty - if "echo" in passed_params: - # https://huggingface.co/docs/huggingface_hub/main/en/package_reference/inference_client#huggingface_hub.InferenceClient.text_generation.decoder_input_details - # Return the decoder input token logprobs and ids. You must set details=True as well for it to be taken into account. Defaults to False - optional_params["decoder_input_details"] = special_params["echo"] - passed_params.pop( - "echo", None - ) # since we handle translating echo, we should not send it to TGI request + optional_params = litellm.HuggingfaceConfig().map_openai_params( + non_default_params=non_default_params, optional_params=optional_params + ) elif custom_llm_provider == "together_ai": ## check if unsupported param passed in supported_params = get_supported_openai_params( @@ -6150,7 +6118,7 @@ def get_supported_openai_params(model: str, custom_llm_provider: str): "seed", ] elif custom_llm_provider == "huggingface": - return ["stream", "temperature", "max_tokens", "top_p", "stop", "n"] + return litellm.HuggingfaceConfig().get_supported_openai_params() elif custom_llm_provider == "together_ai": return [ "stream", From c744851d139265932123e81447261a174c14b47d Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 10 May 2024 14:08:38 -0700 Subject: [PATCH 056/378] fix AUTO_INFER_REGION --- .circleci/config.yml | 1 + litellm/router.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1ef8c0e33b7..08bbad6fac5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -198,6 +198,7 @@ jobs: -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ -e AWS_REGION_NAME=$AWS_REGION_NAME \ + -e AUTO_INFER_REGION="True" \ -e OPENAI_API_KEY=$OPENAI_API_KEY \ -e LANGFUSE_PROJECT1_PUBLIC=$LANGFUSE_PROJECT1_PUBLIC \ -e LANGFUSE_PROJECT2_PUBLIC=$LANGFUSE_PROJECT2_PUBLIC \ diff --git a/litellm/router.py b/litellm/router.py index 32c2b61d13a..e8b0f658fa3 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -2559,7 +2559,7 @@ class Router: # set region (if azure model) _auto_infer_region = os.environ.get("AUTO_INFER_REGION", False) - if _auto_infer_region == True: + if _auto_infer_region == True or _auto_infer_region == "True": """ Hiding behind a feature flag When there is a large amount of LLM deployments this makes startup times blow up From 50be25d11a05d7a4b15c43c35f35f969b678f324 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 10 May 2024 14:08:47 -0700 Subject: [PATCH 057/378] test(test_optional_params.py): fix optional params --- litellm/tests/test_optional_params.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/litellm/tests/test_optional_params.py b/litellm/tests/test_optional_params.py index fac63ed67be..5c33cfa0e5c 100644 --- a/litellm/tests/test_optional_params.py +++ b/litellm/tests/test_optional_params.py @@ -86,6 +86,7 @@ def test_azure_optional_params_embeddings(): def test_azure_gpt_optional_params_gpt_vision(): # for OpenAI, Azure all extra params need to get passed as extra_body to OpenAI python. We assert we actually set extra_body here optional_params = litellm.utils.get_optional_params( + model="", user="John", custom_llm_provider="azure", max_tokens=10, @@ -125,6 +126,7 @@ def test_azure_gpt_optional_params_gpt_vision(): def test_azure_gpt_optional_params_gpt_vision_with_extra_body(): # if user passes extra_body, we should not over write it, we should pass it along to OpenAI python optional_params = litellm.utils.get_optional_params( + model="", user="John", custom_llm_provider="azure", max_tokens=10, @@ -167,6 +169,7 @@ def test_azure_gpt_optional_params_gpt_vision_with_extra_body(): def test_openai_extra_headers(): optional_params = litellm.utils.get_optional_params( + model="", user="John", custom_llm_provider="openai", max_tokens=10, From d4d175030fbf81afed5b16ff523c5e240e3dc1b6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 10 May 2024 14:39:14 -0700 Subject: [PATCH 058/378] docs(huggingface.md): add text-classification to huggingface docs --- docs/my-website/docs/providers/huggingface.md | 176 +++++++++++++++++- litellm/llms/huggingface_restapi.py | 7 +- litellm/tests/test_completion.py | 3 +- 3 files changed, 177 insertions(+), 9 deletions(-) diff --git a/docs/my-website/docs/providers/huggingface.md b/docs/my-website/docs/providers/huggingface.md index f8ebadfcfa7..35befd3e205 100644 --- a/docs/my-website/docs/providers/huggingface.md +++ b/docs/my-website/docs/providers/huggingface.md @@ -21,6 +21,11 @@ This is done by adding the "huggingface/" prefix to `model`, example `completion +By default, LiteLLM will assume a huggingface call follows the TGI format. + + + + ```python import os from litellm import completion @@ -40,9 +45,58 @@ response = completion( print(response) ``` + + + +1. Add models to your config.yaml + + ```yaml + model_list: + - model_name: wizard-coder + litellm_params: + model: huggingface/WizardLM/WizardCoder-Python-34B-V1.0 + api_key: os.environ/HUGGINGFACE_API_KEY + api_base: "https://my-endpoint.endpoints.huggingface.cloud" + ``` + + + +2. Start the proxy + + ```bash + $ litellm --config /path/to/config.yaml --debug + ``` + +3. Test it! + + ```shell + curl --location 'http://0.0.0.0:4000/chat/completions' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{ + "model": "wizard-coder", + "messages": [ + { + "role": "user", + "content": "I like you!" + } + ], + }' + ``` + + + + +Append `conversational` to the model name + +e.g. `huggingface/conversational/` + + + + ```python import os from litellm import completion @@ -54,7 +108,7 @@ messages = [{ "content": "There's a llama in my garden 😱 What should I do?"," # e.g. Call 'facebook/blenderbot-400M-distill' hosted on HF Inference endpoints response = completion( - model="huggingface/facebook/blenderbot-400M-distill", + model="huggingface/conversational/facebook/blenderbot-400M-distill", messages=messages, api_base="https://my-endpoint.huggingface.cloud" ) @@ -62,7 +116,123 @@ response = completion( print(response) ``` - + + +1. Add models to your config.yaml + + ```yaml + model_list: + - model_name: blenderbot + litellm_params: + model: huggingface/conversational/facebook/blenderbot-400M-distill + api_key: os.environ/HUGGINGFACE_API_KEY + api_base: "https://my-endpoint.endpoints.huggingface.cloud" + ``` + + + +2. Start the proxy + + ```bash + $ litellm --config /path/to/config.yaml --debug + ``` + +3. Test it! + + ```shell + curl --location 'http://0.0.0.0:4000/chat/completions' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{ + "model": "blenderbot", + "messages": [ + { + "role": "user", + "content": "I like you!" + } + ], + }' + ``` + + + + + + + +Append `text-classification` to the model name + +e.g. `huggingface/text-classification/` + + + + +```python +import os +from litellm import completion + +# [OPTIONAL] set env var +os.environ["HUGGINGFACE_API_KEY"] = "huggingface_api_key" + +messages = [{ "content": "I like you, I love you!","role": "user"}] + +# e.g. Call 'shahrukhx01/question-vs-statement-classifier' hosted on HF Inference endpoints +response = completion( + model="huggingface/text-classification/shahrukhx01/question-vs-statement-classifier", + messages=messages, + api_base="https://my-endpoint.endpoints.huggingface.cloud", +) + +print(response) +``` + + + +1. Add models to your config.yaml + + ```yaml + model_list: + - model_name: bert-classifier + litellm_params: + model: huggingface/text-classification/shahrukhx01/question-vs-statement-classifier + api_key: os.environ/HUGGINGFACE_API_KEY + api_base: "https://my-endpoint.endpoints.huggingface.cloud" + ``` + + + +2. Start the proxy + + ```bash + $ litellm --config /path/to/config.yaml --debug + ``` + +3. Test it! + + ```shell + curl --location 'http://0.0.0.0:4000/chat/completions' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{ + "model": "bert-classifier", + "messages": [ + { + "role": "user", + "content": "I like you!" + } + ], + }' + ``` + + + + + + + +Append `text-generation` to the model name + +e.g. `huggingface/text-generation/` ```python import os @@ -75,7 +245,7 @@ messages = [{ "content": "There's a llama in my garden 😱 What should I do?"," # e.g. Call 'roneneldan/TinyStories-3M' hosted on HF Inference endpoints response = completion( - model="huggingface/roneneldan/TinyStories-3M", + model="huggingface/text-generation/roneneldan/TinyStories-3M", messages=messages, api_base="https://p69xlsj6rpno5drq.us-east-1.aws.endpoints.huggingface.cloud", ) diff --git a/litellm/llms/huggingface_restapi.py b/litellm/llms/huggingface_restapi.py index 26591b95dac..ad3c570e762 100644 --- a/litellm/llms/huggingface_restapi.py +++ b/litellm/llms/huggingface_restapi.py @@ -230,6 +230,8 @@ def read_tgi_conv_models(): def get_hf_task_for_model(model: str) -> hf_tasks: # read text file, cast it to set # read the file called "huggingface_llms_metadata/hf_text_generation_models.txt" + if model.split("/")[0] in hf_task_list: + return model.split("/")[0] # type: ignore tgi_models, conversational_models = read_tgi_conv_models() if model in tgi_models: return "text-generation-inference" @@ -401,10 +403,7 @@ class Huggingface(BaseLLM): exception_mapping_worked = False try: headers = self.validate_environment(api_key, headers) - if optional_params.get("hf_task") is None: - task = get_hf_task_for_model(model) - else: - task = optional_params.get("hf_task") # type: ignore + task = get_hf_task_for_model(model) ## VALIDATE API FORMAT if task is None or not isinstance(task, str) or task not in hf_task_list: raise Exception( diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 4da489cc53d..b3e1928a8e5 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -1291,9 +1291,8 @@ def test_hf_classifier_task(): user_message = "I like you. I love you" messages = [{"content": user_message, "role": "user"}] response = completion( - model="huggingface/shahrukhx01/question-vs-statement-classifier", + model="huggingface/text-classification/shahrukhx01/question-vs-statement-classifier", messages=messages, - hf_task="text-classification", ) print(f"response: {response}") assert isinstance(response, litellm.ModelResponse) From 500995696ad2d1fe450d40461cc2f75ce2f24a1b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 10 May 2024 14:42:06 -0700 Subject: [PATCH 059/378] test: fix linting --- ...optional_params_functions_not_supported.py | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/litellm/tests/test_get_optional_params_functions_not_supported.py b/litellm/tests/test_get_optional_params_functions_not_supported.py index 2abfbc41f0a..c4580adba23 100644 --- a/litellm/tests/test_get_optional_params_functions_not_supported.py +++ b/litellm/tests/test_get_optional_params_functions_not_supported.py @@ -3,7 +3,27 @@ from litellm import get_optional_params litellm.add_function_to_prompt = True optional_params = get_optional_params( - tools= [{'type': 'function', 'function': {'description': 'Get the current weather in a given location', 'name': 'get_current_weather', 'parameters': {'type': 'object', 'properties': {'location': {'type': 'string', 'description': 'The city and state, e.g. San Francisco, CA'}, 'unit': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}}, 'required': ['location']}}}], - tool_choice= 'auto', + model="", + tools=[ + { + "type": "function", + "function": { + "description": "Get the current weather in a given location", + "name": "get_current_weather", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, + }, + "required": ["location"], + }, + }, + } + ], + tool_choice="auto", ) -assert optional_params is not None \ No newline at end of file +assert optional_params is not None From 759ff3f750729f840b934bb3af09dd9844ce99f5 Mon Sep 17 00:00:00 2001 From: Nick Wong Date: Fri, 10 May 2024 15:42:07 -0700 Subject: [PATCH 060/378] added code to enforce unique key and team aliases in the ui --- .../src/components/create_key_button.tsx | 395 +++++++++------- ui/litellm-dashboard/src/components/teams.tsx | 439 +++++++++++------- 2 files changed, 495 insertions(+), 339 deletions(-) diff --git a/ui/litellm-dashboard/src/components/create_key_button.tsx b/ui/litellm-dashboard/src/components/create_key_button.tsx index 648eee9cadf..0e158778f96 100644 --- a/ui/litellm-dashboard/src/components/create_key_button.tsx +++ b/ui/litellm-dashboard/src/components/create_key_button.tsx @@ -2,8 +2,17 @@ import React, { useState, useEffect, useRef } from "react"; import { Button, TextInput, Grid, Col } from "@tremor/react"; -import { Card, Metric, Text, Title, Subtitle, Accordion, AccordionHeader, AccordionBody, } from "@tremor/react"; -import { CopyToClipboard } from 'react-copy-to-clipboard'; +import { + Card, + Metric, + Text, + Title, + Subtitle, + Accordion, + AccordionHeader, + AccordionBody, +} from "@tremor/react"; +import { CopyToClipboard } from "react-copy-to-clipboard"; import { Button as Button2, Modal, @@ -13,7 +22,11 @@ import { Select, message, } from "antd"; -import { keyCreateCall, slackBudgetAlertsHealthCheck, modelAvailableCall } from "./networking"; +import { + keyCreateCall, + slackBudgetAlertsHealthCheck, + modelAvailableCall, +} from "./networking"; const { Option } = Select; @@ -59,7 +72,11 @@ const CreateKey: React.FC = ({ } if (accessToken !== null) { - const model_available = await modelAvailableCall(accessToken, userID, userRole); + const model_available = await modelAvailableCall( + accessToken, + userID, + userRole + ); let available_model_names = model_available["data"].map( (element: { id: string }) => element.id ); @@ -70,12 +87,25 @@ const CreateKey: React.FC = ({ console.error("Error fetching user models:", error); } }; - + fetchUserModels(); }, [accessToken, userID, userRole]); const handleCreate = async (formValues: Record) => { try { + const newKeyAlias = formValues?.key_alias ?? ""; + const newKeyTeamId = formValues?.team_id ?? null; + const existingKeyAliases = + data + ?.filter((k) => k.team_id === newKeyTeamId) + .map((k) => k.key_alias) ?? []; + + if (existingKeyAliases.includes(newKeyAlias)) { + throw new Error( + `Key alias ${newKeyAlias} already exists for team with ID ${newKeyTeamId}, please provide another key alias` + ); + } + message.info("Making API Call"); setIsModalVisible(true); const response = await keyCreateCall(accessToken, userID, formValues); @@ -89,12 +119,13 @@ const CreateKey: React.FC = ({ localStorage.removeItem("userData" + userID); } catch (error) { console.error("Error creating the key:", error); + message.error(`Error creating the key: ${error}`, 20); } }; const handleCopy = () => { - message.success('API Key copied to clipboard'); -}; + message.success("API Key copied to clipboard"); + }; useEffect(() => { let tempModelsToPick = []; @@ -119,7 +150,6 @@ const CreateKey: React.FC = ({ setModelsToPick(tempModelsToPick); }, [team, userModels]); - return (