import React, { useState, useEffect } from "react"; import { Card, Title, Subtitle, Table, TableHead, TableRow, Badge, TableHeaderCell, TableCell, TableBody, Metric, Text, Grid, Button, TextInput, Col, } from "@tremor/react"; import { getCallbacksCall, setCallbacksCall } from "./networking"; import { Modal, Form, Input, Select, Button as Button2, message } from "antd"; import StaticGenerationSearchParamsBailoutProvider from "next/dist/client/components/static-generation-searchparams-bailout-provider"; interface SettingsPageProps { accessToken: string | null; userRole: string | null; userID: string | null; } const Settings: React.FC = ({ accessToken, userRole, userID, }) => { const [callbacks, setCallbacks] = useState([]); const [isModalVisible, setIsModalVisible] = useState(false); const [form] = Form.useForm(); const [selectedCallback, setSelectedCallback] = useState(null); useEffect(() => { if (!accessToken || !userRole || !userID) { return; } getCallbacksCall(accessToken, userID, userRole).then((data) => { console.log("callbacks", data); let callbacks_data = data.data; setCallbacks(callbacks_data); }); }, [accessToken, userRole, userID]); const handleAddCallback = () => { console.log("Add callback clicked"); setIsModalVisible(true); }; const handleCancel = () => { setIsModalVisible(false); form.resetFields(); setSelectedCallback(null); }; const handleSaveChanges = (callback: any) => { if (!accessToken) { return; } const updatedVariables = Object.fromEntries( Object.entries(callback.variables).map(([key, value]) => [key, (document.querySelector(`input[name="${key}"]`) as HTMLInputElement)?.value || value]) ); const payload = { environment_variables: updatedVariables, }; try { setCallbacksCall(accessToken, payload); } catch (error) { message.error("Failed to update callback: " + error, 20); } message.success("Callback updated successfully"); }; const handleOk = () => { if (!accessToken) { return; } // Handle form submission form.validateFields().then((values) => { // Call API to add the callback console.log("Form values:", values); let payload; if (values.callback === 'langfuse') { payload = { environment_variables: { LANGFUSE_PUBLIC_KEY: values.langfusePublicKey, LANGFUSE_SECRET_KEY: values.langfusePrivateKey }, litellm_settings: { success_callback: [values.callback] } }; setCallbacksCall(accessToken, payload); // add langfuse to callbacks setCallbacks(callbacks ? [...callbacks, values.callback] : [values.callback]); } else if (values.callback === 'slack') { payload = { general_settings: { alerting: ["slack"], alerting_threshold: 300 }, environment_variables: { SLACK_WEBHOOK_URL: values.slackWebhookUrl } }; setCallbacksCall(accessToken, payload); // add slack to callbacks setCallbacks(callbacks ? [...callbacks, values.callback] : [values.callback]); } else { payload = { error: 'Invalid callback value' }; } setIsModalVisible(false); form.resetFields(); setSelectedCallback(null); }); }; const handleCallbackChange = (value: string) => { setSelectedCallback(value); }; return (
Logging Callbacks Callback Callback Env Vars {/* Test Callback */} {callbacks.map((callback, index) => ( {callback.name}
    {Object.entries(callback.variables).map(([key, value]) => (
  • {key}
  • ))}
))}
{selectedCallback === 'langfuse' && ( <> )} {selectedCallback === 'slack' && ( )}
Save
); }; export default Settings;