Spaces:
Sleeping
Sleeping
/** | |
* 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; | |