diff --git a/backend/adapter_processor/adapter_processor.py b/backend/adapter_processor/adapter_processor.py index ba4ef14101..688afc6e40 100644 --- a/backend/adapter_processor/adapter_processor.py +++ b/backend/adapter_processor/adapter_processor.py @@ -144,6 +144,8 @@ def set_default_triad(default_triad: dict[str, str], user: User) -> None: adapter_type = AdapterTypes.EMBEDDING.name elif key == AdapterKeys.VECTOR_DB_DEFAULT: adapter_type = AdapterTypes.VECTOR_DB.name + elif key == AdapterKeys.X2TEXT_DEFAULT: + adapter_type = AdapterTypes.X2TEXT.name filter_params["adapter_type"] = adapter_type filter_params["is_default"] = True diff --git a/backend/adapter_processor/constants.py b/backend/adapter_processor/constants.py index 5a6296f53c..2cd8f010b0 100644 --- a/backend/adapter_processor/constants.py +++ b/backend/adapter_processor/constants.py @@ -18,6 +18,7 @@ class AdapterKeys: LLM_DEFAULT = "llm_default" VECTOR_DB_DEFAULT = "vector_db_default" EMBEDDING_DEFAULT = "embedding_default" + X2TEXT_DEFAULT = "x2text_default" ADAPTER_NAME_EXISTS = ( "Configuration with this ID already exists. " "Please try with a different ID" diff --git a/frontend/src/components/agency/actions/Actions.jsx b/frontend/src/components/agency/actions/Actions.jsx index 216f18db4a..6cf7405444 100644 --- a/frontend/src/components/agency/actions/Actions.jsx +++ b/frontend/src/components/agency/actions/Actions.jsx @@ -264,6 +264,28 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { setExecutionId(""); }; + const isIncompleteWorkflow = () => { + if (details?.tool_instances.length === 0) { + return true; + } + }; + + // Disable Run & Step execution - + // when NO tool present in the workflow + // When source OR destination is NOT configured + const disableAction = () => { + if (isIncompleteWorkflow()) { + return true; + } + if ( + source?.connection_type === "API" && + destination?.connection_type === "API" + ) { + return false; + } + return !source?.connector_instance || !destination?.connector_instance; + }; + const createDeployment = (type) => { const workflowId = details?.id; if (!workflowId) { @@ -361,7 +383,7 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { ? getInputFile(true, false, 4) : handleWfExecution(true, false, 4) } - disabled={handleDisable(4)} + disabled={disableAction() || handleDisable(4)} loading={execType === "NORMAL"} > @@ -375,7 +397,7 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { ? getInputFile(true, true, 0) : handleWfExecution(true, true, 0) } - disabled={handleDisable(0)} + disabled={disableAction() || handleDisable(0)} loading={execType === "STEP"} > @@ -414,7 +436,7 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { - + @@ -422,7 +444,7 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { createDeployment("API")} > @@ -430,7 +452,7 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { createDeployment("ETL")} > @@ -438,7 +460,7 @@ function Actions({ statusBarMsg, initializeWfComp, stepLoader }) { createDeployment("TASK")} > diff --git a/frontend/src/components/deployments/display-code/DisplayCode.jsx b/frontend/src/components/deployments/display-code/DisplayCode.jsx index 48c479b630..e932df3a2b 100644 --- a/frontend/src/components/deployments/display-code/DisplayCode.jsx +++ b/frontend/src/components/deployments/display-code/DisplayCode.jsx @@ -55,7 +55,7 @@ const DisplayCode = ({ isDialogOpen, setDialogOpen, url }) => { headers = { 'Authorization': 'Bearer REPLACE_WITH_API_KEY' } - response = requests.request("GET", api_url, headers=headers, data=payload) + response = requests.request("GET", api_url, headers=headers) {{/if}} print('Response:', response.json()) `; @@ -127,12 +127,12 @@ const DisplayCode = ({ isDialogOpen, setDialogOpen, url }) => { const TAB_ITEMS = [ { key: "POST", - label: "POST", + label: "POST Document", children: , }, { key: "GET", - label: "GET", + label: "GET Status", children: , }, ]; diff --git a/frontend/src/components/pipelines-or-deployments/pipelines/Pipelines.jsx b/frontend/src/components/pipelines-or-deployments/pipelines/Pipelines.jsx index 9cedeaebd7..39d74f77eb 100644 --- a/frontend/src/components/pipelines-or-deployments/pipelines/Pipelines.jsx +++ b/frontend/src/components/pipelines-or-deployments/pipelines/Pipelines.jsx @@ -289,7 +289,7 @@ function Pipelines({ type }) { - Clear File Marker + Clear Processed File History ), diff --git a/frontend/src/components/settings/default-triad/DefaultTriad.jsx b/frontend/src/components/settings/default-triad/DefaultTriad.jsx index fcf64bc54e..8ae304db44 100644 --- a/frontend/src/components/settings/default-triad/DefaultTriad.jsx +++ b/frontend/src/components/settings/default-triad/DefaultTriad.jsx @@ -21,69 +21,72 @@ function DefaultTriad() { const { setAlertDetails } = useAlertStore(); const handleException = useExceptionHandler(); - const [adaptorsList, setAdaptorsList] = useState([]); - const [currentLLMDefault, setCurrentLLMDefault] = useState(); - const [currentVECTORDefault, setCurrentVECTORDefault] = useState(); - const [currentEMBDefault, setCurrentEMBDefault] = useState(); + const [dropdownData, setDropdownData] = useState([]); + const [selectedValues, setSelectedValues] = useState({}); + const [isSubmitEnabled, setIsSubmitEnabled] = useState(false); - const [selectedLLMDefault, setSelectedLLMDefault] = useState(); - const [selectedVECTORDefault, setSelectedVECTORDefault] = useState(); - const [selectedEMBDefault, setSelectedEMBDefault] = useState(); + const desiredOrder = ["LLM", "EMBEDDING", "VECTOR_DB", "X2TEXT"]; - useEffect(() => { - const fetchData = async () => { - try { - const res = await axiosPrivate.get( - `/api/v1/unstract/${sessionDetails?.orgId}/adapter/` - ); - setAdaptorsList(res.data); - } catch (error) { - console.error("Error fetching data:", error); + const labelMap = { + LLM: "Default LLM", + EMBEDDING: "Default Embeddings", + VECTOR_DB: "Default Vector DB", + X2TEXT: "Default X2Text", + }; + + const updateDropdownData = (data) => { + const updatedData = data.map((entry) => { + if (entry.is_default) { + return { + ...entry, + adapter_name: `${entry.adapter_name} (current default)`, + }; } - }; + return entry; + }); - fetchData(); - }, []); + // Update the state with the modified data + setDropdownData(updatedData); + }; - useEffect(() => { - setCurrentLLMDefault( - adaptorsList.find( - (item) => item.adapter_type === "LLM" && item.is_default - )?.id - ); - setCurrentVECTORDefault( - adaptorsList.find( - (item) => item.adapter_type === "VECTOR_DB" && item.is_default - )?.id - ); - setCurrentEMBDefault( - adaptorsList.find( - (item) => item.adapter_type === "EMBEDDING" && item.is_default - )?.id - ); - setSelectedLLMDefault(currentLLMDefault); - setSelectedEMBDefault(currentEMBDefault); - setSelectedVECTORDefault(currentVECTORDefault); - }, [adaptorsList.length > 0]); - - const onSubmit = async () => { - if ( - currentLLMDefault === selectedLLMDefault && - currentEMBDefault === selectedEMBDefault && - currentVECTORDefault === selectedVECTORDefault - ) { - setAlertDetails({ - type: "warning", - content: "Nothing new to save/update", + const fetchData = async () => { + try { + const response = await axiosPrivate.get( + `/api/v1/unstract/${sessionDetails?.orgId}/adapter/` + ); + updateDropdownData(response?.data); + const defaultValues = {}; + response?.data.forEach((item) => { + if (item.is_default) { + defaultValues[item.adapter_type] = item.id; + } }); - return; + setSelectedValues(defaultValues); + } catch (error) { + setAlertDetails(handleException(error, "Failed to fetch Default Triads")); } + }; + + useEffect(() => { + fetchData(); + }, []); + const handleDropdownChange = (adapterType, selectedValue) => { + setSelectedValues((prevValues) => ({ + ...prevValues, + [adapterType]: selectedValue, + })); + setIsSubmitEnabled(true); + }; + + // Handler for form submission + const handleSubmit = async () => { try { const body = { - llm_default: selectedLLMDefault, - vector_db_default: selectedVECTORDefault, - embedding_default: selectedEMBDefault, + llm_default: selectedValues[desiredOrder[0]], + embedding_default: selectedValues[desiredOrder[1]], + vector_db_default: selectedValues[desiredOrder[2]], + x2text_default: selectedValues[desiredOrder[3]], }; await axiosPrivate.post( @@ -101,10 +104,8 @@ function DefaultTriad() { type: "success", content: "Default triad setting saved successfully", }); - - setCurrentEMBDefault(selectedEMBDefault); - setCurrentLLMDefault(selectedLLMDefault); - setCurrentVECTORDefault(selectedVECTORDefault); + fetchData(); + setIsSubmitEnabled(false); } catch (error) { setAlertDetails(handleException(error, "Failed to generate the key")); } @@ -123,68 +124,32 @@ function DefaultTriad() { - - Default LLM - - {adaptorsList - .filter((item) => item.adapter_type === "LLM") - .map((item) => ( - - {item.adapter_name} - {currentLLMDefault === item.id && " (current default)"} - - ))} - - - - - Default Embeddings - - - {adaptorsList - .filter((item) => item.adapter_type === "EMBEDDING") - .map((item) => ( - - {item.adapter_name} - {currentEMBDefault === item.id && " (current default)"} - - ))} - - - - - Default Vector DB - - - {adaptorsList - .filter((item) => item.adapter_type === "VECTOR_DB") - .map((item) => ( - - {item.adapter_name} - {currentVECTORDefault === item.id && " (current default)"} - - ))} - - + {desiredOrder.map((type) => ( + + + {labelMap[type]} + + handleDropdownChange(type, value)} + style={{ width: "100%" }} + > + {dropdownData + .filter((data) => data.adapter_type === type) + .map((data) => ( + + {data.adapter_name} + + ))} + + + ))} Save