Spaces:
Paused
Paused
| /** | |
| * Modal to add fallbacks to the proxy router config | |
| */ | |
| import React, { useState, useEffect, useRef } from "react"; | |
| import { Button, TextInput, Grid, Col } from "@tremor/react"; | |
| import { Select, SelectItem, MultiSelect, MultiSelectItem, Card, Metric, Text, Title, Subtitle, Accordion, AccordionHeader, AccordionBody, } from "@tremor/react"; | |
| import { CopyToClipboard } from 'react-copy-to-clipboard'; | |
| import { setCallbacksCall } from "./networking"; | |
| import { | |
| Button as Button2, | |
| Modal, | |
| Form, | |
| Input, | |
| InputNumber, | |
| Select as Select2, | |
| message, | |
| } from "antd"; | |
| import { keyCreateCall, slackBudgetAlertsHealthCheck, modelAvailableCall } from "./networking"; | |
| import { list } from "postcss"; | |
| const { Option } = Select2; | |
| interface AddFallbacksProps { | |
| models: string[] | undefined; | |
| accessToken: string; | |
| routerSettings: { [key: string]: any; } | |
| setRouterSettings: React.Dispatch<React.SetStateAction<{ [key: string]: any }>>; | |
| } | |
| const AddFallbacks: React.FC<AddFallbacksProps> = ({ | |
| models, | |
| accessToken, | |
| routerSettings, | |
| setRouterSettings | |
| }) => { | |
| const [form] = Form.useForm(); | |
| const [isModalVisible, setIsModalVisible] = useState(false); | |
| const [selectedModel, setSelectedModel] = useState(""); | |
| const handleOk = () => { | |
| setIsModalVisible(false); | |
| form.resetFields(); | |
| }; | |
| const handleCancel = () => { | |
| setIsModalVisible(false); | |
| form.resetFields(); | |
| }; | |
| const updateFallbacks = (formValues: Record<string, any>) => { | |
| // Print the received value | |
| console.log(formValues); | |
| // Extract model_name and models from formValues | |
| const { model_name, models } = formValues; | |
| // Create new fallback | |
| const newFallback = { [model_name]: models }; | |
| // Get current fallbacks, or an empty array if it's null | |
| const currentFallbacks = routerSettings.fallbacks || []; | |
| // Add new fallback to the current fallbacks | |
| const updatedFallbacks = [...currentFallbacks, newFallback]; | |
| // Create a new routerSettings object with updated fallbacks | |
| const updatedRouterSettings = { ...routerSettings, fallbacks: updatedFallbacks }; | |
| // Print updated routerSettings | |
| console.log(updatedRouterSettings); | |
| const payload = { | |
| router_settings: updatedRouterSettings | |
| }; | |
| try { | |
| setCallbacksCall(accessToken, payload); | |
| // Update routerSettings state | |
| setRouterSettings(updatedRouterSettings); | |
| } catch (error) { | |
| message.error("Failed to update router settings: " + error, 20); | |
| } | |
| message.success("router settings updated successfully"); | |
| setIsModalVisible(false) | |
| form.resetFields(); | |
| }; | |
| return ( | |
| <div> | |
| <Button className="mx-auto" onClick={() => setIsModalVisible(true)}> | |
| + Add Fallbacks | |
| </Button> | |
| <Modal | |
| title="Add Fallbacks" | |
| visible={isModalVisible} | |
| width={800} | |
| footer={null} | |
| onOk={handleOk} | |
| onCancel={handleCancel} | |
| > | |
| <Form | |
| form={form} | |
| onFinish={updateFallbacks} | |
| labelCol={{ span: 8 }} | |
| wrapperCol={{ span: 16 }} | |
| labelAlign="left" | |
| > | |
| <> | |
| <Form.Item | |
| label="Public Model Name" | |
| name="model_name" | |
| rules={[{ required: true, message: 'Set the model to fallback for' }]} | |
| help="required" | |
| > | |
| <Select defaultValue={selectedModel}> | |
| {models && models.map((model: string, index) => ( | |
| <SelectItem | |
| key={index} | |
| value={model} | |
| onClick={() => setSelectedModel(model)} | |
| > | |
| {model} | |
| </SelectItem> | |
| )) | |
| } | |
| </Select> | |
| </Form.Item> | |
| <Form.Item | |
| label="Fallback Models" | |
| name="models" | |
| rules={[{ required: true, message: 'Please select a model' }]} | |
| help="required" | |
| > | |
| <MultiSelect value={models}> | |
| {models && | |
| models.filter(data => data != selectedModel).map((model: string) => ( | |
| ( | |
| <MultiSelectItem key={model} value={model}> | |
| {model} | |
| </MultiSelectItem> | |
| ) | |
| ))} | |
| </MultiSelect> | |
| </Form.Item> | |
| </> | |
| <div style={{ textAlign: "right", marginTop: "10px" }}> | |
| <Button2 htmlType="submit">Add Fallbacks</Button2> | |
| </div> | |
| </Form> | |
| </Modal> | |
| </div> | |
| ); | |
| }; | |
| export default AddFallbacks; | |