@@ -8,6 +8,7 @@ import { useDispatch, useSelector } from "react-redux"; /* code change */
8
8
import {
9
9
DataFormulatorState ,
10
10
dfActions ,
11
+ dfSelectors ,
11
12
} from '../app/dfSlice'
12
13
13
14
import _ from 'lodash' ;
@@ -43,6 +44,7 @@ import exampleImageTable from "../assets/example-image-table.png";
43
44
import { ModelSelectionButton } from './ModelSelectionDialog' ;
44
45
import { DBTableSelectionDialog } from './DBTableManager' ;
45
46
import { connectToSSE } from './SSEClient' ;
47
+ import { getUrls } from '../app/utils' ;
46
48
47
49
//type AppProps = ConnectedProps<typeof connector>;
48
50
@@ -51,14 +53,62 @@ export const DataFormulatorFC = ({ }) => {
51
53
const displayPanelSize = useSelector ( ( state : DataFormulatorState ) => state . displayPanelSize ) ;
52
54
const visPaneSize = useSelector ( ( state : DataFormulatorState ) => state . visPaneSize ) ;
53
55
const tables = useSelector ( ( state : DataFormulatorState ) => state . tables ) ;
54
- const selectedModelId = useSelector ( ( state : DataFormulatorState ) => state . selectedModelId ) ;
56
+
57
+ const models = useSelector ( ( state : DataFormulatorState ) => state . models ) ;
58
+ const modelSlots = useSelector ( ( state : DataFormulatorState ) => state . modelSlots ) ;
59
+ const testedModels = useSelector ( ( state : DataFormulatorState ) => state . testedModels ) ;
60
+
61
+ const noBrokenModelSlots = useSelector ( ( state : DataFormulatorState ) => {
62
+ const slotTypes = dfSelectors . getAllSlotTypes ( ) ;
63
+ return slotTypes . every (
64
+ slotType => state . modelSlots [ slotType ] !== undefined && state . testedModels . find ( t => t . id == state . modelSlots [ slotType ] ) ?. status != 'error' ) ;
65
+ } ) ;
55
66
56
67
const dispatch = useDispatch ( ) ;
57
68
58
69
useEffect ( ( ) => {
59
70
document . title = toolName ;
60
71
} , [ ] ) ;
61
72
73
+ useEffect ( ( ) => {
74
+ const findWorkingModel = async ( ) => {
75
+ let assignedModels = models . filter ( m => Object . values ( modelSlots ) . includes ( m . id ) ) ;
76
+ let unassignedModels = models . filter ( m => ! Object . values ( modelSlots ) . includes ( m . id ) ) ;
77
+
78
+ // Combine both arrays: assigned models first, then unassigned models
79
+ let allModelsToTest = [ ...assignedModels , ...unassignedModels ] ;
80
+
81
+ for ( let i = 0 ; i < allModelsToTest . length ; i ++ ) {
82
+ let model = allModelsToTest [ i ] ;
83
+ let isAssignedModel = i < assignedModels . length ;
84
+
85
+ const message = {
86
+ method : 'POST' ,
87
+ headers : { 'Content-Type' : 'application/json' , } ,
88
+ body : JSON . stringify ( {
89
+ model : model ,
90
+ } ) ,
91
+ } ;
92
+ try {
93
+ const response = await fetch ( getUrls ( ) . TEST_MODEL , { ...message } ) ;
94
+ const data = await response . json ( ) ;
95
+ const status = data [ "status" ] || 'error' ;
96
+ dispatch ( dfActions . updateModelStatus ( { id : model . id , status, message : data [ "message" ] || "" } ) ) ;
97
+ // For unassigned models, break when we find a working one
98
+ if ( ! isAssignedModel && status == 'ok' ) {
99
+ break ;
100
+ }
101
+ } catch ( error ) {
102
+ dispatch ( dfActions . updateModelStatus ( { id : model . id , status : 'error' , message : ( error as Error ) . message || 'Failed to test model' } ) ) ;
103
+ }
104
+ }
105
+ } ;
106
+
107
+ if ( models . length > 0 ) {
108
+ findWorkingModel ( ) ;
109
+ }
110
+ } , [ ] ) ;
111
+
62
112
let conceptEncodingPanel = (
63
113
< Box sx = { { display : "flex" , flexDirection : "row" , width : '100%' , flexGrow : 1 , overflow : "hidden" } } >
64
114
< ConceptShelf />
@@ -173,7 +223,7 @@ Totals (7 entries) 5 5 5 15
173
223
return (
174
224
< Box sx = { { display : 'block' , width : "100%" , height : 'calc(100% - 49px)' } } >
175
225
< DndProvider backend = { HTML5Backend } >
176
- { selectedModelId == undefined ? modelSelectionDialogBox : ( tables . length > 0 ? fixedSplitPane : dataUploadRequestBox ) }
226
+ { ! noBrokenModelSlots ? modelSelectionDialogBox : ( tables . length > 0 ? fixedSplitPane : dataUploadRequestBox ) }
177
227
</ DndProvider >
178
228
</ Box > ) ;
179
229
}
0 commit comments