Skip to content
Snippets Groups Projects
Commit b4cf47ad authored by deep1401's avatar deep1401
Browse files
Merge branch 'main' of https://github.com/transformerlab/transformerlab-app into add/model_providers
parents 0c3de9b6 13cbe19e
No related branches found
No related tags found
No related merge requests found
...@@ -46,9 +46,8 @@ export default function Generate({ ...@@ -46,9 +46,8 @@ export default function Generate({
experimentInfoMutate, experimentInfoMutate,
}) { }) {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [currentEvaluator, setCurrentEvaluator] = useState('');
const [currentPlugin, setCurrentPlugin] = useState(''); const [currentPlugin, setCurrentPlugin] = useState('');
const [currentEvalName, setCurrentEvalName] = useState(''); const [currentGenerationName, setCurrentGenerationName] = useState('');
const { const {
data: plugins, data: plugins,
...@@ -69,7 +68,7 @@ export default function Generate({ ...@@ -69,7 +68,7 @@ export default function Generate({
if (value) { if (value) {
// Use fetch to post the value to the server // Use fetch to post the value to the server
await fetch( await fetch(
chatAPI.Endpoints.Experiment.SavePlugin(project, evalName, 'main.py'), chatAPI.Endpoints.Experiment.SavePlugin(project, generationName, 'main.py'),
{ {
method: 'POST', method: 'POST',
body: value, body: value,
...@@ -104,12 +103,12 @@ export default function Generate({ ...@@ -104,12 +103,12 @@ export default function Generate({
open={open} open={open}
onClose={() => { onClose={() => {
setOpen(false); setOpen(false);
setCurrentEvalName(''); setCurrentGenerationName('');
}} }}
experimentInfo={experimentInfo} experimentInfo={experimentInfo}
experimentInfoMutate={experimentInfoMutate} experimentInfoMutate={experimentInfoMutate}
pluginId={currentPlugin} pluginId={currentPlugin}
currentEvalName={currentEvalName} currentGenerationName={currentGenerationName}
/> />
<Stack <Stack
direction="row" direction="row"
...@@ -165,7 +164,7 @@ export default function Generate({ ...@@ -165,7 +164,7 @@ export default function Generate({
experimentInfo={experimentInfo} experimentInfo={experimentInfo}
experimentInfoMutate={experimentInfoMutate} experimentInfoMutate={experimentInfoMutate}
setCurrentPlugin={setCurrentPlugin} setCurrentPlugin={setCurrentPlugin}
setCurrentEvalName={setCurrentEvalName} setCurrentGenerationName={setCurrentGenerationName}
setOpen={setOpen} setOpen={setOpen}
/> />
</Sheet> </Sheet>
......
...@@ -55,7 +55,7 @@ export default function GenerateModal({ ...@@ -55,7 +55,7 @@ export default function GenerateModal({
experimentInfo, experimentInfo,
experimentInfoMutate, experimentInfoMutate,
pluginId, pluginId,
currentEvalName, currentGenerationName,
}: { }: {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;
...@@ -63,7 +63,7 @@ export default function GenerateModal({ ...@@ -63,7 +63,7 @@ export default function GenerateModal({
experimentInfoMutate: () => void; experimentInfoMutate: () => void;
template_id?: string; template_id?: string;
pluginId: string; pluginId: string;
currentEvalName?: string; // Optional incase of new evaluation currentGenerationName?: string; // Optional incase of new generation
}) { }) {
// Store the current selected Dataset in this modal // Store the current selected Dataset in this modal
const [selectedDataset, setSelectedDataset] = useState(null); const [selectedDataset, setSelectedDataset] = useState(null);
...@@ -71,6 +71,7 @@ export default function GenerateModal({ ...@@ -71,6 +71,7 @@ export default function GenerateModal({
const [hasDatasetKey, setHasDatasetKey] = useState(false); const [hasDatasetKey, setHasDatasetKey] = useState(false);
const [hasDocumentsKey, setHasDocumentsKey] = useState(false); const [hasDocumentsKey, setHasDocumentsKey] = useState(false);
const [hasContextKey, setHasContextKey] = useState(false); const [hasContextKey, setHasContextKey] = useState(false);
const [selectedDocs, setSelectedDocs] = useState([]);
const [nameInput, setNameInput] = useState(''); const [nameInput, setNameInput] = useState('');
const [currentTab, setCurrentTab] = useState(0); const [currentTab, setCurrentTab] = useState(0);
const [contextInput, setContextInput] = useState(''); const [contextInput, setContextInput] = useState('');
...@@ -102,14 +103,10 @@ export default function GenerateModal({ ...@@ -102,14 +103,10 @@ export default function GenerateModal({
return chatAPI.Endpoints.Dataset.Info(selectedDataset); return chatAPI.Endpoints.Dataset.Info(selectedDataset);
}, fetcher); }, fetcher);
// useEffect(() => {
// if (open) { // Reset the name input when the modal is opened
// setNameInput(generateFriendlyName());
// }}, []);
useEffect(() => { useEffect(() => {
if (open) { if (open) {
if (!currentEvalName || currentEvalName === '') { if (!currentGenerationName || currentGenerationName === '') {
setNameInput(generateFriendlyName()); setNameInput(generateFriendlyName());
} else { } else {
setNameInput(''); setNameInput('');
...@@ -118,92 +115,91 @@ export default function GenerateModal({ ...@@ -118,92 +115,91 @@ export default function GenerateModal({
}, [open]); }, [open]);
useEffect(() => { useEffect(() => {
// EDIT GENERATION
if (experimentInfo && pluginId) { if (experimentInfo && pluginId) {
if (currentEvalName && currentEvalName !== '') { if (currentGenerationName && currentGenerationName !== '') {
const evaluationsStr = experimentInfo.config?.generations; const generationsStr = experimentInfo.config?.generations;
if (typeof evaluationsStr === 'string') { setSelectedDocs([]);
if (typeof generationsStr === 'string') {
try { try {
const evaluations = JSON.parse(evaluationsStr); const generations = JSON.parse(generationsStr);
if (Array.isArray(evaluations)) { if (Array.isArray(generations)) {
const evalConfig = evaluations.find( const generationConfig = generations.find(
(evalItem: any) => (generationItem: any) =>
evalItem.name === currentEvalName && generationItem.name === currentGenerationName &&
evalItem.plugin === pluginId generationItem.plugin === pluginId
); );
if (evalConfig) { if (generationConfig) {
setConfig(evalConfig.script_parameters); setConfig(generationConfig.script_parameters);
const datasetKeyExists = Object.keys( const datasetKeyExists = Object.keys(
evalConfig.script_parameters generationConfig.script_parameters
).some((key) => key.toLowerCase().includes('dataset')); ).some((key) => key.toLowerCase().includes('dataset'));
const docsKeyExists = Object.keys( const docsKeyExists = Object.keys(
evalConfig.script_parameters generationConfig.script_parameters
).some((key) => key.toLowerCase().includes('docs')); ).some((key) => key.toLowerCase().includes('docs'));
const contextKeyExists = Object.keys( const contextKeyExists = Object.keys(
evalConfig.script_parameters generationConfig.script_parameters
).some((key) => key.toLowerCase().includes('context')); ).some((key) => key.toLowerCase().includes('context'));
setHasDatasetKey(datasetKeyExists); setHasDatasetKey(datasetKeyExists);
// setHasDocumentsKey(docsKeyExists);
// setHasContextKey(contextKeyExists);
if ( if (
docsKeyExists && docsKeyExists &&
evalConfig.script_parameters.docs.length > 0 generationConfig.script_parameters.docs.length > 0
) { ) {
setHasContextKey(false); setHasContextKey(false);
setHasDocumentsKey(true); setHasDocumentsKey(true);
generationConfig.script_parameters.docs = generationConfig.script_parameters.docs.split(',');
setConfig(generationConfig.script_parameters);
setSelectedDocs(generationConfig.script_parameters.docs);
evalConfig.script_parameters.docs = evalConfig.script_parameters.docs.split(',');
setConfig(evalConfig.script_parameters);
} else if ( } else if (
contextKeyExists && contextKeyExists &&
evalConfig.script_parameters.context.length > 0 generationConfig.script_parameters.context.length > 0
) { ) {
setHasContextKey(true); setHasContextKey(true);
setHasDocumentsKey(false); setHasDocumentsKey(false);
const context = evalConfig.script_parameters.context; const context = generationConfig.script_parameters.context;
setContextInput(context); setContextInput(context);
delete evalConfig.script_parameters.context; delete generationConfig.script_parameters.context;
setConfig(evalConfig.script_parameters); setConfig(generationConfig.script_parameters);
} }
if ( if (
evalConfig.script_parameters._dataset_display_message && hasDatasetKey &&
evalConfig.script_parameters._dataset_display_message.length > generationConfig.script_parameters.dataset_name.length > 0
0
) { ) {
setDatasetDisplayMessage( setSelectedDataset(generationConfig.script_parameters.dataset_name);
evalConfig.script_parameters._dataset_display_message
);
} }
if ( if (
hasDatasetKey && generationConfig.script_parameters._dataset_display_message &&
evalConfig.script_parameters.dataset_name.length > 0 generationConfig.script_parameters._dataset_display_message.length >
0
) { ) {
setSelectedDataset(evalConfig.script_parameters.dataset_name); setDatasetDisplayMessage(
generationConfig.script_parameters._dataset_display_message
);
} }
if (!nameInput && evalConfig?.name.length > 0) { if (!nameInput && generationConfig?.name.length > 0) {
setNameInput(evalConfig.name); setNameInput(generationConfig.name);
} }
} }
// if (nameInput !== '' && evalConfig?.name) {
// setNameInput(evalConfig?.name);
// }
// setNameInput(evalConfig?.name);
// if (!nameInput && evalConfig?.script_parameters.run_name) {
// setNameInput(evalConfig.script_parameters.run_name);
// }
} }
} catch (error) { } catch (error) {
console.error('Failed to parse evaluations JSON string:', error); console.error('Failed to parse generations JSON string:', error);
} }
} }
} else { } else {
// CREATE NEW GENERATION
if (data) { if (data) {
let parsedData; let parsedData;
try { try {
parsedData = JSON.parse(data); //Parsing data for easy access to parameters} parsedData = JSON.parse(data); //Parsing data for easy access to parameters}
// Set config as a JSON object with keys of the parameters and values of the default values // Set config as a JSON object with keys of the parameters and values of the default values
setSelectedDocs([]);
let tempconfig: { [key: string]: any } = {}; let tempconfig: { [key: string]: any } = {};
if (parsedData && parsedData.parameters) { if (parsedData && parsedData.parameters) {
tempconfig = Object.fromEntries( tempconfig = Object.fromEntries(
...@@ -212,6 +208,7 @@ export default function GenerateModal({ ...@@ -212,6 +208,7 @@ export default function GenerateModal({
value.default, value.default,
]) ])
); );
// Logic to set dataset message
if (parsedData && parsedData._dataset) { if (parsedData && parsedData._dataset) {
setHasDatasetKey(true); setHasDatasetKey(true);
// Check if the dataset display message string length is greater than 0 // Check if the dataset display message string length is greater than 0
...@@ -224,41 +221,20 @@ export default function GenerateModal({ ...@@ -224,41 +221,20 @@ export default function GenerateModal({
} }
} }
// Check if parsed data parameters has a key that includes 'docs' // Check if parsed data parameters has a key that includes 'docs'
if (parsedData && parsedData.parameters) { const docsKeyExists = Object.keys(parsedData.parameters).some(
const docsKeyExists = Object.keys(parsedData.parameters).some( (key) => key.toLowerCase().includes('tflabcustomui_docs')
(key) => key.toLowerCase().includes('tflabcustomui_docs') );
);
if (docsKeyExists) { const contextKeyExists = Object.keys(
// Delete the parameter key that includes 'docs' from the config parsedData.parameters
delete tempconfig[ ).some((key) =>
Object.keys(parsedData.parameters).find((key) => key.toLowerCase().includes('tflabcustomui_context')
key.toLowerCase().includes('tflabcustomui_docs') );
) setHasContextKey(contextKeyExists);
]; setHasDocumentsKey(docsKeyExists);
}
const contextKeyExists = Object.keys(
parsedData.parameters
).some((key) =>
key.toLowerCase().includes('tflabcustomui_context')
);
if (contextKeyExists) {
// Delete the parameter key that includes 'context' from the config
delete tempconfig[
Object.keys(parsedData.parameters).find((key) =>
key.toLowerCase().includes('tflabcustomui_context')
)
];
}
setHasContextKey(contextKeyExists);
setHasDocumentsKey(docsKeyExists);
}
} }
setConfig(tempconfig); setConfig(tempconfig);
// Set hasDataset to true in the parsed data, the dataset key is `true`
// If tempconfig is not an empty object
// if (tempconfig && Object.keys(tempconfig).length > 0) {
// setNameInput(generateFriendlyName());
// }
} catch (e) { } catch (e) {
console.error('Error parsing data', e); console.error('Error parsing data', e);
parsedData = ''; parsedData = '';
...@@ -266,7 +242,7 @@ export default function GenerateModal({ ...@@ -266,7 +242,7 @@ export default function GenerateModal({
} }
} }
} }
}, [experimentInfo, pluginId, currentEvalName, nameInput, data]); }, [experimentInfo, pluginId, currentGenerationName, nameInput, data]);
if (!experimentInfo?.id) { if (!experimentInfo?.id) {
return 'Select an Experiment'; return 'Select an Experiment';
...@@ -276,7 +252,7 @@ export default function GenerateModal({ ...@@ -276,7 +252,7 @@ export default function GenerateModal({
? experimentInfo?.config?.foundation_filename ? experimentInfo?.config?.foundation_filename
: experimentInfo?.config?.foundation; : experimentInfo?.config?.foundation;
// Set config to the plugin config if it is available based on currentEvalName within experiment info // Set config to the plugin config if it is available based on currentGenerationName within experiment info
function TrainingModalFirstTab() { function TrainingModalFirstTab() {
return ( return (
...@@ -328,7 +304,10 @@ export default function GenerateModal({ ...@@ -328,7 +304,10 @@ export default function GenerateModal({
<PickADocumentMenu <PickADocumentMenu
experimentInfo={experimentInfo} experimentInfo={experimentInfo}
showFoldersOnly={false} showFoldersOnly={false}
defaultValue={config.docs? config.docs : []} value={selectedDocs}
onChange={setSelectedDocs}
defaultValue={config.docs ? config.docs : []}
// defaultValue={config.docs? config.docs : []}
name="docs" name="docs"
/> />
<FormHelperText>Select documents to upload</FormHelperText> <FormHelperText>Select documents to upload</FormHelperText>
...@@ -337,6 +316,7 @@ export default function GenerateModal({ ...@@ -337,6 +316,7 @@ export default function GenerateModal({
); );
} }
function ContextTab({ contextInput, setContextInput }) { function ContextTab({ contextInput, setContextInput }) {
return ( return (
<Stack spacing={2}> <Stack spacing={2}>
...@@ -385,11 +365,11 @@ export default function GenerateModal({ ...@@ -385,11 +365,11 @@ export default function GenerateModal({
console.log('formJson', formJson); console.log('formJson', formJson);
// Run when the currentEvalName is provided // Run when the currentGenerationName is provided
if (currentEvalName && currentEvalName !== '') { if (currentGenerationName && currentGenerationName !== '') {
const result = await chatAPI.EXPERIMENT_EDIT_GENERATION( const result = await chatAPI.EXPERIMENT_EDIT_GENERATION(
experimentInfo?.id, experimentInfo?.id,
currentEvalName, currentGenerationName,
formJson formJson
); );
setNameInput(generateFriendlyName()); setNameInput(generateFriendlyName());
...@@ -409,12 +389,6 @@ export default function GenerateModal({ ...@@ -409,12 +389,6 @@ export default function GenerateModal({
experimentInfoMutate(); experimentInfoMutate();
onClose(); onClose();
// };
// }
// const result = await chatAPI.EXPERIMENT_EDIT_EVALUATION(experimentInfo?.id, currentEvalName, formJson)
// // alert(JSON.stringify(formJson, null, 2));
// setNameInput(generateFriendlyName());
// onClose();
} catch (error) { } catch (error) {
console.error('Failed to edit generation:', error); console.error('Failed to edit generation:', error);
} }
...@@ -434,7 +408,7 @@ export default function GenerateModal({ ...@@ -434,7 +408,7 @@ export default function GenerateModal({
}} }}
> >
<form <form
id="evaluation-form" id="generation-form"
style={{ style={{
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
...@@ -444,7 +418,7 @@ export default function GenerateModal({ ...@@ -444,7 +418,7 @@ export default function GenerateModal({
onSubmit={handleSubmit} onSubmit={handleSubmit}
> >
<Tabs <Tabs
aria-label="evaluation Template Tabs" aria-label="generation Template Tabs"
value={currentTab} value={currentTab}
onChange={(event, newValue) => setCurrentTab(newValue)} onChange={(event, newValue) => setCurrentTab(newValue)}
sx={{ borderRadius: 'lg', display: 'flex', overflow: 'hidden' }} sx={{ borderRadius: 'lg', display: 'flex', overflow: 'hidden' }}
......
...@@ -4,10 +4,10 @@ import * as chatAPI from 'renderer/lib/transformerlab-api-sdk'; ...@@ -4,10 +4,10 @@ import * as chatAPI from 'renderer/lib/transformerlab-api-sdk';
import { useState } from 'react'; import { useState } from 'react';
import useSWR from 'swr'; import useSWR from 'swr';
function listEvals(evalString) { function listGenerations(generationString) {
let result = []; let result = [];
if (evalString) { if (generationString) {
result = JSON.parse(evalString); result = JSON.parse(generationString);
} }
return result; return result;
} }
...@@ -47,10 +47,10 @@ function formatTemplateConfig(script_parameters): ReactElement { ...@@ -47,10 +47,10 @@ function formatTemplateConfig(script_parameters): ReactElement {
); );
} }
async function evaluationRun( async function generationRun(
experimentId: string, experimentId: string,
plugin: string, plugin: string,
evaluator: string generator: string
) { ) {
// fetch( // fetch(
// chatAPI.Endpoints.Experiment.RunGeneration(experimentId, plugin, evaluator) // chatAPI.Endpoints.Experiment.RunGeneration(experimentId, plugin, evaluator)
...@@ -62,7 +62,7 @@ async function evaluationRun( ...@@ -62,7 +62,7 @@ async function evaluationRun(
'QUEUED', 'QUEUED',
JSON.stringify({ JSON.stringify({
plugin: plugin, plugin: plugin,
generator: evaluator, generator: generator,
}) })
) )
); );
...@@ -73,7 +73,7 @@ export default function GenerateTasksTable({ ...@@ -73,7 +73,7 @@ export default function GenerateTasksTable({
experimentInfo, experimentInfo,
experimentInfoMutate, experimentInfoMutate,
setCurrentPlugin, setCurrentPlugin,
setCurrentEvalName, setCurrentGenerationName,
setOpen, setOpen,
}) { }) {
...@@ -91,8 +91,8 @@ export default function GenerateTasksTable({ ...@@ -91,8 +91,8 @@ export default function GenerateTasksTable({
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{listEvals(experimentInfo?.config?.generations) && {listGenerations(experimentInfo?.config?.generations) &&
listEvals(experimentInfo?.config?.generations)?.map( listGenerations(experimentInfo?.config?.generations)?.map(
(generations) => ( (generations) => (
<tr key={generations.name}> <tr key={generations.name}>
<td style={{ overflow: 'hidden', paddingLeft: '1rem' }}> <td style={{ overflow: 'hidden', paddingLeft: '1rem' }}>
...@@ -114,7 +114,7 @@ export default function GenerateTasksTable({ ...@@ -114,7 +114,7 @@ export default function GenerateTasksTable({
variant="soft" variant="soft"
color="success" color="success"
onClick={async () => onClick={async () =>
await evaluationRun( await generationRun(
experimentInfo.id, experimentInfo.id,
generations.plugin, generations.plugin,
generations.name generations.name
...@@ -128,7 +128,7 @@ export default function GenerateTasksTable({ ...@@ -128,7 +128,7 @@ export default function GenerateTasksTable({
onClick={() => { onClick={() => {
setOpen(true); setOpen(true);
setCurrentPlugin(generations?.plugin); setCurrentPlugin(generations?.plugin);
setCurrentEvalName(generations.name); setCurrentGenerationName(generations.name);
}} }}
> >
Edit Edit
......
...@@ -13,18 +13,18 @@ export default function ResultsModal({ ...@@ -13,18 +13,18 @@ export default function ResultsModal({
setOpen, setOpen,
experimentInfo, experimentInfo,
plugin, plugin,
evaluator, generator,
}) { }) {
const [resultText, setResultText] = useState(''); const [resultText, setResultText] = useState('');
useEffect(() => { useEffect(() => {
if (open && experimentInfo && evaluator) { if (open && experimentInfo && generator) {
const output_file = `plugins/${plugin}/output.txt`; const output_file = `plugins/${plugin}/output.txt`;
console.log('Fetching results from', output_file); console.log('Fetching results from', output_file);
fetch( fetch(
chatAPI.Endpoints.Experiment.GetGenerationOutput( chatAPI.Endpoints.Experiment.GetGenerationOutput(
experimentInfo?.id, experimentInfo?.id,
evaluator generator
) )
).then((res) => { ).then((res) => {
if (res.ok) { if (res.ok) {
...@@ -47,7 +47,7 @@ export default function ResultsModal({ ...@@ -47,7 +47,7 @@ export default function ResultsModal({
}} }}
> >
<ModalClose /> <ModalClose />
<DialogTitle>Results from: {evaluator}</DialogTitle> <DialogTitle>Results from: {generator}</DialogTitle>
<DialogContent <DialogContent
sx={{ backgroundColor: '#222', color: '#ddd', padding: 2 }} sx={{ backgroundColor: '#222', color: '#ddd', padding: 2 }}
> >
......
...@@ -7,6 +7,8 @@ const fetcher = (url) => fetch(url).then((res) => res.json()); ...@@ -7,6 +7,8 @@ const fetcher = (url) => fetch(url).then((res) => res.json());
export default function PickADocumentMenu({ export default function PickADocumentMenu({
name, name,
experimentInfo, experimentInfo,
value,
onChange,
defaultValue = [], defaultValue = [],
showFoldersOnly = false, showFoldersOnly = false,
}) { }) {
...@@ -16,20 +18,21 @@ export default function PickADocumentMenu({ ...@@ -16,20 +18,21 @@ export default function PickADocumentMenu({
mutate, mutate,
} = useSWR(chatAPI.Endpoints.Documents.List(experimentInfo?.id, ''), fetcher); } = useSWR(chatAPI.Endpoints.Documents.List(experimentInfo?.id, ''), fetcher);
const [selected, setSelected] = useState([]);
useEffect(() => { useEffect(() => {
setSelected(defaultValue || []); if (defaultValue.length > 0) {
onChange(defaultValue);
}
}, [defaultValue]); }, [defaultValue]);
function handleChange(event, newValue) { function handleChange(event, newValue) {
console.log(newValue); console.log(newValue);
setSelected(newValue); onChange(newValue);
} }
return ( return (
<Select multiple onChange={handleChange} value={selected} name={name}> <Select multiple onChange={handleChange} value={value} name={name}>
{rows?.map((row) => {rows?.map((row) =>
showFoldersOnly ? ( showFoldersOnly ? (
row?.type === 'folder' && ( row?.type === 'folder' && (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment