feat: model dir auto-scan, remote API models, model plaza with HF/ModelScope downloads

This commit is contained in:
Xianren Studio
2026-08-13 15:37:28 +08:00
parent 0cf86c5c39
commit 451cc75cd9
17 changed files with 1132 additions and 239 deletions
+35 -2
View File
@@ -14,6 +14,7 @@ export interface ModelInfo {
id: string;
repo_id: string;
source: string;
kind: string;
file_name: string;
file_path: string;
file_size: number;
@@ -21,10 +22,28 @@ export interface ModelInfo {
family: string | null;
status: string;
sha256: string | null;
base_url: string | null;
api_key: string | null;
api_model: string | null;
meta: Record<string, unknown>;
created_at: string;
}
export interface RepoSummary {
repo_id: string;
author: string;
name: string;
downloads: number | null;
likes: number | null;
tags: string[];
}
export interface ModelFile {
path: string;
size: number;
sha256: string | null;
}
export interface EngineStatus {
running: boolean;
port: number | null;
@@ -110,6 +129,13 @@ export const api = {
listModels: () => invoke<ModelInfo[]>("list_models"),
importModel: (path: string) => invoke<ModelInfo>("import_model", { path }),
removeModel: (id: string) => invoke<void>("remove_model", { id }),
scanModels: () => invoke<ModelInfo[]>("scan_models"),
addRemoteModel: (name: string, baseUrl: string, apiKey: string, apiModel: string) =>
invoke<ModelInfo>("add_remote_model", { name, baseUrl, apiKey, apiModel }),
searchModels: (query: string, source: string) =>
invoke<RepoSummary[]>("search_models", { query, source }),
listModelFiles: (repoId: string, source: string) =>
invoke<ModelFile[]>("list_model_files", { repoId, source }),
settingsGet: () => invoke<Record<string, string>>("settings_get"),
settingsSet: (key: string, value: string) =>
invoke<void>("settings_set", { key, value }),
@@ -125,11 +151,19 @@ export const api = {
engineStop: () => invoke<void>("engine_stop"),
engineStatus: () => invoke<EngineStatus>("engine_status"),
chatSend: (payload: ChatSendPayload) => invoke<string>("chat_send", { payload }),
downloadEnqueue: (url: string, fileName: string, sha256?: string) =>
downloadEnqueue: (
url: string,
fileName: string,
sha256?: string,
repoId?: string,
source?: string,
) =>
invoke<string>("download_enqueue", {
url,
fileName,
sha256: sha256 ?? null,
repoId: repoId ?? null,
source: source ?? null,
}),
serverStart: (port: number, apiKey: string) =>
invoke<ServerStatus>("server_start", { port, apiKey }),
@@ -141,4 +175,3 @@ export const api = {
export function onEvent<T>(channel: string, handler: (payload: T) => void) {
return listen<T>(channel, (event) => handler(event.payload));
}