@sqlrooms/ai 0.24.24 → 0.24.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -1
- package/dist/AiSettingsSlice.d.ts +148 -0
- package/dist/AiSettingsSlice.d.ts.map +1 -0
- package/dist/AiSettingsSlice.js +180 -0
- package/dist/AiSettingsSlice.js.map +1 -0
- package/dist/AiSlice.d.ts +15 -24
- package/dist/AiSlice.d.ts.map +1 -1
- package/dist/AiSlice.js +99 -32
- package/dist/AiSlice.js.map +1 -1
- package/dist/analysis.d.ts +1 -3
- package/dist/analysis.d.ts.map +1 -1
- package/dist/analysis.js +2 -4
- package/dist/analysis.js.map +1 -1
- package/dist/components/AnalysisResult.js +1 -1
- package/dist/components/AnalysisResult.js.map +1 -1
- package/dist/components/settings/AiModelParameters.d.ts +6 -0
- package/dist/components/settings/AiModelParameters.d.ts.map +1 -0
- package/dist/components/settings/AiModelParameters.js +91 -0
- package/dist/components/settings/AiModelParameters.js.map +1 -0
- package/dist/components/settings/AiModelUsage.d.ts +18 -0
- package/dist/components/settings/AiModelUsage.d.ts.map +1 -0
- package/dist/components/settings/AiModelUsage.js +60 -0
- package/dist/components/settings/AiModelUsage.js.map +1 -0
- package/dist/components/settings/AiModelsSettings.d.ts +10 -0
- package/dist/components/settings/AiModelsSettings.d.ts.map +1 -0
- package/dist/components/settings/AiModelsSettings.js +229 -0
- package/dist/components/settings/AiModelsSettings.js.map +1 -0
- package/dist/components/settings/AiProvidersSettings.d.ts +3 -0
- package/dist/components/settings/AiProvidersSettings.d.ts.map +1 -0
- package/dist/components/settings/AiProvidersSettings.js +88 -0
- package/dist/components/settings/AiProvidersSettings.js.map +1 -0
- package/dist/components/settings/AiSettingsPanel.d.ts +17 -0
- package/dist/components/settings/AiSettingsPanel.d.ts.map +1 -0
- package/dist/components/settings/AiSettingsPanel.js +20 -0
- package/dist/components/settings/AiSettingsPanel.js.map +1 -0
- package/dist/components/tools/ToolResultErrorBoundary.d.ts +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +5 -5
- package/dist/utils.d.ts +17 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +31 -0
- package/dist/utils.js.map +1 -0
- package/package.json +12 -10
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { Button, Input, Label, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogTrigger, DialogFooter, useDisclosure, useToast, } from '@sqlrooms/ui';
|
|
4
|
+
import { Cone, Settings, Plus, Server, Key, Trash2, CirclePlus, } from 'lucide-react';
|
|
5
|
+
import { useStoreWithAiSettings } from '../../AiSettingsSlice';
|
|
6
|
+
export const AiProvidersSettings = () => {
|
|
7
|
+
const { toast } = useToast();
|
|
8
|
+
const updateProvider = useStoreWithAiSettings((state) => state.updateProvider);
|
|
9
|
+
const addProvider = useStoreWithAiSettings((state) => state.addProvider);
|
|
10
|
+
const removeProvider = useStoreWithAiSettings((state) => state.removeProvider);
|
|
11
|
+
const providers = useStoreWithAiSettings((state) => state.config.aiSettings.providers);
|
|
12
|
+
const modelProviders = React.useMemo(() => {
|
|
13
|
+
const result = {};
|
|
14
|
+
Object.entries(providers).forEach(([key, provider]) => {
|
|
15
|
+
result[key] = {
|
|
16
|
+
apiKey: provider.apiKey,
|
|
17
|
+
baseUrl: provider.baseUrl,
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
return result;
|
|
21
|
+
}, [providers]);
|
|
22
|
+
const [expandedProviders, setExpandedProviders] = useState(new Set());
|
|
23
|
+
// Dialog state for adding a new provider
|
|
24
|
+
const { isOpen, onOpen, onClose } = useDisclosure();
|
|
25
|
+
const [newProviderKey, setNewProviderKey] = useState('');
|
|
26
|
+
const [newProviderApiKey, setNewProviderApiKey] = useState('');
|
|
27
|
+
const [newProviderBaseUrl, setNewProviderBaseUrl] = useState('');
|
|
28
|
+
// Dialog state for delete confirmation
|
|
29
|
+
const { isOpen: isDeleteOpen, onOpen: onDeleteOpen, onClose: onDeleteClose, } = useDisclosure();
|
|
30
|
+
const [providerToDelete, setProviderToDelete] = useState(null);
|
|
31
|
+
const handleAddProvider = () => {
|
|
32
|
+
if (newProviderKey) {
|
|
33
|
+
// Check if provider already exists
|
|
34
|
+
if (providers[newProviderKey]) {
|
|
35
|
+
toast({
|
|
36
|
+
title: 'Provider already exists',
|
|
37
|
+
description: `A provider with the key "${newProviderKey}" already exists. Please choose a different key.`,
|
|
38
|
+
variant: 'destructive',
|
|
39
|
+
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
addProvider(newProviderKey, newProviderBaseUrl, newProviderApiKey);
|
|
43
|
+
setNewProviderKey('');
|
|
44
|
+
setNewProviderApiKey('');
|
|
45
|
+
setNewProviderBaseUrl('');
|
|
46
|
+
onClose();
|
|
47
|
+
toast({
|
|
48
|
+
title: 'Provider added successfully',
|
|
49
|
+
description: `Provider "${newProviderKey}" has been added.`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const handleUpdateProvider = (providerKey, field, value) => {
|
|
54
|
+
updateProvider(providerKey, { [field]: value });
|
|
55
|
+
};
|
|
56
|
+
const handleDeleteProvider = (providerKey) => {
|
|
57
|
+
setProviderToDelete({ key: providerKey });
|
|
58
|
+
onDeleteOpen();
|
|
59
|
+
};
|
|
60
|
+
const confirmDeleteProvider = () => {
|
|
61
|
+
if (providerToDelete) {
|
|
62
|
+
removeProvider(providerToDelete.key);
|
|
63
|
+
onDeleteClose();
|
|
64
|
+
setProviderToDelete(null);
|
|
65
|
+
toast({
|
|
66
|
+
title: 'Provider deleted successfully',
|
|
67
|
+
description: `Provider "${providerToDelete.key}" and its associated models have been removed.`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const toggleProviderExpanded = (providerKey) => {
|
|
72
|
+
setExpandedProviders((prev) => {
|
|
73
|
+
const newSet = new Set(prev);
|
|
74
|
+
if (newSet.has(providerKey)) {
|
|
75
|
+
newSet.delete(providerKey);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
newSet.add(providerKey);
|
|
79
|
+
}
|
|
80
|
+
return newSet;
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { className: "text-md flex items-center gap-2 pb-6 font-medium", children: [_jsx(Cone, { className: "h-4 w-4" }), "Providers"] }), _jsx("div", { className: "space-y-1", children: Object.entries(modelProviders).map(([providerKey, provider]) => {
|
|
84
|
+
const isExpanded = expandedProviders.has(providerKey);
|
|
85
|
+
return (_jsxs("div", { className: "space-y-0 rounded-lg p-0", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Label, { className: "w-20 flex-shrink-0 text-sm", children: providerKey.charAt(0).toUpperCase() + providerKey.slice(1) }), _jsx(Input, { id: `${providerKey}-apiKey`, type: "password", value: provider.apiKey, onChange: (e) => handleUpdateProvider(providerKey, 'apiKey', e.target.value), placeholder: "Enter API key", className: "flex-1" }), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => handleDeleteProvider(providerKey), className: "h-6 h-8 w-6 w-8 p-0 text-gray-500 hover:bg-gray-100 hover:text-gray-700", children: _jsx(Trash2, { className: "h-4 w-4" }) }), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => toggleProviderExpanded(providerKey), className: "h-8 w-8 flex-shrink-0", children: _jsx(Settings, { className: "h-4 w-4" }) })] }), isExpanded && (_jsxs("div", { className: "flex items-center gap-3 pt-1", children: [_jsx("div", { className: "w-20 flex-shrink-0" }), ' ', _jsxs("div", { className: "flex flex-1 items-center gap-3", children: [_jsx(Label, { htmlFor: `${providerKey}-baseUrl`, className: "text-muted-foreground flex-shrink-0 text-xs", children: "baseUrl:" }), _jsx(Input, { id: `${providerKey}-baseUrl`, type: "url", value: provider.baseUrl, onChange: (e) => handleUpdateProvider(providerKey, 'baseUrl', e.target.value), placeholder: "Enter base URL", className: "flex-1" })] }), _jsx("div", { className: "w-16 flex-shrink-0" }), ' '] }))] }, providerKey));
|
|
86
|
+
}) }), _jsx("div", { className: "flex w-full p-2", children: _jsxs(Button, { onClick: onOpen, variant: "secondary", size: "sm", children: [_jsx(CirclePlus, { className: "h-3 w-3" }), "Add"] }) }), _jsxs(Dialog, { open: isOpen, onOpenChange: (open) => (open ? onOpen() : onClose()), children: [_jsx(DialogTrigger, { asChild: true }), _jsxs(DialogContent, { className: "border-0 p-5", children: [_jsxs(DialogHeader, { className: "mb-1", children: [_jsxs(DialogTitle, { className: "flex items-center gap-2 text-base", children: [_jsx(Cone, { className: "h-4 w-4" }), " Add New Provider"] }), _jsx(DialogDescription, { className: "text-xs", children: "Configure a new model provider with API credentials." })] }), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Label, { htmlFor: "new-provider-key", className: "w-20 text-sm", children: "Key" }), _jsxs("div", { className: "relative flex-1", children: [_jsx(Cone, { className: "absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2" }), _jsx(Input, { id: "new-provider-key", value: newProviderKey, onChange: (e) => setNewProviderKey(e.target.value), placeholder: "e.g., anthropic", className: "pl-8" })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Label, { htmlFor: "new-provider-api-key", className: "w-20 text-sm", children: "API Key" }), _jsxs("div", { className: "relative flex-1", children: [_jsx(Key, { className: "absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2" }), _jsx(Input, { id: "new-provider-api-key", type: "password", value: newProviderApiKey, onChange: (e) => setNewProviderApiKey(e.target.value), placeholder: "Enter API key", className: "pl-8" })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Label, { htmlFor: "new-provider-url", className: "w-20 text-sm", children: "baseUrl" }), _jsxs("div", { className: "relative flex-1", children: [_jsx(Server, { className: "absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2" }), _jsx(Input, { id: "new-provider-url", type: "url", value: newProviderBaseUrl, onChange: (e) => setNewProviderBaseUrl(e.target.value), placeholder: "Enter base URL", className: "pl-8" })] })] }), _jsx("div", { className: "flex justify-end pt-1", children: _jsxs(Button, { size: "sm", onClick: handleAddProvider, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Add Provider"] }) })] })] })] }), _jsx(Dialog, { open: isDeleteOpen, onOpenChange: (open) => (open ? onDeleteOpen() : onDeleteClose()), children: _jsxs(DialogContent, { className: "border-0 p-5", children: [_jsxs(DialogHeader, { className: "mb-1", children: [_jsxs(DialogTitle, { className: "text-destructive flex items-center gap-2 text-base", children: [_jsx(Trash2, { className: "h-4 w-4" }), " Delete Provider"] }), _jsx(DialogDescription, { className: "text-xs", children: "This action cannot be undone. This will permanently delete the provider and all its associated models." })] }), _jsxs("div", { className: "py-2", children: [_jsxs("p", { className: "text-sm", children: ["Are you sure you want to delete the provider", ' ', _jsxs("strong", { children: ["\u201C", providerToDelete?.key, "\u201D"] }), "?"] }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "All models associated with this provider will also be removed." })] }), _jsxs(DialogFooter, { className: "gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", onClick: onDeleteClose, children: "Cancel" }), _jsxs(Button, { variant: "destructive", size: "sm", onClick: confirmDeleteProvider, children: [_jsx(Trash2, { className: "mr-2 h-4 w-4" }), "Delete Provider"] })] })] }) })] }));
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=AiProvidersSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiProvidersSettings.js","sourceRoot":"","sources":["../../../src/components/settings/AiProvidersSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {FC, useState} from 'react';\nimport {\n Button,\n Input,\n Label,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogTrigger,\n DialogFooter,\n useDisclosure,\n useToast,\n} from '@sqlrooms/ui';\nimport {\n Cone,\n Settings,\n Plus,\n Server,\n Key,\n Trash2,\n CirclePlus,\n} from 'lucide-react';\nimport {useStoreWithAiSettings} from '../../AiSettingsSlice';\n\nexport const AiProvidersSettings: FC = () => {\n const {toast} = useToast();\n const updateProvider = useStoreWithAiSettings(\n (state) => state.updateProvider,\n );\n const addProvider = useStoreWithAiSettings((state) => state.addProvider);\n const removeProvider = useStoreWithAiSettings(\n (state) => state.removeProvider,\n );\n const providers = useStoreWithAiSettings(\n (state) => state.config.aiSettings.providers,\n );\n const modelProviders = React.useMemo(() => {\n const result: Record<string, {apiKey: string; baseUrl: string}> = {};\n Object.entries(providers).forEach(([key, provider]) => {\n result[key] = {\n apiKey: provider.apiKey,\n baseUrl: provider.baseUrl,\n };\n });\n return result;\n }, [providers]);\n\n const [expandedProviders, setExpandedProviders] = useState<Set<string>>(\n new Set(),\n );\n\n // Dialog state for adding a new provider\n const {isOpen, onOpen, onClose} = useDisclosure();\n const [newProviderKey, setNewProviderKey] = useState('');\n const [newProviderApiKey, setNewProviderApiKey] = useState('');\n const [newProviderBaseUrl, setNewProviderBaseUrl] = useState('');\n\n // Dialog state for delete confirmation\n const {\n isOpen: isDeleteOpen,\n onOpen: onDeleteOpen,\n onClose: onDeleteClose,\n } = useDisclosure();\n const [providerToDelete, setProviderToDelete] = useState<{\n key: string;\n } | null>(null);\n\n const handleAddProvider = () => {\n if (newProviderKey) {\n // Check if provider already exists\n if (providers[newProviderKey]) {\n toast({\n title: 'Provider already exists',\n description: `A provider with the key \"${newProviderKey}\" already exists. Please choose a different key.`,\n variant: 'destructive',\n });\n return;\n }\n\n addProvider(newProviderKey, newProviderBaseUrl, newProviderApiKey);\n setNewProviderKey('');\n setNewProviderApiKey('');\n setNewProviderBaseUrl('');\n onClose();\n\n toast({\n title: 'Provider added successfully',\n description: `Provider \"${newProviderKey}\" has been added.`,\n });\n }\n };\n\n const handleUpdateProvider = (\n providerKey: string,\n field: 'apiKey' | 'baseUrl',\n value: string,\n ) => {\n updateProvider(providerKey, {[field]: value});\n };\n\n const handleDeleteProvider = (providerKey: string) => {\n setProviderToDelete({key: providerKey});\n onDeleteOpen();\n };\n\n const confirmDeleteProvider = () => {\n if (providerToDelete) {\n removeProvider(providerToDelete.key);\n onDeleteClose();\n setProviderToDelete(null);\n\n toast({\n title: 'Provider deleted successfully',\n description: `Provider \"${providerToDelete.key}\" and its associated models have been removed.`,\n });\n }\n };\n\n const toggleProviderExpanded = (providerKey: string) => {\n setExpandedProviders((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(providerKey)) {\n newSet.delete(providerKey);\n } else {\n newSet.add(providerKey);\n }\n return newSet;\n });\n };\n\n return (\n <div className=\"space-y-2\">\n <label className=\"text-md flex items-center gap-2 pb-6 font-medium\">\n <Cone className=\"h-4 w-4\" />\n Providers\n </label>\n\n {/* Existing Providers */}\n <div className=\"space-y-1\">\n {Object.entries(modelProviders).map(([providerKey, provider]) => {\n const isExpanded = expandedProviders.has(providerKey);\n\n return (\n <div key={providerKey} className=\"space-y-0 rounded-lg p-0\">\n {/* First row: Provider name, API key input, delete button, and cogwheel button */}\n <div className=\"flex items-center gap-3\">\n <Label className=\"w-20 flex-shrink-0 text-sm\">\n {providerKey.charAt(0).toUpperCase() + providerKey.slice(1)}\n </Label>\n <Input\n id={`${providerKey}-apiKey`}\n type=\"password\"\n value={provider.apiKey}\n onChange={(e) =>\n handleUpdateProvider(providerKey, 'apiKey', e.target.value)\n }\n placeholder=\"Enter API key\"\n className=\"flex-1\"\n />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleDeleteProvider(providerKey)}\n className=\"h-6 h-8 w-6 w-8 p-0 text-gray-500 hover:bg-gray-100 hover:text-gray-700\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => toggleProviderExpanded(providerKey)}\n className=\"h-8 w-8 flex-shrink-0\"\n >\n <Settings className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Second row: baseUrl input (toggleable) */}\n {isExpanded && (\n <div className=\"flex items-center gap-3 pt-1\">\n <div className=\"w-20 flex-shrink-0\" />{' '}\n {/* Spacer to align with provider name above */}\n <div className=\"flex flex-1 items-center gap-3\">\n <Label\n htmlFor={`${providerKey}-baseUrl`}\n className=\"text-muted-foreground flex-shrink-0 text-xs\"\n >\n baseUrl:\n </Label>\n <Input\n id={`${providerKey}-baseUrl`}\n type=\"url\"\n value={provider.baseUrl}\n onChange={(e) =>\n handleUpdateProvider(\n providerKey,\n 'baseUrl',\n e.target.value,\n )\n }\n placeholder=\"Enter base URL\"\n className=\"flex-1\"\n />\n </div>\n <div className=\"w-16 flex-shrink-0\" />{' '}\n {/* Spacer to align with delete and cogwheel buttons above */}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Add New Provider */}\n <div className=\"flex w-full p-2\">\n <Button onClick={onOpen} variant=\"secondary\" size=\"sm\">\n <CirclePlus className=\"h-3 w-3\" />\n Add\n </Button>\n </div>\n\n {/* Add New Provider Dialog */}\n <Dialog\n open={isOpen}\n onOpenChange={(open) => (open ? onOpen() : onClose())}\n >\n <DialogTrigger asChild>\n {/* handled via onOpen button above */}\n </DialogTrigger>\n <DialogContent className=\"border-0 p-5\">\n <DialogHeader className=\"mb-1\">\n <DialogTitle className=\"flex items-center gap-2 text-base\">\n <Cone className=\"h-4 w-4\" /> Add New Provider\n </DialogTitle>\n <DialogDescription className=\"text-xs\">\n Configure a new model provider with API credentials.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-3\">\n <Label htmlFor=\"new-provider-key\" className=\"w-20 text-sm\">\n Key\n </Label>\n <div className=\"relative flex-1\">\n <Cone className=\"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2\" />\n <Input\n id=\"new-provider-key\"\n value={newProviderKey}\n onChange={(e) => setNewProviderKey(e.target.value)}\n placeholder=\"e.g., anthropic\"\n className=\"pl-8\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <Label htmlFor=\"new-provider-api-key\" className=\"w-20 text-sm\">\n API Key\n </Label>\n <div className=\"relative flex-1\">\n <Key className=\"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2\" />\n <Input\n id=\"new-provider-api-key\"\n type=\"password\"\n value={newProviderApiKey}\n onChange={(e) => setNewProviderApiKey(e.target.value)}\n placeholder=\"Enter API key\"\n className=\"pl-8\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center gap-3\">\n <Label htmlFor=\"new-provider-url\" className=\"w-20 text-sm\">\n baseUrl\n </Label>\n <div className=\"relative flex-1\">\n <Server className=\"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2\" />\n <Input\n id=\"new-provider-url\"\n type=\"url\"\n value={newProviderBaseUrl}\n onChange={(e) => setNewProviderBaseUrl(e.target.value)}\n placeholder=\"Enter base URL\"\n className=\"pl-8\"\n />\n </div>\n </div>\n\n <div className=\"flex justify-end pt-1\">\n <Button size=\"sm\" onClick={handleAddProvider}>\n <Plus className=\"mr-2 h-4 w-4\" /> Add Provider\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n\n {/* Delete Confirmation Dialog */}\n <Dialog\n open={isDeleteOpen}\n onOpenChange={(open) => (open ? onDeleteOpen() : onDeleteClose())}\n >\n <DialogContent className=\"border-0 p-5\">\n <DialogHeader className=\"mb-1\">\n <DialogTitle className=\"text-destructive flex items-center gap-2 text-base\">\n <Trash2 className=\"h-4 w-4\" /> Delete Provider\n </DialogTitle>\n <DialogDescription className=\"text-xs\">\n This action cannot be undone. This will permanently delete the\n provider and all its associated models.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"py-2\">\n <p className=\"text-sm\">\n Are you sure you want to delete the provider{' '}\n <strong>“{providerToDelete?.key}”</strong>?\n </p>\n <p className=\"text-muted-foreground mt-1 text-xs\">\n All models associated with this provider will also be removed.\n </p>\n </div>\n\n <DialogFooter className=\"gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={onDeleteClose}>\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={confirmDeleteProvider}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete Provider\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FC, PropsWithChildren } from 'react';
|
|
2
|
+
import { UseDisclosureReturnValue } from '@sqlrooms/ui';
|
|
3
|
+
interface AiSettingsPanelProps {
|
|
4
|
+
disclosure: UseDisclosureReturnValue;
|
|
5
|
+
}
|
|
6
|
+
export declare const AiSettingsPanelBase: FC<PropsWithChildren<AiSettingsPanelProps>>;
|
|
7
|
+
export declare const AiSettingsPanel: FC<PropsWithChildren<AiSettingsPanelProps>> & {
|
|
8
|
+
ProvidersSettings: FC;
|
|
9
|
+
ModelsSettings: FC<import("./AiModelsSettings").AiModelsSettingsProps>;
|
|
10
|
+
ModelUsage: FC<{
|
|
11
|
+
className?: string;
|
|
12
|
+
modelUsage?: import("./AiModelUsage").ModelUsageData;
|
|
13
|
+
}>;
|
|
14
|
+
ModelParametersSettings: FC<import("./AiModelParameters").AiModelParametersProps>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=AiSettingsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiSettingsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/settings/AiSettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAS,wBAAwB,EAAC,MAAM,cAAc,CAAC;AAQ9D,UAAU,oBAAoB;IAC5B,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAClC,iBAAiB,CAAC,oBAAoB,CAAC,CAoBxC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAK1B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@sqlrooms/ui';
|
|
3
|
+
import { X } from 'lucide-react';
|
|
4
|
+
import { AiModelParameters } from './AiModelParameters';
|
|
5
|
+
import { AiModelUsage } from './AiModelUsage';
|
|
6
|
+
import { AiProvidersSettings } from './AiProvidersSettings';
|
|
7
|
+
import { AiModelsSettings } from './AiModelsSettings';
|
|
8
|
+
export const AiSettingsPanelBase = ({ disclosure, children }) => {
|
|
9
|
+
const { isOpen, onClose } = disclosure;
|
|
10
|
+
if (!isOpen)
|
|
11
|
+
return null;
|
|
12
|
+
return (_jsx("div", { className: "bg-background border-border w-full rounded-lg border shadow-sm", children: _jsxs("div", { className: "relative flex flex-col gap-12 overflow-y-auto p-6", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: onClose, className: "absolute right-2 top-2 z-10", children: _jsx(X, { className: "h-4 w-4" }) }), children] }) }));
|
|
13
|
+
};
|
|
14
|
+
export const AiSettingsPanel = Object.assign(AiSettingsPanelBase, {
|
|
15
|
+
ProvidersSettings: AiProvidersSettings,
|
|
16
|
+
ModelsSettings: AiModelsSettings,
|
|
17
|
+
ModelUsage: AiModelUsage,
|
|
18
|
+
ModelParametersSettings: AiModelParameters,
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=AiSettingsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiSettingsPanel.js","sourceRoot":"","sources":["../../../src/components/settings/AiSettingsPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,MAAM,EAA2B,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAC,CAAC,EAAC,MAAM,cAAc,CAAC;AAE/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAMpD,MAAM,CAAC,MAAM,mBAAmB,GAE5B,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAC,EAAE,EAAE;IAC7B,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,UAAU,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,CACL,cAAK,SAAS,EAAC,gEAAgE,YAC7E,eAAK,SAAS,EAAC,mDAAmD,aAChE,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,6BAA6B,YAEvC,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,GAClB,EACR,QAAQ,IACL,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;IAChE,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,UAAU,EAAE,YAAY;IACxB,uBAAuB,EAAE,iBAAiB;CAC3C,CAAC,CAAC","sourcesContent":["import {FC, PropsWithChildren} from 'react';\nimport {Button, UseDisclosureReturnValue} from '@sqlrooms/ui';\nimport {X} from 'lucide-react';\n\nimport {AiModelParameters} from './AiModelParameters';\nimport {AiModelUsage} from './AiModelUsage';\nimport {AiProvidersSettings} from './AiProvidersSettings';\nimport {AiModelsSettings} from './AiModelsSettings';\n\ninterface AiSettingsPanelProps {\n disclosure: UseDisclosureReturnValue;\n}\n\nexport const AiSettingsPanelBase: FC<\n PropsWithChildren<AiSettingsPanelProps>\n> = ({disclosure, children}) => {\n const {isOpen, onClose} = disclosure;\n if (!isOpen) return null;\n\n return (\n <div className=\"bg-background border-border w-full rounded-lg border shadow-sm\">\n <div className=\"relative flex flex-col gap-12 overflow-y-auto p-6\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n className=\"absolute right-2 top-2 z-10\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n {children}\n </div>\n </div>\n );\n};\n\nexport const AiSettingsPanel = Object.assign(AiSettingsPanelBase, {\n ProvidersSettings: AiProvidersSettings,\n ModelsSettings: AiModelsSettings,\n ModelUsage: AiModelUsage,\n ModelParametersSettings: AiModelParameters,\n});\n"]}
|
|
@@ -14,6 +14,6 @@ export declare class ToolCallErrorBoundary extends React.Component<{
|
|
|
14
14
|
hasError: boolean;
|
|
15
15
|
};
|
|
16
16
|
componentDidCatch(error: Error): void;
|
|
17
|
-
render(): string | number | bigint | boolean |
|
|
17
|
+
render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=ToolResultErrorBoundary.d.ts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -20,4 +20,13 @@ export * from './components/session/SessionDropdown';
|
|
|
20
20
|
export * from './components/session/SessionTitle';
|
|
21
21
|
export * from './components/session/SessionType';
|
|
22
22
|
export * from './components/tools/ToolErrorMessage';
|
|
23
|
+
export { createAiSettingsSlice, useStoreWithAiSettings, AiSettingsSliceConfig, createDefaultAiSettings, } from './AiSettingsSlice';
|
|
24
|
+
export type { AiSettingsSliceState } from './AiSettingsSlice';
|
|
25
|
+
export { AiSettingsPanel } from './components/settings/AiSettingsPanel';
|
|
26
|
+
export { AiProvidersSettings } from './components/settings/AiProvidersSettings';
|
|
27
|
+
export { AiModelsSettings } from './components/settings/AiModelsSettings';
|
|
28
|
+
export { AiModelParameters } from './components/settings/AiModelParameters';
|
|
29
|
+
export { AiModelUsage } from './components/settings/AiModelUsage';
|
|
30
|
+
export type { ModelUsageData } from './components/settings/AiModelUsage';
|
|
31
|
+
export { extractModelsFromSettings } from './utils';
|
|
23
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AAEpD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAC,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAC,eAAe,EAAC,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAC,mBAAmB,EAAC,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAC,iBAAiB,EAAC,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAC,YAAY,EAAC,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAC,yBAAyB,EAAC,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,4 +18,11 @@ export * from './components/session/SessionDropdown';
|
|
|
18
18
|
export * from './components/session/SessionTitle';
|
|
19
19
|
export * from './components/session/SessionType';
|
|
20
20
|
export * from './components/tools/ToolErrorMessage';
|
|
21
|
+
export { createAiSettingsSlice, useStoreWithAiSettings, AiSettingsSliceConfig, createDefaultAiSettings, } from './AiSettingsSlice';
|
|
22
|
+
export { AiSettingsPanel } from './components/settings/AiSettingsPanel';
|
|
23
|
+
export { AiProvidersSettings } from './components/settings/AiProvidersSettings';
|
|
24
|
+
export { AiModelsSettings } from './components/settings/AiModelsSettings';
|
|
25
|
+
export { AiModelParameters } from './components/settings/AiModelParameters';
|
|
26
|
+
export { AiModelUsage } from './components/settings/AiModelUsage';
|
|
27
|
+
export { extractModelsFromSettings } from './utils';
|
|
21
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {\n AiSliceConfig,\n createAiSlice,\n useStoreWithAi,\n createDefaultAiConfig,\n} from './AiSlice';\n\nexport type {AiSliceState} from './AiSlice';\nexport {QueryControls} from './components/QueryControls';\nexport {AnalysisResultsContainer} from './components/AnalysisResultsContainer';\nexport {AnalysisResult} from './components/AnalysisResult';\nexport {useScrollToBottom} from './hooks/useScrollToBottom';\nexport type {AiSliceTool} from './AiSlice';\nexport {QueryToolResult} from './components/tools/QueryToolResult';\nexport {getDefaultInstructions} from './analysis';\n\nexport * from './components/ModelSelector';\nexport * from './components/SessionControls';\nexport * from './components/QueryControls';\nexport * from './components/session/DeleteSessionDialog';\nexport * from './components/session/SessionActions';\nexport * from './components/session/SessionDropdown';\nexport * from './components/session/SessionTitle';\nexport * from './components/session/SessionType';\nexport * from './components/tools/ToolErrorMessage';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AAEpD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAC,eAAe,EAAC,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAC,mBAAmB,EAAC,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAC,iBAAiB,EAAC,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAC,YAAY,EAAC,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAC,yBAAyB,EAAC,MAAM,SAAS,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {\n AiSliceConfig,\n createAiSlice,\n useStoreWithAi,\n createDefaultAiConfig,\n} from './AiSlice';\n\nexport type {AiSliceState} from './AiSlice';\nexport {QueryControls} from './components/QueryControls';\nexport {AnalysisResultsContainer} from './components/AnalysisResultsContainer';\nexport {AnalysisResult} from './components/AnalysisResult';\nexport {useScrollToBottom} from './hooks/useScrollToBottom';\nexport type {AiSliceTool} from './AiSlice';\nexport {QueryToolResult} from './components/tools/QueryToolResult';\nexport {getDefaultInstructions} from './analysis';\n\nexport * from './components/ModelSelector';\nexport * from './components/SessionControls';\nexport * from './components/QueryControls';\nexport * from './components/session/DeleteSessionDialog';\nexport * from './components/session/SessionActions';\nexport * from './components/session/SessionDropdown';\nexport * from './components/session/SessionTitle';\nexport * from './components/session/SessionType';\nexport * from './components/tools/ToolErrorMessage';\n\nexport {\n createAiSettingsSlice,\n useStoreWithAiSettings,\n AiSettingsSliceConfig,\n createDefaultAiSettings,\n} from './AiSettingsSlice';\n\nexport type {AiSettingsSliceState} from './AiSettingsSlice';\n\nexport {AiSettingsPanel} from './components/settings/AiSettingsPanel';\nexport {AiProvidersSettings} from './components/settings/AiProvidersSettings';\nexport {AiModelsSettings} from './components/settings/AiModelsSettings';\nexport {AiModelParameters} from './components/settings/AiModelParameters';\nexport {AiModelUsage} from './components/settings/AiModelUsage';\nexport type {ModelUsageData} from './components/settings/AiModelUsage';\nexport {extractModelsFromSettings} from './utils';\n"]}
|
package/dist/schemas.d.ts
CHANGED
|
@@ -4,12 +4,12 @@ export declare const QueryToolParameters: z.ZodObject<{
|
|
|
4
4
|
sqlQuery: z.ZodString;
|
|
5
5
|
reasoning: z.ZodString;
|
|
6
6
|
}, "strip", z.ZodTypeAny, {
|
|
7
|
-
sqlQuery: string;
|
|
8
7
|
type: "query";
|
|
8
|
+
sqlQuery: string;
|
|
9
9
|
reasoning: string;
|
|
10
10
|
}, {
|
|
11
|
-
sqlQuery: string;
|
|
12
11
|
type: "query";
|
|
12
|
+
sqlQuery: string;
|
|
13
13
|
reasoning: string;
|
|
14
14
|
}>;
|
|
15
15
|
export type QueryToolParameters = z.infer<typeof QueryToolParameters>;
|
|
@@ -448,8 +448,8 @@ export declare const AnalysisSessionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
448
448
|
error: string;
|
|
449
449
|
} | undefined;
|
|
450
450
|
}[];
|
|
451
|
-
customModelName?: string | undefined;
|
|
452
451
|
baseUrl?: string | undefined;
|
|
452
|
+
customModelName?: string | undefined;
|
|
453
453
|
createdAt?: Date | undefined;
|
|
454
454
|
}, {
|
|
455
455
|
id: string;
|
|
@@ -465,8 +465,8 @@ export declare const AnalysisSessionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
465
465
|
error: string;
|
|
466
466
|
} | undefined;
|
|
467
467
|
}[];
|
|
468
|
-
customModelName?: string | undefined;
|
|
469
468
|
baseUrl?: string | undefined;
|
|
469
|
+
customModelName?: string | undefined;
|
|
470
470
|
createdAt?: Date | undefined;
|
|
471
471
|
}>, {
|
|
472
472
|
id: string;
|
|
@@ -504,8 +504,8 @@ export declare const AnalysisSessionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
504
504
|
error: string;
|
|
505
505
|
} | undefined;
|
|
506
506
|
}[];
|
|
507
|
-
customModelName?: string | undefined;
|
|
508
507
|
baseUrl?: string | undefined;
|
|
508
|
+
customModelName?: string | undefined;
|
|
509
509
|
createdAt?: Date | undefined;
|
|
510
510
|
}, unknown>;
|
|
511
511
|
export type AnalysisSessionSchema = z.infer<typeof AnalysisSessionSchema>;
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for AI Chat UI configuration
|
|
3
|
+
*/
|
|
4
|
+
import { AiSettingsSliceConfig } from './AiSettingsSlice';
|
|
5
|
+
type AiModelConfig = AiSettingsSliceConfig['aiSettings'];
|
|
6
|
+
/**
|
|
7
|
+
* Extract models from aiSettings in the format expected by ModelSelector
|
|
8
|
+
* @param config - The AI model configuration
|
|
9
|
+
* @returns Array of models with provider, label, and value properties
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractModelsFromSettings(config: AiModelConfig): Array<{
|
|
12
|
+
provider: string;
|
|
13
|
+
label: string;
|
|
14
|
+
value: string;
|
|
15
|
+
}>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAExD,KAAK,aAAa,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,CAAC;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CA4BD"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for AI Chat UI configuration
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extract models from aiSettings in the format expected by ModelSelector
|
|
6
|
+
* @param config - The AI model configuration
|
|
7
|
+
* @returns Array of models with provider, label, and value properties
|
|
8
|
+
*/
|
|
9
|
+
export function extractModelsFromSettings(config) {
|
|
10
|
+
const models = [];
|
|
11
|
+
// Extract models from providers
|
|
12
|
+
Object.entries(config.providers).forEach(([providerKey, provider]) => {
|
|
13
|
+
provider.models.forEach((model) => {
|
|
14
|
+
models.push({
|
|
15
|
+
provider: providerKey,
|
|
16
|
+
label: model.modelName,
|
|
17
|
+
value: model.modelName,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
// Add custom models
|
|
22
|
+
config.customModels.forEach((customModel) => {
|
|
23
|
+
models.push({
|
|
24
|
+
provider: 'custom',
|
|
25
|
+
label: customModel.modelName,
|
|
26
|
+
value: customModel.modelName,
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
return models;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAqB;IAK7D,MAAM,MAAM,GAIP,EAAE,CAAC;IAER,gCAAgC;IAChC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE;QACnE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,KAAK,EAAE,KAAK,CAAC,SAAS;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,WAAW,CAAC,SAAS;YAC5B,KAAK,EAAE,WAAW,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Utility functions for AI Chat UI configuration\n */\n\nimport {AiSettingsSliceConfig} from './AiSettingsSlice';\n\ntype AiModelConfig = AiSettingsSliceConfig['aiSettings'];\n\n/**\n * Extract models from aiSettings in the format expected by ModelSelector\n * @param config - The AI model configuration\n * @returns Array of models with provider, label, and value properties\n */\nexport function extractModelsFromSettings(config: AiModelConfig): Array<{\n provider: string;\n label: string;\n value: string;\n}> {\n const models: Array<{\n provider: string;\n label: string;\n value: string;\n }> = [];\n\n // Extract models from providers\n Object.entries(config.providers).forEach(([providerKey, provider]) => {\n provider.models.forEach((model) => {\n models.push({\n provider: providerKey,\n label: model.modelName,\n value: model.modelName,\n });\n });\n });\n\n // Add custom models\n config.customModels.forEach((customModel) => {\n models.push({\n provider: 'custom',\n label: customModel.modelName,\n value: customModel.modelName,\n });\n });\n\n return models;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/ai",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.25",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -22,17 +22,19 @@
|
|
|
22
22
|
"@openassistant/core": "0.5.17",
|
|
23
23
|
"@openassistant/utils": "0.5.17",
|
|
24
24
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
25
|
-
"@sqlrooms/data-table": "0.24.
|
|
26
|
-
"@sqlrooms/duckdb": "0.24.
|
|
27
|
-
"@sqlrooms/monaco-editor": "0.24.
|
|
28
|
-
"@sqlrooms/
|
|
29
|
-
"@sqlrooms/room-
|
|
30
|
-
"@sqlrooms/
|
|
31
|
-
"@sqlrooms/
|
|
25
|
+
"@sqlrooms/data-table": "0.24.25",
|
|
26
|
+
"@sqlrooms/duckdb": "0.24.25",
|
|
27
|
+
"@sqlrooms/monaco-editor": "0.24.25",
|
|
28
|
+
"@sqlrooms/recharts": "0.24.25",
|
|
29
|
+
"@sqlrooms/room-config": "0.24.25",
|
|
30
|
+
"@sqlrooms/room-shell": "0.24.25",
|
|
31
|
+
"@sqlrooms/ui": "0.24.25",
|
|
32
|
+
"@sqlrooms/utils": "0.24.25",
|
|
32
33
|
"ai": "^4.3.19",
|
|
33
34
|
"immer": "^10.1.1",
|
|
34
35
|
"lucide-react": "^0.475.0",
|
|
35
36
|
"react-markdown": "^10.1.0",
|
|
37
|
+
"recharts": "^2.12.7",
|
|
36
38
|
"rehype-raw": "^7.0.0",
|
|
37
39
|
"remark-gfm": "^4.0.0",
|
|
38
40
|
"zod": "^3.25.73"
|
|
@@ -49,5 +51,5 @@
|
|
|
49
51
|
"typecheck": "tsc --noEmit",
|
|
50
52
|
"typedoc": "typedoc"
|
|
51
53
|
},
|
|
52
|
-
"gitHead": "
|
|
53
|
-
}
|
|
54
|
+
"gitHead": "e523a7efbbf2ea0f109479166663d379bdeb4159"
|
|
55
|
+
}
|