1
1
<template >
2
- <div class =" flex flex-col gap-2" >
3
- <p >{{ languages.SETTINGS_BASIC_LANGUAGE }}</p >
4
- <drop-selector :array =" i18n.languageOptions" @change =" i18n.changeLanguage" >
5
- <template #selected >
6
- <div class =" flex gap-2 items-center" >
7
- <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
8
- <span >{{ i18n.currentLanguageName }}</span >
9
- </div >
10
- </template >
11
- <template #list =" slotItem " >
12
- <div class =" flex gap-2 items-center" >
13
- <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
14
- <span >{{ slotItem.item.name }}</span >
15
- </div >
16
- </template >
17
- </drop-selector >
18
- </div >
19
- <div v-if =" theme.availableThemes.length > 1" class =" flex flex-col gap-2" >
20
- <p >Theme</p >
21
- <div class =" grid gap-2" :class =" {[`grid-cols-${theme.availableThemes.length}`]: true}" >
22
- <radio-block v-for =" themeName in theme.availableThemes" :checked =" theme.active === themeName" :text =" themeToDisplayName(themeName)"
23
- @click =" () => theme.selected = themeName" ></radio-block >
2
+ <div class =" flex flex-col gap-2" >
3
+ <p >{{ languages.SETTINGS_BASIC_LANGUAGE }}</p >
4
+ <drop-selector :array =" i18n.languageOptions" @change =" i18n.changeLanguage" >
5
+ <template #selected >
6
+ <div class =" flex gap-2 items-center" >
7
+ <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
8
+ <span >{{ i18n.currentLanguageName }}</span >
24
9
</div >
25
- </div >
26
- <div class =" flex flex-col gap-2" >
27
- <p >{{ languages.SETTINGS_INFERENCE_DEVICE }}</p >
28
- <div class =" flex items-center gap-2 flex-wrap" >
29
- <drop-selector :array =" globalSetup.graphicsList" @change =" changeGraphics" >
30
- <template #selected >
31
- <div class =" flex gap-2 items-center" >
32
- <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
33
- <span >{{ graphicsName }}</span >
34
- </div >
35
- </template >
36
- <template #list =" slotItem " >
37
- <div class =" flex gap-2 items-center" >
38
- <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
39
- <span >{{ slotItem.item.name }}</span >
40
- </div >
41
- </template >
42
- </drop-selector >
10
+ </template >
11
+ <template #list =" slotItem " >
12
+ <div class =" flex gap-2 items-center" >
13
+ <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
14
+ <span >{{ slotItem.item.name }}</span >
43
15
</div >
16
+ </template >
17
+ </drop-selector >
18
+ </div >
19
+ <div v-if =" theme.availableThemes.length > 1" class =" flex flex-col gap-2" >
20
+ <p >Theme</p >
21
+ <div class =" grid gap-2" :class =" {[`grid-cols-${theme.availableThemes.length}`]: true}" >
22
+ <radio-block v-for =" themeName in theme.availableThemes" :checked =" theme.active === themeName"
23
+ :text =" themeToDisplayName(themeName)"
24
+ @click =" () => theme.selected = themeName" ></radio-block >
25
+ </div >
26
+ </div >
27
+ <div class =" flex flex-col gap-2" >
28
+ <p >{{ languages.SETTINGS_INFERENCE_DEVICE }}</p >
29
+ <div class =" flex items-center gap-2 flex-wrap" >
30
+ <drop-selector :array =" globalSetup.graphicsList" @change =" changeGraphics" >
31
+ <template #selected >
32
+ <div class =" flex gap-2 items-center" >
33
+ <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
34
+ <span >{{ graphicsName }}</span >
35
+ </div >
36
+ </template >
37
+ <template #list =" slotItem " >
38
+ <div class =" flex gap-2 items-center" >
39
+ <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
40
+ <span >{{ slotItem.item.name }}</span >
41
+ </div >
42
+ </template >
43
+ </drop-selector >
44
44
</div >
45
+ </div >
46
+ <div class =" border-b border-color-spilter flex flex-col gap-5 py-4" >
47
+ <h2 class =" text-center font-bold" >{{ languages.SETTINGS_MODEL_BACKEND }}</h2 >
45
48
<div class =" flex flex-col gap-2" >
46
- <p >{{ languages.SETTINGS_LLM_BACKEND }}</p >
47
- <div class =" flex items-center gap-2" >
48
- <drop-selector :array =" [...backendTypes]" @change =" (item) => textInference.backend = item" >
49
- <template #selected >
50
- <div class =" flex gap-2 items-center" >
51
- <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
52
- <span >{{ textInference.backend }}</span >
53
- </div >
54
- </template >
55
- <template #list =" slotItem " >
56
- <div class =" flex gap-2 items-center" >
57
- <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
58
- <span >{{ slotItem.item }}</span >
59
- </div >
60
- </template >
61
- </drop-selector >
49
+ <p >{{ languages.SETTINGS_LLM_BACKEND }}</p >
50
+ <div class =" flex items-center gap-2" >
51
+ <drop-selector :array =" [...backendTypes]" @change =" (item) => textInference.backend = item" >
52
+ <template #selected >
53
+ <div class =" flex gap-2 items-center" >
54
+ <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
55
+ <span >{{ textInferenceBackendDisplayName[textInference.backend] }}</span >
56
+ </div >
57
+ </template >
58
+ <template #list =" slotItem " >
59
+ <div class =" flex gap-2 items-center" >
60
+ <span class =" rounded-full bg-green-500 w-2 h-2" ></span >
61
+ <span >{{ textInferenceBackendDisplayName[slotItem.item as typeof backendTypes[number]] }}</span >
62
62
</div >
63
+ </template >
64
+ </drop-selector >
65
+ </div >
66
+ </div >
67
+ <div class =" flex flex-col gap-3" >
68
+ <p >{{ languages.SETTINGS_BACKEND_STATUS }}</p >
69
+ <!-- Required -->
70
+ <table class =" text-center w-full mx-2 table-fixed" >
71
+ <tbody >
72
+ <tr v-for =" item in apiServiceInformation" >
73
+ <td style =" text-align : left " >{{ mapServiceNameToDisplayName(item.serviceName) }}</td >
74
+ <td :style =" { color: mapStatusToColor(item.status) }" >{{ mapToDisplayStatus(item.status) }}</td >
75
+ </tr >
76
+ </tbody >
77
+ </table >
78
+ <div class =" flex flex-col pt-5" >
79
+ <button @click =" globalSetup.loadingState = 'manageInstallations'"
80
+ class =" confirm-btn" >{{ languages.SETTINGS_MODEL_MANAGE_BACKEND }}
81
+ </button >
82
+ </div >
63
83
</div >
84
+ </div >
64
85
</template >
65
86
<script setup lang="ts">
66
87
67
88
import DropSelector from " ../components/DropSelector.vue" ;
68
89
import RadioBlock from " ../components/RadioBlock.vue" ;
69
90
70
- import { useGlobalSetup } from " @/assets/js/store/globalSetup" ;
71
- import { useI18N } from ' @/assets/js/store/i18n' ;
72
- import { useTheme } from ' @/assets/js/store/theme' ;
73
- import { useTextInference , backendTypes } from " @/assets/js/store/textInference" ;
91
+ import {useGlobalSetup } from " @/assets/js/store/globalSetup" ;
92
+ import {useI18N } from ' @/assets/js/store/i18n' ;
93
+ import {useTheme } from ' @/assets/js/store/theme' ;
94
+ import {useTextInference , backendTypes } from " @/assets/js/store/textInference" ;
95
+ import {mapServiceNameToDisplayName , mapStatusToColor , mapToDisplayStatus } from " @/lib/utils.ts" ;
74
96
97
+ const apiServiceInformation = ref <ApiServiceInformation []>([])
75
98
const globalSetup = useGlobalSetup ();
76
99
const textInference = useTextInference ();
77
100
const i18n = useI18N ();
78
101
const theme = useTheme ();
79
102
103
+ const textInferenceBackendDisplayName: Record <typeof backendTypes [number ], string > = {
104
+ " IPEX-LLM" : " IPEX-LLM" ,
105
+ " LLAMA.CPP" : " Llama.cpp - GGUF"
106
+ }
107
+
108
+
109
+ onBeforeMount (async () => {
110
+ apiServiceInformation .value = await window .electronAPI .getServices ()
111
+ })
112
+
80
113
const themeToDisplayName = (theme : Theme ) => {
81
- switch (theme ) {
82
- case ' dark' : return ' Default' ;
83
- case ' lnl' : return ' Intel® Core™ Ultra' ;
84
- case ' bmg' : return ' Intel® Arc™' ;
85
- default : return theme ;
86
- }
114
+ switch (theme ) {
115
+ case ' dark' :
116
+ return ' Default' ;
117
+ case ' lnl' :
118
+ return ' Intel® Core™ Ultra' ;
119
+ case ' bmg' :
120
+ return ' Intel® Arc™' ;
121
+ default :
122
+ return theme ;
123
+ }
87
124
}
88
125
89
126
const modelSettings = reactive <KVObject >(Object .assign ({}, toRaw (globalSetup .modelSettings )));
90
127
91
128
const graphicsName = computed (() => {
92
- return globalSetup .graphicsList .find (item => modelSettings .graphics as number == item .index )?.name || " " ;
129
+ return globalSetup .graphicsList .find (item => modelSettings .graphics as number == item .index )?.name || " " ;
93
130
})
94
131
95
132
function changeGraphics(value : any , index : number ) {
96
- globalSetup .applyModelSettings ({ graphics: (value as GraphicsItem ).index });
133
+ globalSetup .applyModelSettings ({graphics: (value as GraphicsItem ).index });
97
134
}
98
135
99
136
</script >
0 commit comments