fix(settings): async guard awaits config load, reactive devTierOverride, validate APP_TIER
This commit is contained in:
parent
e7d6dfef90
commit
81b87a750c
5 changed files with 28 additions and 5 deletions
|
|
@ -875,10 +875,12 @@ def get_app_config():
|
||||||
import os
|
import os
|
||||||
profile = os.environ.get("INFERENCE_PROFILE", "cpu")
|
profile = os.environ.get("INFERENCE_PROFILE", "cpu")
|
||||||
valid_profiles = {"remote", "cpu", "single-gpu", "dual-gpu"}
|
valid_profiles = {"remote", "cpu", "single-gpu", "dual-gpu"}
|
||||||
|
valid_tiers = {"free", "paid", "premium", "ultra"}
|
||||||
|
raw_tier = os.environ.get("APP_TIER", "free")
|
||||||
return {
|
return {
|
||||||
"isCloud": os.environ.get("CLOUD_MODE", "").lower() in ("1", "true"),
|
"isCloud": os.environ.get("CLOUD_MODE", "").lower() in ("1", "true"),
|
||||||
"isDevMode": os.environ.get("DEV_MODE", "").lower() in ("1", "true"),
|
"isDevMode": os.environ.get("DEV_MODE", "").lower() in ("1", "true"),
|
||||||
"tier": os.environ.get("APP_TIER", "free"),
|
"tier": raw_tier if raw_tier in valid_tiers else "free",
|
||||||
"contractedClient": os.environ.get("CONTRACTED_CLIENT", "").lower() in ("1", "true"),
|
"contractedClient": os.environ.get("CONTRACTED_CLIENT", "").lower() in ("1", "true"),
|
||||||
"inferenceProfile": profile if profile in valid_profiles else "cpu",
|
"inferenceProfile": profile if profile in valid_profiles else "cpu",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,12 @@ export const router = createRouter({
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
router.beforeEach((to, _from, next) => {
|
router.beforeEach(async (to, _from, next) => {
|
||||||
if (!to.path.startsWith('/settings/')) return next()
|
if (!to.path.startsWith('/settings/')) return next()
|
||||||
const config = useAppConfigStore()
|
const config = useAppConfigStore()
|
||||||
|
if (!config.loaded) await config.load()
|
||||||
const tab = to.path.replace('/settings/', '')
|
const tab = to.path.replace('/settings/', '')
|
||||||
const devOverride = localStorage.getItem('dev_tier_override')
|
const devOverride = config.devTierOverride
|
||||||
const gpuProfiles = ['single-gpu', 'dual-gpu']
|
const gpuProfiles = ['single-gpu', 'dual-gpu']
|
||||||
|
|
||||||
if (tab === 'system' && config.isCloud) return next('/settings/my-profile')
|
if (tab === 'system' && config.isCloud) return next('/settings/my-profile')
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ export const useAppConfigStore = defineStore('appConfig', () => {
|
||||||
const contractedClient = ref(false)
|
const contractedClient = ref(false)
|
||||||
const inferenceProfile = ref<InferenceProfile>('cpu')
|
const inferenceProfile = ref<InferenceProfile>('cpu')
|
||||||
const loaded = ref(false)
|
const loaded = ref(false)
|
||||||
|
const devTierOverride = ref(localStorage.getItem('dev_tier_override') ?? '')
|
||||||
|
|
||||||
async function load() {
|
async function load() {
|
||||||
const { data } = await useApiFetch<{
|
const { data } = await useApiFetch<{
|
||||||
|
|
@ -27,5 +28,15 @@ export const useAppConfigStore = defineStore('appConfig', () => {
|
||||||
loaded.value = true
|
loaded.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
return { isCloud, isDevMode, tier, contractedClient, inferenceProfile, loaded, load }
|
function setDevTierOverride(value: string | null) {
|
||||||
|
if (value) {
|
||||||
|
localStorage.setItem('dev_tier_override', value)
|
||||||
|
devTierOverride.value = value
|
||||||
|
} else {
|
||||||
|
localStorage.removeItem('dev_tier_override')
|
||||||
|
devTierOverride.value = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { isCloud, isDevMode, tier, contractedClient, inferenceProfile, loaded, load, devTierOverride, setDevTierOverride }
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -33,4 +33,13 @@ describe('SettingsView sidebar', () => {
|
||||||
const wrapper = mount(SettingsView, { global: { plugins: [makeRouter()] } })
|
const wrapper = mount(SettingsView, { global: { plugins: [makeRouter()] } })
|
||||||
expect(wrapper.find('[data-testid="nav-developer"]').exists()).toBe(false)
|
expect(wrapper.find('[data-testid="nav-developer"]').exists()).toBe(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('shows Developer when devTierOverride is set in store', () => {
|
||||||
|
const store = useAppConfigStore()
|
||||||
|
store.isDevMode = false
|
||||||
|
store.setDevTierOverride('premium')
|
||||||
|
const wrapper = mount(SettingsView, { global: { plugins: [makeRouter()] } })
|
||||||
|
expect(wrapper.find('[data-testid="nav-developer"]').exists()).toBe(true)
|
||||||
|
store.setDevTierOverride(null) // cleanup
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ import { computed } from 'vue'
|
||||||
import { useAppConfigStore } from '../../stores/appConfig'
|
import { useAppConfigStore } from '../../stores/appConfig'
|
||||||
|
|
||||||
const config = useAppConfigStore()
|
const config = useAppConfigStore()
|
||||||
const devOverride = computed(() => !!localStorage.getItem('dev_tier_override'))
|
const devOverride = computed(() => !!config.devTierOverride)
|
||||||
const gpuProfiles = ['single-gpu', 'dual-gpu']
|
const gpuProfiles = ['single-gpu', 'dual-gpu']
|
||||||
|
|
||||||
const showSystem = computed(() => !config.isCloud)
|
const showSystem = computed(() => !config.isCloud)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue