new flow for Pi provider/model settings

This commit is contained in:
2026-02-22 20:19:11 +00:00
parent 1372f53782
commit f1e3ce4b76
15 changed files with 249 additions and 460 deletions
@@ -14,6 +14,8 @@ export type ModelOption = {
provider: string;
contextWindow: number;
maxTokens: number;
reasoning?: boolean;
images?: boolean;
};
export type SessionEntry = {
@@ -95,8 +95,8 @@ export const SessionList = () => {
{(() => {
if (!session.model.includes('/')) return session.model;
const [provider, modelId] = session.model.split('/');
const [provider, modelId] = session.model.split('/') as [string, string];
// Handle local providers - show friendly name
if (provider.startsWith('officer-local-')) {
const friendlyName = getProviderDisplayName(provider);
+13 -18
View File
@@ -30,7 +30,7 @@ export function usePiModels() {
console.log('[usePiModels] Fetched models:', {
modelCount: data.models.length,
providerNames: data.providerNames,
providers: [...new Set(data.models.map(m => m.provider))]
providers: [...new Set(data.models.map((m: ModelOption) => m.provider))]
});
// Store provider names for later use
@@ -51,34 +51,29 @@ export function useVisiblePiModels() {
const models = usePiModels();
const { settings } = useSettings();
const enabled = settings.ai?.enabledModels ?? [];
const disabledProviders = new Set(settings.ai?.disabledProviders ?? []);
// If no enabled models list exists, show all models
// First filter out disabled providers
const providerFiltered = disabledProviders.size > 0
? models.filter((m) => !disabledProviders.has(m.provider))
: models;
// If no enabled models list, show all (after provider filtering)
if (enabled.length === 0) {
console.log('[useVisiblePiModels] No enabled models list, showing all');
return models;
return providerFiltered;
}
// Get all providers from enabled models
const enabledProviders = new Set(
enabled.map(key => key.split(':')[0])
const enabledProviderSet = new Set(
enabled.map(key => key.split(':')[0]),
);
// Filter to include:
// 1. Models that are explicitly enabled
// 2. Models from providers that aren't in the enabled list at all (new providers)
const filtered = models.filter((m) => {
return providerFiltered.filter((m) => {
const isExplicitlyEnabled = enabled.includes(modelKey(m));
const isFromNewProvider = !enabledProviders.has(m.provider);
const isFromNewProvider = !enabledProviderSet.has(m.provider);
return isExplicitlyEnabled || isFromNewProvider;
});
console.log('[useVisiblePiModels]', {
allModels: models.length,
enabledModels: enabled,
enabledProviders: Array.from(enabledProviders),
filtered: filtered.length,
finalCount: filtered.length
});
return filtered;
}
+3
View File
@@ -10,6 +10,7 @@ const mergeWithDefaults = (saved: Partial<UserSettings>): UserSettings => ({
ai: {
enabledModels: saved.ai?.enabledModels?.length ? saved.ai.enabledModels : DEFAULT_SETTINGS.ai.enabledModels,
enabledProviders: saved.ai?.enabledProviders ?? DEFAULT_SETTINGS.ai.enabledProviders,
disabledProviders: saved.ai?.disabledProviders ?? DEFAULT_SETTINGS.ai.disabledProviders,
},
tasks: { ...DEFAULT_SETTINGS.tasks, ...saved.tasks },
appearance: { ...DEFAULT_SETTINGS.appearance, ...saved.appearance },
@@ -55,6 +56,7 @@ export type UserSettings = {
ai: {
enabledModels: string[];
enabledProviders: string[];
disabledProviders: string[];
};
tasks: {
defaultProvider: 'pi';
@@ -84,6 +86,7 @@ export const DEFAULT_SETTINGS: UserSettings = {
ai: {
enabledModels: [],
enabledProviders: [],
disabledProviders: [],
},
tasks: {
defaultProvider: 'pi',