Spaces:
Sleeping
Sleeping
File size: 4,977 Bytes
c40c75a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
import React, { useState } from "react";
import {
Card,
Form,
Button,
Tooltip,
Typography,
Select as AntdSelect,
Input,
Switch,
Modal
} from "antd";
import type { UploadProps } from "antd/es/upload";
import { Providers, providerLogoMap } from "../provider_info_helpers";
import type { FormInstance } from "antd";
import ProviderSpecificFields from "../add_model/provider_specific_fields";
import { TextInput } from "@tremor/react";
import { CredentialItem } from "../networking";
const { Title, Link } = Typography;
interface AddCredentialsModalProps {
isVisible: boolean;
onCancel: () => void;
onAddCredential: (values: any) => void;
onUpdateCredential: (values: any) => void;
uploadProps: UploadProps;
addOrEdit: "add" | "edit";
existingCredential: CredentialItem | null;
}
const AddCredentialsModal: React.FC<AddCredentialsModalProps> = ({
isVisible,
onCancel,
onAddCredential,
onUpdateCredential,
uploadProps,
addOrEdit,
existingCredential
}) => {
const [form] = Form.useForm();
const [selectedProvider, setSelectedProvider] = useState<Providers>(Providers.OpenAI);
const [showAdvancedSettings, setShowAdvancedSettings] = useState(false);
console.log(`existingCredential in add credentials tab: ${JSON.stringify(existingCredential)}`);
const handleSubmit = (values: any) => {
if (addOrEdit === "add") {
onAddCredential(values);
} else {
onUpdateCredential(values);
}
form.resetFields();
};
return (
<Modal
title={addOrEdit === "add" ? "Add New Credential" : "Edit Credential"}
visible={isVisible}
onCancel={() => {
onCancel();
form.resetFields();
}}
footer={null}
width={600}
>
<Form
form={form}
onFinish={handleSubmit}
layout="vertical"
>
{/* Credential Name */}
<Form.Item
label="Credential Name:"
name="credential_name"
rules={[{ required: true, message: "Credential name is required" }]}
initialValue={existingCredential?.credential_name}
>
<TextInput
placeholder="Enter a friendly name for these credentials"
disabled={existingCredential?.credential_name ? true : false}
/>
</Form.Item>
{/* Provider Selection */}
<Form.Item
rules={[{ required: true, message: "Required" }]}
label="Provider:"
name="custom_llm_provider"
tooltip="Helper to auto-populate provider specific fields"
>
<AntdSelect
value={existingCredential?.credential_info.custom_llm_provider || selectedProvider}
onChange={(value) => {
setSelectedProvider(value as Providers);
}}
>
{Object.entries(Providers).map(([providerEnum, providerDisplayName]) => (
<AntdSelect.Option
key={providerEnum}
value={providerEnum}
>
<div className="flex items-center space-x-2">
<img
src={providerLogoMap[providerDisplayName]}
alt={`${providerEnum} logo`}
className="w-5 h-5"
onError={(e) => {
const target = e.target as HTMLImageElement;
const parent = target.parentElement;
if (parent) {
const fallbackDiv = document.createElement('div');
fallbackDiv.className = 'w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs';
fallbackDiv.textContent = providerDisplayName.charAt(0);
parent.replaceChild(fallbackDiv, target);
}
}}
/>
<span>{providerDisplayName}</span>
</div>
</AntdSelect.Option>
))}
</AntdSelect>
</Form.Item>
<ProviderSpecificFields
selectedProvider={selectedProvider}
uploadProps={uploadProps}
/>
{/* Modal Footer */}
<div className="flex justify-between items-center">
<Tooltip title="Get help on our github">
<Link href="https://github.com/BerriAI/litellm/issues">
Need Help?
</Link>
</Tooltip>
<div>
<Button
onClick={() => {
onCancel();
form.resetFields();
}}
style={{ marginRight: 10 }}
>
Cancel
</Button>
<Button
htmlType="submit"
>
{addOrEdit === "add" ? "Add Credential" : "Update Credential"}
</Button>
</div>
</div>
</Form>
</Modal>
);
};
export default AddCredentialsModal; |