diff --git a/ui/litellm-dashboard/src/app/(dashboard)/agents/components/new-agent-dialog.tsx b/ui/litellm-dashboard/src/app/(dashboard)/agents/components/new-agent-dialog.tsx new file mode 100644 index 00000000000..20b64e66737 --- /dev/null +++ b/ui/litellm-dashboard/src/app/(dashboard)/agents/components/new-agent-dialog.tsx @@ -0,0 +1,79 @@ +"use client"; + +import { useState } from "react"; +import { Modal, Form, Input, message } from "antd"; +import { createCloudAgent } from "@/lib/cloud-agents-client"; + +interface NewAgentDialogProps { + open: boolean; + onClose: () => void; + onCreated: () => void; + accessToken: string | null; +} + +export default function NewAgentDialog({ + open, + onClose, + onCreated, + accessToken, +}: NewAgentDialogProps) { + const [form] = Form.useForm<{ name: string; model: string; system_prompt?: string }>(); + const [submitting, setSubmitting] = useState(false); + + const handleOk = async () => { + try { + const values = await form.validateFields(); + setSubmitting(true); + await createCloudAgent(accessToken, values); + message.success(`Agent "${values.name}" created`); + form.resetFields(); + onCreated(); + } catch (e) { + if (e instanceof Error) { + message.error(e.message); + } + } finally { + setSubmitting(false); + } + }; + + return ( + { + form.resetFields(); + onClose(); + }} + okText="Create" + confirmLoading={submitting} + destroyOnClose + data-testid="new-agent-dialog" + > +
+ + + + + + + + + +
+
+ ); +}