mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 10:44:24 +00:00
[UI QA/Bug Fix] - Don't change team, key, org, model values on scroll (#9776)
* UI - use 1 component for numerical input * disable scroll number values on models page * team edit - disable numerical value scroll * fix numerical input view * use numerical component on create key * add NumericalInput * ui fix org numerical input * remove file in incorrect location * fix NumericalInput
This commit is contained in:
parent
3a7061a05c
commit
80eb1ac8fa
9 changed files with 92 additions and 39 deletions
|
@ -17,11 +17,11 @@ import {
|
||||||
Modal,
|
Modal,
|
||||||
Form,
|
Form,
|
||||||
Input,
|
Input,
|
||||||
InputNumber,
|
|
||||||
Select,
|
Select,
|
||||||
message,
|
message,
|
||||||
Radio,
|
Radio,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
|
import NumericalInput from "./shared/numerical_input";
|
||||||
import { unfurlWildcardModelsInList, getModelDisplayName } from "./key_team_helpers/fetch_available_models_team_key";
|
import { unfurlWildcardModelsInList, getModelDisplayName } from "./key_team_helpers/fetch_available_models_team_key";
|
||||||
import SchemaFormFields from './common_components/check_openapi_schema';
|
import SchemaFormFields from './common_components/check_openapi_schema';
|
||||||
import {
|
import {
|
||||||
|
@ -559,7 +559,7 @@ const CreateKey: React.FC<CreateKeyProps> = ({
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<InputNumber step={0.01} precision={2} width={200} />
|
<NumericalInput step={0.01} precision={2} width={200} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
|
@ -605,7 +605,7 @@ const CreateKey: React.FC<CreateKeyProps> = ({
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<InputNumber step={1} width={400} />
|
<NumericalInput step={1} width={400} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
|
@ -636,7 +636,7 @@ const CreateKey: React.FC<CreateKeyProps> = ({
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<InputNumber step={1} width={400} />
|
<NumericalInput step={1} width={400} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label={
|
label={
|
||||||
|
|
|
@ -17,10 +17,11 @@ import {
|
||||||
Form,
|
Form,
|
||||||
Input,
|
Input,
|
||||||
Select as Select2,
|
Select as Select2,
|
||||||
InputNumber,
|
|
||||||
message,
|
message,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
|
|
||||||
|
import NumericalInput from "./shared/numerical_input";
|
||||||
|
|
||||||
interface EditUserModalProps {
|
interface EditUserModalProps {
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
possibleUIRoles: null | Record<string, Record<string, string>>;
|
possibleUIRoles: null | Record<string, Record<string, string>>;
|
||||||
|
@ -112,7 +113,7 @@ const EditUserModal: React.FC<EditUserModalProps> = ({ visible, possibleUIRoles,
|
||||||
tooltip="(float) - Spend of all LLM calls completed by this user"
|
tooltip="(float) - Spend of all LLM calls completed by this user"
|
||||||
help="Across all keys (including keys with team_id)."
|
help="Across all keys (including keys with team_id)."
|
||||||
>
|
>
|
||||||
<InputNumber min={0} step={1} />
|
<NumericalInput min={0} step={1} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item
|
<Form.Item
|
||||||
|
@ -121,7 +122,7 @@ const EditUserModal: React.FC<EditUserModalProps> = ({ visible, possibleUIRoles,
|
||||||
tooltip="(float) - Maximum budget of this user"
|
tooltip="(float) - Maximum budget of this user"
|
||||||
help="Maximum budget of this user."
|
help="Maximum budget of this user."
|
||||||
>
|
>
|
||||||
<InputNumber min={0} step={1} />
|
<NumericalInput min={0} step={1} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<div style={{ textAlign: "right", marginTop: "10px" }}>
|
<div style={{ textAlign: "right", marginTop: "10px" }}>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import { Form, Input, InputNumber, Select } from "antd";
|
import { Form, Input, Select } from "antd";
|
||||||
import { Button, TextInput } from "@tremor/react";
|
import { Button, TextInput } from "@tremor/react";
|
||||||
import { KeyResponse } from "./key_team_helpers/key_list";
|
import { KeyResponse } from "./key_team_helpers/key_list";
|
||||||
import { fetchTeamModels } from "../components/create_key_button";
|
import { fetchTeamModels } from "../components/create_key_button";
|
||||||
import { modelAvailableCall } from "./networking";
|
import { modelAvailableCall } from "./networking";
|
||||||
|
import NumericalInput from "./shared/numerical_input";
|
||||||
interface KeyEditViewProps {
|
interface KeyEditViewProps {
|
||||||
keyData: KeyResponse;
|
keyData: KeyResponse;
|
||||||
onCancel: () => void;
|
onCancel: () => void;
|
||||||
|
@ -126,7 +126,7 @@ export function KeyEditView({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Max Budget (USD)" name="max_budget">
|
<Form.Item label="Max Budget (USD)" name="max_budget">
|
||||||
<InputNumber step={0.01} precision={2} style={{ width: "100%" }} />
|
<NumericalInput step={0.01} style={{ width: "100%" }} placeholder="Enter a numerical value"/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Reset Budget" name="budget_duration">
|
<Form.Item label="Reset Budget" name="budget_duration">
|
||||||
|
@ -138,15 +138,15 @@ export function KeyEditView({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="TPM Limit" name="tpm_limit">
|
<Form.Item label="TPM Limit" name="tpm_limit">
|
||||||
<InputNumber style={{ width: "100%" }} min={0}/>
|
<NumericalInput min={0}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="RPM Limit" name="rpm_limit">
|
<Form.Item label="RPM Limit" name="rpm_limit">
|
||||||
<InputNumber style={{ width: "100%" }} min={0}/>
|
<NumericalInput min={0}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Max Parallel Requests" name="max_parallel_requests">
|
<Form.Item label="Max Parallel Requests" name="max_parallel_requests">
|
||||||
<InputNumber style={{ width: "100%" }} min={0}/>
|
<NumericalInput min={0}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Model TPM Limit" name="model_tpm_limit">
|
<Form.Item label="Model TPM Limit" name="model_tpm_limit">
|
||||||
|
|
|
@ -12,8 +12,8 @@ import {
|
||||||
Badge,
|
Badge,
|
||||||
Button as TremorButton,
|
Button as TremorButton,
|
||||||
TextInput,
|
TextInput,
|
||||||
NumberInput,
|
|
||||||
} from "@tremor/react";
|
} from "@tremor/react";
|
||||||
|
import NumericalInput from "./shared/numerical_input";
|
||||||
import { ArrowLeftIcon, TrashIcon, KeyIcon } from "@heroicons/react/outline";
|
import { ArrowLeftIcon, TrashIcon, KeyIcon } from "@heroicons/react/outline";
|
||||||
import { modelDeleteCall, modelUpdateCall, CredentialItem, credentialGetCall, credentialCreateCall, modelInfoCall, modelInfoV1Call } from "./networking";
|
import { modelDeleteCall, modelUpdateCall, CredentialItem, credentialGetCall, credentialCreateCall, modelInfoCall, modelInfoV1Call } from "./networking";
|
||||||
import { Button, Form, Input, InputNumber, message, Select, Modal } from "antd";
|
import { Button, Form, Input, InputNumber, message, Select, Modal } from "antd";
|
||||||
|
@ -369,7 +369,7 @@ export default function ModelInfoView({
|
||||||
<Text className="font-medium">Input Cost (per 1M tokens)</Text>
|
<Text className="font-medium">Input Cost (per 1M tokens)</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="input_cost" className="mb-0">
|
<Form.Item name="input_cost" className="mb-0">
|
||||||
<NumberInput placeholder="Enter input cost" />
|
<NumericalInput placeholder="Enter input cost" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
@ -384,7 +384,7 @@ export default function ModelInfoView({
|
||||||
<Text className="font-medium">Output Cost (per 1M tokens)</Text>
|
<Text className="font-medium">Output Cost (per 1M tokens)</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="output_cost" className="mb-0">
|
<Form.Item name="output_cost" className="mb-0">
|
||||||
<NumberInput placeholder="Enter output cost" />
|
<NumericalInput placeholder="Enter output cost" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
@ -438,7 +438,7 @@ export default function ModelInfoView({
|
||||||
<Text className="font-medium">TPM (Tokens per Minute)</Text>
|
<Text className="font-medium">TPM (Tokens per Minute)</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="tpm" className="mb-0">
|
<Form.Item name="tpm" className="mb-0">
|
||||||
<NumberInput placeholder="Enter TPM" />
|
<NumericalInput placeholder="Enter TPM" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
@ -448,10 +448,10 @@ export default function ModelInfoView({
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<Text className="font-medium">RPM (Requests per Minute)</Text>
|
<Text className="font-medium">RPM VVV(Requests per Minute)</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="rpm" className="mb-0">
|
<Form.Item name="rpm" className="mb-0">
|
||||||
<NumberInput placeholder="Enter RPM" />
|
<NumericalInput placeholder="Enter RPM" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
@ -464,7 +464,7 @@ export default function ModelInfoView({
|
||||||
<Text className="font-medium">Max Retries</Text>
|
<Text className="font-medium">Max Retries</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="max_retries" className="mb-0">
|
<Form.Item name="max_retries" className="mb-0">
|
||||||
<NumberInput placeholder="Enter max retries" />
|
<NumericalInput placeholder="Enter max retries" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
@ -477,7 +477,7 @@ export default function ModelInfoView({
|
||||||
<Text className="font-medium">Timeout (seconds)</Text>
|
<Text className="font-medium">Timeout (seconds)</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="timeout" className="mb-0">
|
<Form.Item name="timeout" className="mb-0">
|
||||||
<NumberInput placeholder="Enter timeout" />
|
<NumericalInput placeholder="Enter timeout" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
@ -490,7 +490,7 @@ export default function ModelInfoView({
|
||||||
<Text className="font-medium">Stream Timeout (seconds)</Text>
|
<Text className="font-medium">Stream Timeout (seconds)</Text>
|
||||||
{isEditing ? (
|
{isEditing ? (
|
||||||
<Form.Item name="stream_timeout" className="mb-0">
|
<Form.Item name="stream_timeout" className="mb-0">
|
||||||
<NumberInput placeholder="Enter stream timeout" />
|
<NumericalInput placeholder="Enter stream timeout" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-1 p-2 bg-gray-50 rounded">
|
<div className="mt-1 p-2 bg-gray-50 rounded">
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {
|
||||||
Card,
|
Card,
|
||||||
Title,
|
Title,
|
||||||
Text,
|
Text,
|
||||||
|
TextInput,
|
||||||
Tab,
|
Tab,
|
||||||
TabList,
|
TabList,
|
||||||
TabGroup,
|
TabGroup,
|
||||||
|
@ -19,7 +20,8 @@ import {
|
||||||
Button as TremorButton,
|
Button as TremorButton,
|
||||||
Icon
|
Icon
|
||||||
} from "@tremor/react";
|
} from "@tremor/react";
|
||||||
import { Button, Form, Input, Select, message, InputNumber, Tooltip } from "antd";
|
import NumericalInput from "../shared/numerical_input";
|
||||||
|
import { Button, Form, Input, Select, message, Tooltip } from "antd";
|
||||||
import { InfoCircleOutlined } from '@ant-design/icons';
|
import { InfoCircleOutlined } from '@ant-design/icons';
|
||||||
import { PencilAltIcon, TrashIcon } from "@heroicons/react/outline";
|
import { PencilAltIcon, TrashIcon } from "@heroicons/react/outline";
|
||||||
import { getModelDisplayName } from "../key_team_helpers/fetch_available_models_team_key";
|
import { getModelDisplayName } from "../key_team_helpers/fetch_available_models_team_key";
|
||||||
|
@ -338,7 +340,7 @@ const OrganizationInfoView: React.FC<OrganizationInfoProps> = ({
|
||||||
name="organization_alias"
|
name="organization_alias"
|
||||||
rules={[{ required: true, message: "Please input an organization name" }]}
|
rules={[{ required: true, message: "Please input an organization name" }]}
|
||||||
>
|
>
|
||||||
<Input />
|
<TextInput />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Models" name="models">
|
<Form.Item label="Models" name="models">
|
||||||
|
@ -358,7 +360,7 @@ const OrganizationInfoView: React.FC<OrganizationInfoProps> = ({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Max Budget (USD)" name="max_budget">
|
<Form.Item label="Max Budget (USD)" name="max_budget">
|
||||||
<InputNumber step={0.01} precision={2} style={{ width: "100%" }} />
|
<NumericalInput step={0.01} precision={2} style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Reset Budget" name="budget_duration">
|
<Form.Item label="Reset Budget" name="budget_duration">
|
||||||
|
@ -370,11 +372,11 @@ const OrganizationInfoView: React.FC<OrganizationInfoProps> = ({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Tokens per minute Limit (TPM)" name="tpm_limit">
|
<Form.Item label="Tokens per minute Limit (TPM)" name="tpm_limit">
|
||||||
<InputNumber step={1} style={{ width: "100%" }} />
|
<NumericalInput step={1} style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Requests per minute Limit (RPM)" name="rpm_limit">
|
<Form.Item label="Requests per minute Limit (RPM)" name="rpm_limit">
|
||||||
<InputNumber step={1} style={{ width: "100%" }} />
|
<NumericalInput step={1} style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Metadata" name="metadata">
|
<Form.Item label="Metadata" name="metadata">
|
||||||
|
|
|
@ -19,8 +19,9 @@ import {
|
||||||
TabPanels,
|
TabPanels,
|
||||||
TabPanel,
|
TabPanel,
|
||||||
} from "@tremor/react";
|
} from "@tremor/react";
|
||||||
|
import NumericalInput from "./shared/numerical_input";
|
||||||
import { Input } from "antd";
|
import { Input } from "antd";
|
||||||
import { Modal, Form, InputNumber, Tooltip, Select as Select2 } from "antd";
|
import { Modal, Form, Tooltip, Select as Select2 } from "antd";
|
||||||
import { InfoCircleOutlined } from '@ant-design/icons';
|
import { InfoCircleOutlined } from '@ant-design/icons';
|
||||||
import { PencilAltIcon, TrashIcon, RefreshIcon } from "@heroicons/react/outline";
|
import { PencilAltIcon, TrashIcon, RefreshIcon } from "@heroicons/react/outline";
|
||||||
import { TextInput } from "@tremor/react";
|
import { TextInput } from "@tremor/react";
|
||||||
|
@ -321,7 +322,7 @@ const OrganizationsTable: React.FC<OrganizationsTableProps> = ({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Max Budget (USD)" name="max_budget">
|
<Form.Item label="Max Budget (USD)" name="max_budget">
|
||||||
<InputNumber step={0.01} precision={2} width={200} />
|
<NumericalInput step={0.01} precision={2} width={200} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="Reset Budget" name="budget_duration">
|
<Form.Item label="Reset Budget" name="budget_duration">
|
||||||
<Select2 defaultValue={null} placeholder="n/a">
|
<Select2 defaultValue={null} placeholder="n/a">
|
||||||
|
@ -331,10 +332,10 @@ const OrganizationsTable: React.FC<OrganizationsTableProps> = ({
|
||||||
</Select2>
|
</Select2>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="Tokens per minute Limit (TPM)" name="tpm_limit">
|
<Form.Item label="Tokens per minute Limit (TPM)" name="tpm_limit">
|
||||||
<InputNumber step={1} width={400} />
|
<NumericalInput step={1} width={400} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="Requests per minute Limit (RPM)" name="rpm_limit">
|
<Form.Item label="Requests per minute Limit (RPM)" name="rpm_limit">
|
||||||
<InputNumber step={1} width={400} />
|
<NumericalInput step={1} width={400} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Metadata" name="metadata">
|
<Form.Item label="Metadata" name="metadata">
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
import React from "react";
|
||||||
|
import { NumberInput } from "@tremor/react";
|
||||||
|
|
||||||
|
interface NumericalInputProps {
|
||||||
|
step?: number;
|
||||||
|
style?: React.CSSProperties;
|
||||||
|
placeholder?: string;
|
||||||
|
min?: number;
|
||||||
|
max?: number;
|
||||||
|
onChange?: any; // Using any to avoid type conflicts with Tremor's NumberInput
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A reusable numerical input component
|
||||||
|
* @param {Object} props - Component props
|
||||||
|
* @param {number} [props.step=0.01] - Step increment for the input
|
||||||
|
* @param {Object} [props.style] - Custom styles to apply
|
||||||
|
* @param {string} [props.placeholder="Enter a numerical value"] - Placeholder text
|
||||||
|
* @param {number} [props.min] - Minimum value
|
||||||
|
* @param {number} [props.max] - Maximum value
|
||||||
|
* @param {Function} [props.onChange] - On change handler
|
||||||
|
* @param {any} props.rest - Additional props passed to NumberInput
|
||||||
|
*/
|
||||||
|
const NumericalInput: React.FC<NumericalInputProps> = ({
|
||||||
|
step = 0.01,
|
||||||
|
style = { width: "100%" },
|
||||||
|
placeholder = "Enter a numerical value",
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
onChange,
|
||||||
|
...rest
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<NumberInput
|
||||||
|
onWheel={ event => event.currentTarget.blur()}
|
||||||
|
step={step}
|
||||||
|
style={style}
|
||||||
|
placeholder={placeholder}
|
||||||
|
min={min}
|
||||||
|
max={max}
|
||||||
|
onChange={onChange}
|
||||||
|
{...rest}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default NumericalInput;
|
|
@ -1,4 +1,5 @@
|
||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
|
import NumericalInput from "../shared/numerical_input";
|
||||||
import {
|
import {
|
||||||
Card,
|
Card,
|
||||||
Title,
|
Title,
|
||||||
|
@ -20,7 +21,7 @@ import {
|
||||||
Icon
|
Icon
|
||||||
} from "@tremor/react";
|
} from "@tremor/react";
|
||||||
import { teamInfoCall, teamMemberDeleteCall, teamMemberAddCall, teamMemberUpdateCall, Member, teamUpdateCall } from "@/components/networking";
|
import { teamInfoCall, teamMemberDeleteCall, teamMemberAddCall, teamMemberUpdateCall, Member, teamUpdateCall } from "@/components/networking";
|
||||||
import { Button, Form, Input, Select, message, InputNumber, Tooltip } from "antd";
|
import { Button, Form, Input, Select, message, Tooltip } from "antd";
|
||||||
import { InfoCircleOutlined } from '@ant-design/icons';
|
import { InfoCircleOutlined } from '@ant-design/icons';
|
||||||
import {
|
import {
|
||||||
Select as Select2,
|
Select as Select2,
|
||||||
|
@ -390,7 +391,7 @@ const TeamInfoView: React.FC<TeamInfoProps> = ({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Max Budget (USD)" name="max_budget">
|
<Form.Item label="Max Budget (USD)" name="max_budget">
|
||||||
<InputNumber step={0.01} precision={2} style={{ width: "100%" }} />
|
<NumericalInput step={0.01} precision={2} style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Reset Budget" name="budget_duration">
|
<Form.Item label="Reset Budget" name="budget_duration">
|
||||||
|
@ -402,11 +403,11 @@ const TeamInfoView: React.FC<TeamInfoProps> = ({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Tokens per minute Limit (TPM)" name="tpm_limit">
|
<Form.Item label="Tokens per minute Limit (TPM)" name="tpm_limit">
|
||||||
<InputNumber step={1} style={{ width: "100%" }} />
|
<NumericalInput step={1} style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Requests per minute Limit (RPM)" name="rpm_limit">
|
<Form.Item label="Requests per minute Limit (RPM)" name="rpm_limit">
|
||||||
<InputNumber step={1} style={{ width: "100%" }} />
|
<NumericalInput step={1} style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item
|
<Form.Item
|
||||||
|
|
|
@ -18,10 +18,10 @@ import {
|
||||||
Form,
|
Form,
|
||||||
Input,
|
Input,
|
||||||
Select as Select2,
|
Select as Select2,
|
||||||
InputNumber,
|
|
||||||
message,
|
message,
|
||||||
Tooltip
|
Tooltip
|
||||||
} from "antd";
|
} from "antd";
|
||||||
|
import NumericalInput from "./shared/numerical_input";
|
||||||
import { fetchAvailableModelsForTeamOrKey, getModelDisplayName, unfurlWildcardModelsInList } from "./key_team_helpers/fetch_available_models_team_key";
|
import { fetchAvailableModelsForTeamOrKey, getModelDisplayName, unfurlWildcardModelsInList } from "./key_team_helpers/fetch_available_models_team_key";
|
||||||
import { Select, SelectItem } from "@tremor/react";
|
import { Select, SelectItem } from "@tremor/react";
|
||||||
import { InfoCircleOutlined } from '@ant-design/icons';
|
import { InfoCircleOutlined } from '@ant-design/icons';
|
||||||
|
@ -690,7 +690,7 @@ const Teams: React.FC<TeamProps> = ({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="Max Budget (USD)" name="max_budget">
|
<Form.Item label="Max Budget (USD)" name="max_budget">
|
||||||
<InputNumber step={0.01} precision={2} width={200} />
|
<NumericalInput step={0.01} precision={2} width={200} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
className="mt-8"
|
className="mt-8"
|
||||||
|
@ -707,13 +707,13 @@ const Teams: React.FC<TeamProps> = ({
|
||||||
label="Tokens per minute Limit (TPM)"
|
label="Tokens per minute Limit (TPM)"
|
||||||
name="tpm_limit"
|
name="tpm_limit"
|
||||||
>
|
>
|
||||||
<InputNumber step={1} width={400} />
|
<NumericalInput step={1} width={400} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label="Requests per minute Limit (RPM)"
|
label="Requests per minute Limit (RPM)"
|
||||||
name="rpm_limit"
|
name="rpm_limit"
|
||||||
>
|
>
|
||||||
<InputNumber step={1} width={400} />
|
<NumericalInput step={1} width={400} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Accordion className="mt-20 mb-8">
|
<Accordion className="mt-20 mb-8">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue