@@ -38,6 +38,8 @@ export default defineComponent({
3838 const trainingConfigurations = ref <TrainingConfigs | null >(null );
3939 const selectedTrainingConfig = ref <string | null >(null );
4040 const annotatedFramesOnly = ref <boolean >(false );
41+ const fineTuning = ref <boolean >(false );
42+ const selectedFineTune = ref <string >(' ' );
4143 const {
4244 request : _runTrainingRequest,
4345 reset : dismissJobDialog,
@@ -46,10 +48,32 @@ export default defineComponent({
4648
4749 const successMessage = computed (() => ` Started training on ${props .selectedDatasetIds .length } dataset(s) ` );
4850
51+ const fineTuneModelList = computed (() => {
52+ const modelList: {text: string , type: ' user' | ' system' , name: string }[] = [];
53+ if (trainingConfigurations .value ?.models ) {
54+ Object .entries (trainingConfigurations .value .models )
55+ .forEach (([, value ]) => {
56+ modelList .push ({
57+ text: ` ${value .name } - ${value .folderId ? ' User' : ' System' } Model ` ,
58+ type: value .folderId ? ' user' : ' system' ,
59+ name: value .name ,
60+ });
61+ });
62+ }
63+ modelList .sort ((a , b ) => b .type .localeCompare (a .type ));
64+ return modelList ;
65+ });
66+ const selectedFineTuneObject = computed (() => {
67+ if (selectedFineTune .value !== ' ' && trainingConfigurations .value ?.models ) {
68+ return Object .values (trainingConfigurations .value .models )
69+ .find ((model ) => model .name === selectedFineTune .value );
70+ }
71+ return undefined ;
72+ });
4973 onBeforeMount (async () => {
5074 const resp = await getTrainingConfigurations ();
5175 trainingConfigurations .value = resp ;
52- selectedTrainingConfig .value = resp .default ;
76+ selectedTrainingConfig .value = resp .training . default ;
5377 });
5478
5579 const trainingDisabled = computed (() => props .selectedDatasetIds .length === 0 );
@@ -74,13 +98,16 @@ export default defineComponent({
7498 selectedTrainingConfig .value ,
7599 annotatedFramesOnly .value ,
76100 labelText .value ,
101+ selectedFineTuneObject .value ,
77102 );
78103 }
79104 return runTraining (
80105 props .selectedDatasetIds ,
81106 outputPipelineName ,
82107 selectedTrainingConfig .value ,
83108 annotatedFramesOnly .value ,
109+ undefined ,
110+ selectedFineTuneObject .value ,
84111 );
85112 });
86113 menuOpen .value = false ;
@@ -116,6 +143,10 @@ export default defineComponent({
116143 labelFile ,
117144 clearLabelText ,
118145 simplifyTrainingName ,
146+ // Fine-Tuning
147+ fineTuning ,
148+ fineTuneModelList ,
149+ selectedFineTune ,
119150 };
120151 },
121152});
@@ -161,6 +192,7 @@ export default defineComponent({
161192 <v-card
162193 v-if =" trainingConfigurations"
163194 outlined
195+ class =" training-menu"
164196 >
165197 <v-card-title class =" pb-1" >
166198 Run Training
@@ -198,7 +230,7 @@ export default defineComponent({
198230 outlined
199231 class =" my-4"
200232 label =" Configuration File"
201- :items =" trainingConfigurations.configs"
233+ :items =" trainingConfigurations.training. configs"
202234 :hint =" selectedTrainingConfig"
203235 persistent-hint
204236 >
@@ -225,6 +257,25 @@ export default defineComponent({
225257 persistent-hint
226258 class =" pt-0"
227259 />
260+ <v-checkbox
261+ v-model =" fineTuning"
262+ label =" Fine Tune Model"
263+ hint =" Fine Tune an existing model"
264+ persistent-hint
265+ class =" pt-0"
266+ />
267+ <v-select
268+ v-if =" fineTuning"
269+ v-model =" selectedFineTune"
270+ outlined
271+ class =" my-4"
272+ label =" Fine Tune Model"
273+ :items =" fineTuneModelList"
274+ item-value =" name"
275+ item-text =" text"
276+ hint =" Model to Fine Tune"
277+ persistent-hint
278+ />
228279 <v-btn
229280 depressed
230281 block
@@ -248,3 +299,10 @@ export default defineComponent({
248299 />
249300 </div >
250301</template >
302+
303+ <style lang="css" scoped>
304+ .training-menu {
305+ max-height : 90vh ;
306+ overflow-y : auto ;
307+ }
308+ </style >
0 commit comments