- No models available. Configure API keys in AI Settings.
-
- );
- }
-
- return (
-
- {/* Provider tabs */}
-
- {providers.map((p) => (
-
- ))}
-
-
-
- {/* Enabled section */}
-
- {enabled.length === 0 && (
- Drag models here to enable
- )}
- {enabled.map((m) => (
-
- ))}
-
-
- {/* Disabled section */}
-
- {disabled.length === 0 && (
- All models enabled
- )}
- {disabled.map((m) => (
-
- ))}
-
-
- );
-}
diff --git a/src/apps/officer-web/Screens/Dashboard/Settings/index.tsx b/src/apps/officer-web/Screens/Dashboard/Settings/index.tsx
index 166aa8e4..f652a760 100644
--- a/src/apps/officer-web/Screens/Dashboard/Settings/index.tsx
+++ b/src/apps/officer-web/Screens/Dashboard/Settings/index.tsx
@@ -1,5 +1,6 @@
export * from './ProfileSettings';
export * from './SystemSettings';
+export * from './AISettings';
export * from './ResourceSettings';
export * from './UserSettings';
export * from './IntegrationsSettings';
diff --git a/src/workspaces/officerdev/src/apps/Chat/EmbeddableChat/useEmbeddableChat.ts b/src/workspaces/officerdev/src/apps/Chat/EmbeddableChat/useEmbeddableChat.ts
index f99b5e77..6f02ce4b 100644
--- a/src/workspaces/officerdev/src/apps/Chat/EmbeddableChat/useEmbeddableChat.ts
+++ b/src/workspaces/officerdev/src/apps/Chat/EmbeddableChat/useEmbeddableChat.ts
@@ -1,6 +1,6 @@
import type { KeyboardEvent } from 'react';
import { useState, useRef, useEffect } from 'react';
-import { useVisiblePiModels } from 'state/useModels';
+import { useUserVisibleModels } from 'state/useModels';
import { usePiChat, type UsePiChatType } from '../../../hooks/usePiChat';
import { useAttachments } from '../useAttachments';
import { useSlashCommands } from '../useSlashCommands';
@@ -47,7 +47,7 @@ export function useEmbeddableChat(params: UseEmbeddableChatParams, onMessageComp
stopGeneration,
} = chat;
- const availableModels = useVisiblePiModels();
+ const availableModels = useUserVisibleModels();
const attachmentManager = useAttachments({ sessionId });
const slashCommands = useSlashCommands({ sessionId });
diff --git a/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/TaskRunnerModal.tsx b/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/TaskRunnerModal.tsx
index 0057b62b..023cffee 100644
--- a/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/TaskRunnerModal.tsx
+++ b/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/TaskRunnerModal.tsx
@@ -6,7 +6,7 @@ import { cardStyle } from '@/components/Card';
import type { TaskInfo, ChatMessage } from '../../../Chat';
import { usePiChat, MessageBubble, StreamingBubble, ModelSelector } from '../../../Chat';
import { useSettings } from 'state/useSettings';
-import { useVisiblePiModels } from 'state/useModels';
+import { useUserVisibleModels } from 'state/useModels';
import type { TaskSummary } from '../../useTasks';
const playDing = () => {
@@ -46,7 +46,7 @@ type PiMonoInnerProps = {
const PiMonoInner = ({ defaultInput, cwd, initialModel, taskInfo, sandboxed }: PiMonoInnerProps) => {
const [phase, setPhase] = useState