diff --git a/apps/x/apps/renderer/src/components/settings-dialog.tsx b/apps/x/apps/renderer/src/components/settings-dialog.tsx index 840b9cf4..26539d73 100644 --- a/apps/x/apps/renderer/src/components/settings-dialog.tsx +++ b/apps/x/apps/renderer/src/components/settings-dialog.tsx @@ -167,14 +167,14 @@ const defaultBaseURLs: Partial> = { function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) { const [provider, setProvider] = useState("openai") - const [providerConfigs, setProviderConfigs] = useState>({ - openai: { apiKey: "", baseURL: "", model: "" }, - anthropic: { apiKey: "", baseURL: "", model: "" }, - google: { apiKey: "", baseURL: "", model: "" }, - openrouter: { apiKey: "", baseURL: "", model: "" }, - aigateway: { apiKey: "", baseURL: "", model: "" }, - ollama: { apiKey: "", baseURL: "http://localhost:11434", model: "" }, - "openai-compatible": { apiKey: "", baseURL: "http://localhost:1234/v1", model: "" }, + const [providerConfigs, setProviderConfigs] = useState>({ + openai: { apiKey: "", baseURL: "", model: "", knowledgeGraphModel: "" }, + anthropic: { apiKey: "", baseURL: "", model: "", knowledgeGraphModel: "" }, + google: { apiKey: "", baseURL: "", model: "", knowledgeGraphModel: "" }, + openrouter: { apiKey: "", baseURL: "", model: "", knowledgeGraphModel: "" }, + aigateway: { apiKey: "", baseURL: "", model: "", knowledgeGraphModel: "" }, + ollama: { apiKey: "", baseURL: "http://localhost:11434", model: "", knowledgeGraphModel: "" }, + "openai-compatible": { apiKey: "", baseURL: "http://localhost:1234/v1", model: "", knowledgeGraphModel: "" }, }) const [modelsCatalog, setModelsCatalog] = useState>({}) const [modelsLoading, setModelsLoading] = useState(false) @@ -199,7 +199,7 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) { (!requiresBaseURL || activeConfig.baseURL.trim().length > 0) const updateConfig = useCallback( - (prov: LlmProviderFlavor, updates: Partial<{ apiKey: string; baseURL: string; model: string }>) => { + (prov: LlmProviderFlavor, updates: Partial<{ apiKey: string; baseURL: string; model: string; knowledgeGraphModel: string }>) => { setProviderConfigs(prev => ({ ...prev, [prov]: { ...prev[prov], ...updates }, @@ -229,6 +229,7 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) { apiKey: parsed.provider.apiKey || "", baseURL: parsed.provider.baseURL || (defaultBaseURLs[flavor] || ""), model: parsed.model, + knowledgeGraphModel: parsed.knowledgeGraphModel || "", }, })) } @@ -296,6 +297,7 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) { baseURL: activeConfig.baseURL.trim() || undefined, }, model: activeConfig.model.trim(), + knowledgeGraphModel: activeConfig.knowledgeGraphModel.trim() || undefined, } const result = await window.ipc.invoke("models:test", providerConfig) if (result.success) { @@ -364,7 +366,7 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) { {/* Model selection */}
- Model + Assistant model {modelsLoading ? (
@@ -398,6 +400,40 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) { )}
+ {/* Knowledge graph model selection */} +
+ Knowledge graph model +

Used for note creation, email drafts, and meeting prep. Defaults to assistant model if empty.

+ {modelsLoading ? ( +
+ + Loading models... +
+ ) : showModelInput ? ( + updateConfig(provider, { knowledgeGraphModel: e.target.value })} + placeholder={activeConfig.model || "Enter model"} + /> + ) : ( + + )} +
+ {/* API Key */} {showApiKey && (
diff --git a/apps/x/packages/core/src/agents/runtime.ts b/apps/x/packages/core/src/agents/runtime.ts index e1924523..2d9d3d7c 100644 --- a/apps/x/packages/core/src/agents/runtime.ts +++ b/apps/x/packages/core/src/agents/runtime.ts @@ -706,7 +706,12 @@ export async function* streamAgent({ // set up provider + model const provider = createProvider(modelConfig.provider); - const model = provider.languageModel(modelConfig.model); + const knowledgeGraphAgents = ["note_creation", "email-draft", "meeting-prep"]; + const modelId = (knowledgeGraphAgents.includes(state.agentName!) && modelConfig.knowledgeGraphModel) + ? modelConfig.knowledgeGraphModel + : modelConfig.model; + const model = provider.languageModel(modelId); + console.log(`[main] [GraphBuilder] Agent "${state.agentName}" using model: ${modelId}`); let loopCounter = 0; while (true) { diff --git a/apps/x/packages/shared/src/models.ts b/apps/x/packages/shared/src/models.ts index 14e91689..48085e9f 100644 --- a/apps/x/packages/shared/src/models.ts +++ b/apps/x/packages/shared/src/models.ts @@ -10,4 +10,5 @@ export const LlmProvider = z.object({ export const LlmModelConfig = z.object({ provider: LlmProvider, model: z.string(), + knowledgeGraphModel: z.string().optional(), });