72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
import { defineStore } from 'pinia';
|
|
import CaptainPreferencesAPI from 'dashboard/api/captain/preferences';
|
|
|
|
export const useCaptainConfigStore = defineStore('captainConfig', {
|
|
state: () => ({
|
|
providers: {},
|
|
models: {},
|
|
features: {},
|
|
uiFlags: {
|
|
isFetching: false,
|
|
},
|
|
}),
|
|
|
|
getters: {
|
|
getProviders: state => state.providers,
|
|
getModels: state => state.models,
|
|
getFeatures: state => state.features,
|
|
getUIFlags: state => state.uiFlags,
|
|
getModelsForFeature: state => featureKey => {
|
|
const feature = state.features[featureKey];
|
|
const models = feature?.models || [];
|
|
|
|
const providerOrder = { openai: 0, anthropic: 1, gemini: 2 };
|
|
|
|
return [...models].sort((a, b) => {
|
|
// Move coming_soon items to the end
|
|
if (a.coming_soon && !b.coming_soon) return 1;
|
|
if (!a.coming_soon && b.coming_soon) return -1;
|
|
|
|
// Sort by provider
|
|
const providerA = providerOrder[a.provider] ?? 999;
|
|
const providerB = providerOrder[b.provider] ?? 999;
|
|
if (providerA !== providerB) return providerA - providerB;
|
|
|
|
// Sort by credit_multiplier (highest first)
|
|
return (b.credit_multiplier || 0) - (a.credit_multiplier || 0);
|
|
});
|
|
},
|
|
getDefaultModelForFeature: state => featureKey => {
|
|
const feature = state.features[featureKey];
|
|
return feature?.default || null;
|
|
},
|
|
getSelectedModelForFeature: state => featureKey => {
|
|
const feature = state.features[featureKey];
|
|
return feature?.selected || feature?.default || null;
|
|
},
|
|
},
|
|
|
|
actions: {
|
|
async fetch() {
|
|
this.uiFlags.isFetching = true;
|
|
try {
|
|
const response = await CaptainPreferencesAPI.get();
|
|
this.providers = response.data.providers || {};
|
|
this.models = response.data.models || {};
|
|
this.features = response.data.features || {};
|
|
} catch (error) {
|
|
// Ignore error
|
|
} finally {
|
|
this.uiFlags.isFetching = false;
|
|
}
|
|
},
|
|
|
|
async updatePreferences(data) {
|
|
const response = await CaptainPreferencesAPI.updatePreferences(data);
|
|
this.providers = response.data.providers || {};
|
|
this.models = response.data.models || {};
|
|
this.features = response.data.features || {};
|
|
},
|
|
},
|
|
});
|