|
import React, { useState, useEffect } from "react"; |
|
import { |
|
Card, |
|
Title, |
|
Subtitle, |
|
Table, |
|
TableHead, |
|
TableRow, |
|
Badge, |
|
TableHeaderCell, |
|
TableCell, |
|
TableBody, |
|
Metric, |
|
Text, |
|
Grid, |
|
Button, |
|
TextInput, |
|
Select as Select2, |
|
SelectItem, |
|
Col, |
|
Accordion, |
|
AccordionBody, |
|
AccordionHeader, |
|
AccordionList, |
|
} from "@tremor/react"; |
|
import { |
|
TabPanel, |
|
TabPanels, |
|
TabGroup, |
|
TabList, |
|
Tab, |
|
Icon, |
|
} from "@tremor/react"; |
|
import { |
|
getCallbacksCall, |
|
setCallbacksCall, |
|
getGeneralSettingsCall, |
|
deletePassThroughEndpointsCall, |
|
getPassThroughEndpointsCall, |
|
serviceHealthCheck, |
|
updateConfigFieldSetting, |
|
deleteConfigFieldSetting, |
|
} from "./networking"; |
|
import { |
|
Modal, |
|
Form, |
|
Input, |
|
Select, |
|
Button as Button2, |
|
message, |
|
InputNumber, |
|
} from "antd"; |
|
import { |
|
InformationCircleIcon, |
|
PencilAltIcon, |
|
PencilIcon, |
|
StatusOnlineIcon, |
|
TrashIcon, |
|
RefreshIcon, |
|
CheckCircleIcon, |
|
XCircleIcon, |
|
QuestionMarkCircleIcon, |
|
} from "@heroicons/react/outline"; |
|
import AddFallbacks from "./add_fallbacks"; |
|
import AddPassThroughEndpoint from "./add_pass_through"; |
|
import openai from "openai"; |
|
import Paragraph from "antd/es/skeleton/Paragraph"; |
|
interface GeneralSettingsPageProps { |
|
accessToken: string | null; |
|
userRole: string | null; |
|
userID: string | null; |
|
modelData: any; |
|
} |
|
|
|
|
|
interface routingStrategyArgs { |
|
ttl?: number; |
|
lowest_latency_buffer?: number; |
|
} |
|
|
|
interface nestedFieldItem { |
|
field_name: string; |
|
field_type: string; |
|
field_value: any; |
|
field_description: string; |
|
stored_in_db: boolean | null; |
|
} |
|
|
|
export interface passThroughItem { |
|
path: string |
|
target: string |
|
headers: object |
|
} |
|
|
|
|
|
|
|
|
|
const PassThroughSettings: React.FC<GeneralSettingsPageProps> = ({ |
|
accessToken, |
|
userRole, |
|
userID, |
|
modelData, |
|
}) => { |
|
const [generalSettings, setGeneralSettings] = useState<passThroughItem[]>( |
|
[] |
|
); |
|
useEffect(() => { |
|
if (!accessToken || !userRole || !userID) { |
|
return; |
|
} |
|
getPassThroughEndpointsCall(accessToken).then((data) => { |
|
let general_settings = data["endpoints"]; |
|
setGeneralSettings(general_settings); |
|
}); |
|
}, [accessToken, userRole, userID]); |
|
|
|
|
|
const handleResetField = (fieldName: string, idx: number) => { |
|
if (!accessToken) { |
|
return; |
|
} |
|
|
|
try { |
|
deletePassThroughEndpointsCall(accessToken, fieldName); |
|
|
|
|
|
const updatedSettings = generalSettings.filter((setting) => setting.path !== fieldName); |
|
setGeneralSettings(updatedSettings); |
|
|
|
message.success("Endpoint deleted successfully."); |
|
|
|
} catch (error) { |
|
|
|
} |
|
}; |
|
|
|
|
|
if (!accessToken) { |
|
return null; |
|
} |
|
|
|
|
|
|
|
return ( |
|
<div className="w-full mx-4"> |
|
<TabGroup className="gap-2 p-8 h-[75vh] w-full mt-2"> |
|
<Card> |
|
<Table> |
|
<TableHead> |
|
<TableRow> |
|
<TableHeaderCell>Path</TableHeaderCell> |
|
<TableHeaderCell>Target</TableHeaderCell> |
|
<TableHeaderCell>Headers</TableHeaderCell> |
|
<TableHeaderCell>Action</TableHeaderCell> |
|
</TableRow> |
|
</TableHead> |
|
<TableBody> |
|
{generalSettings.map((value, index) => ( |
|
<TableRow key={index}> |
|
<TableCell> |
|
<Text>{value.path}</Text> |
|
</TableCell> |
|
<TableCell> |
|
{ |
|
value.target |
|
} |
|
</TableCell> |
|
<TableCell> |
|
{ |
|
JSON.stringify(value.headers) |
|
} |
|
</TableCell> |
|
<TableCell> |
|
<Icon |
|
icon={TrashIcon} |
|
color="red" |
|
onClick={() => |
|
handleResetField(value.path, index) |
|
} |
|
> |
|
Reset |
|
</Icon> |
|
</TableCell> |
|
</TableRow> |
|
))} |
|
</TableBody> |
|
</Table> |
|
<AddPassThroughEndpoint accessToken={accessToken} setPassThroughItems={setGeneralSettings} passThroughItems={generalSettings}/> |
|
</Card> |
|
</TabGroup> |
|
</div> |
|
); |
|
}; |
|
|
|
export default PassThroughSettings; |
|
|