feat(ai): unify model discovery and effort handling

This commit is contained in:
Guoyu Su authored and GitHub committed 2026-07-28 21:37:55 +08:00
1 parent c54b95e274
commit c7e7b7c9d9
41 files changed
+3291 -634

No files matched your search

+3
View File
@@ -251,6 +251,9 @@ export const aiAgentStream = forward("aiAgentStream");
export const aiCancelStream = forward("aiCancelStream");
export const aiTestConnection = forward("aiTestConnection");
export const aiListModels = forward("aiListModels");
export const aiResolveModelEffort = forward("aiResolveModelEffort");
export const saveAiChatSelection = forward("saveAiChatSelection");
export const loadAiChatSelection = forward("loadAiChatSelection");
export const saveAiConfig = forward("saveAiConfig");
export const loadAiConfig = forward("loadAiConfig");
export const saveAiConfigs = forward("saveAiConfigs");
+13
View File
@@ -48,6 +48,7 @@ import type { CollectionInfo } from "@/types/database";
import type { SchemaDiffPreparation, SchemaDiffPreparationOptions, TableDiff, FunctionDiff, SequenceDiff, RuleDiff, OwnerDiff } from "@/lib/schema/schemaDiff";
import type { SidebarObjectKind } from "@/lib/database/databaseObjectCapabilities";
import type { AiConfig, AiTestConnectionResult } from "@/stores/settingsStore";
import type { AiChatSelectionState, AiEffortCapability } from "@/types/ai";
import type {
AgentDriverInfo,
AiCompletionRequest,
@@ -1136,6 +1137,18 @@ export async function aiListModels(config: AiConfig): Promise<AiModelInfo[]> {
return post("/api/ai/models", { config });
}
export async function aiResolveModelEffort(config: AiConfig, modelId: string): Promise<AiEffortCapability> {
return post("/api/ai/model-effort", { config, modelId });
}
export async function saveAiChatSelection(selection: AiChatSelectionState): Promise<void> {
return post("/api/ai/chat-selection", { selection });
}
export async function loadAiChatSelection(): Promise<AiChatSelectionState | null> {
return get("/api/ai/chat-selection");
}
export type { AgentEvent } from "@/lib/backend/tauri";
function isAgentEvent(v: unknown): v is import("@/lib/backend/tauri").AgentEvent {
+14 -1
View File
@@ -47,7 +47,7 @@ import type {
import { isTauriCommandUnavailable, normalizeConnectionTestResult } from "@/lib/connection/connectionDatabaseInfo";
import type { CollectionInfo } from "@/types/database";
import type { SidebarObjectKind } from "@/lib/database/databaseObjectCapabilities";
import type { AiConfig, AiConfigItem, AiEffortLevel, AiTestConnectionResult } from "@/types/ai";
import type { AiChatSelectionState, AiConfig, AiConfigItem, AiEffortCapability, AiEffortLevel, AiTestConnectionResult } from "@/types/ai";
import type { QueryEditability } from "@/lib/sql/sqlAnalysis";
import { isTerminalTransferProgress } from "@/lib/backend/transferProgress";
import type {
@@ -358,6 +358,7 @@ export interface AiModelInfo {
id: string;
displayName?: string;
supportedEffortLevels?: AiEffortLevel[];
effortCapability?: AiEffortCapability;
}
export async function aiComplete(request: AiCompletionRequest): Promise<string> {
@@ -445,6 +446,18 @@ export async function aiListModels(config: AiConfig): Promise<AiModelInfo[]> {
return invoke("ai_list_models", { config });
}
export async function aiResolveModelEffort(config: AiConfig, modelId: string): Promise<AiEffortCapability> {
return invoke("ai_resolve_model_effort", { config, modelId });
}
export async function saveAiChatSelection(selection: AiChatSelectionState): Promise<void> {
return invoke("save_ai_chat_selection", { selection });
}
export async function loadAiChatSelection(): Promise<AiChatSelectionState | null> {
return invoke("load_ai_chat_selection");
}
export async function aiCancelStream(sessionId: string): Promise<boolean> {
return invoke("ai_cancel_stream", { sessionId });
}