mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-13 05:12:50 +00:00
update priority
This commit is contained in:
1 parent
068ff6ac10
commit
5f6bee5a87
6 files changed
+61
-27
No files matched your search
@@ -3,6 +3,7 @@ use crate::core::commands::response::success_response_wrapper::SerializeMarker;
|
||||
use crate::core::model::image_models::ImageModel;
|
||||
use crate::core::state::app_preferences::app_preferences_manager::AppPreferencesManager;
|
||||
use crate::core::state::app_preferences::preferred_download_directory::PreferredDownloadDirectory;
|
||||
use crate::core::state::data_dir::app_data_root::AppDataRoot;
|
||||
use crate::core::state::provider_priority::{Provider, ProviderPriorityStore};
|
||||
use errors::AnyhowResult;
|
||||
use log::{error, info};
|
||||
@@ -18,6 +19,7 @@ pub struct SetProviderOrderRequest {
|
||||
pub async fn set_provider_order_command(
|
||||
request: SetProviderOrderRequest,
|
||||
provider_priority_store: State<'_, ProviderPriorityStore>,
|
||||
app_data_root: State<'_, AppDataRoot>,
|
||||
) -> SuccessOrErrorMessage {
|
||||
info!("set_provider_order_command called");
|
||||
|
||||
@@ -26,6 +28,12 @@ pub async fn set_provider_order_command(
|
||||
error!("Failed to set provider order: {:?}", err);
|
||||
"Failed to set provider order"
|
||||
})?;
|
||||
|
||||
provider_priority_store.persist_to_filesystem(&app_data_root)
|
||||
.map_err(|err| {
|
||||
error!("Failed to persist provider order to filesystem: {:?}", err);
|
||||
"Failed to persist provider order"
|
||||
})?;
|
||||
|
||||
Ok(().into())
|
||||
}
|
||||
+19
-19
@@ -21,9 +21,10 @@ import {
|
||||
faGripVertical,
|
||||
faSpinnerThird,
|
||||
} from "@fortawesome/pro-solid-svg-icons";
|
||||
import { SetProviderOrder, Provider } from "@storyteller/tauri-api";
|
||||
|
||||
interface RouterItem {
|
||||
id: string;
|
||||
interface ProviderItem {
|
||||
id: Provider;
|
||||
name: string;
|
||||
emoji: string;
|
||||
}
|
||||
@@ -81,13 +82,11 @@ const SortableItem = ({
|
||||
);
|
||||
};
|
||||
|
||||
export const RouterPrioritySettingsPane = () => {
|
||||
const [items, setItems] = useState<RouterItem[]>([
|
||||
{ id: "artcraft-3d", name: "ArtCraft 3D", emoji: "🎨" },
|
||||
{ id: "gpt-image-1", name: "GPT Image 1 (GPT-4o)", emoji: "🤖" },
|
||||
{ id: "flux-pro-ultra", name: "Flux Pro Ultra", emoji: "⚡" },
|
||||
{ id: "recraft-3", name: "Recraft 3", emoji: "🌟" },
|
||||
{ id: "flux-kontext", name: "Flux.1 Kontext", emoji: "🔮" },
|
||||
export const ProviderPrioritySettingsPane = () => {
|
||||
const [items, setItems] = useState<ProviderItem[]>([
|
||||
{ id: Provider.ArtCraft, name: "ArtCraft", emoji: "🎨" },
|
||||
{ id: Provider.Fal, name: "Fal", emoji: "🤖" },
|
||||
{ id: Provider.Sora, name: "Sora / ChatGPT", emoji: "⚡" },
|
||||
]);
|
||||
const [isUpdating, setIsUpdating] = useState(false);
|
||||
|
||||
@@ -98,19 +97,20 @@ export const RouterPrioritySettingsPane = () => {
|
||||
})
|
||||
);
|
||||
|
||||
const updateRouterPriorityOnBackend = async (newOrder: RouterItem[]) => {
|
||||
const updateProviderPriorityOnBackend = async (newOrder: ProviderItem[]) => {
|
||||
try {
|
||||
setIsUpdating(true);
|
||||
console.log("Updating router priority on backend:", newOrder);
|
||||
console.log("Updating provider priority on backend:", newOrder);
|
||||
|
||||
// Simulate API call delay
|
||||
await new Promise((resolve) => setTimeout(resolve, 500)); //remove this - BFlat
|
||||
let ordering = newOrder.map((item) => item.id);
|
||||
console.log("Provider order:", ordering);
|
||||
|
||||
//api call here
|
||||
await SetProviderOrder({ providers: ordering });
|
||||
|
||||
console.log("Router priority updated successfully");
|
||||
|
||||
console.log("Provider priority updated successfully");
|
||||
} catch (error) {
|
||||
console.error("Failed to update router priority:", error);
|
||||
console.error("Failed to update provider priority:", error);
|
||||
} finally {
|
||||
setIsUpdating(false);
|
||||
}
|
||||
@@ -127,7 +127,7 @@ export const RouterPrioritySettingsPane = () => {
|
||||
const newOrder = arrayMove(prevItems, oldIndex, newIndex);
|
||||
|
||||
// Send update to backend
|
||||
updateRouterPriorityOnBackend(newOrder);
|
||||
updateProviderPriorityOnBackend(newOrder);
|
||||
|
||||
return newOrder;
|
||||
});
|
||||
@@ -138,8 +138,8 @@ export const RouterPrioritySettingsPane = () => {
|
||||
<div className="space-y-4">
|
||||
<div>
|
||||
<p className="text-sm text-white/70 mb-4">
|
||||
Drag and drop to reorder model priority. Higher items will be tried
|
||||
first.
|
||||
Drag and drop to reorder model provider priority. Higher items will be tried
|
||||
first. You can use this to control favorite services and spending.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@ import { MiscSettingsPane } from "./panes/MiscSettingsPane";
|
||||
import { AudioSettingsPane } from "./panes/AudioSettingsPane";
|
||||
import { AccountSettingsPane } from "./panes/AccountSettings/AccountSettingsPane";
|
||||
import { AboutSettingsPane } from "./panes/AboutSettingsPane";
|
||||
import { RouterPrioritySettingsPane } from "./panes/RouterPrioritySettingsPane";
|
||||
import { ProviderPrioritySettingsPane } from "./panes/ProviderPrioritySettingsPane";
|
||||
|
||||
interface SettingsModalProps {
|
||||
isOpen: boolean;
|
||||
@@ -27,7 +27,7 @@ type SettingsSection =
|
||||
| "accounts"
|
||||
| "alerts"
|
||||
| "about"
|
||||
| "router_priority";
|
||||
| "provider_priority";
|
||||
|
||||
export const SettingsModal = ({
|
||||
isOpen,
|
||||
@@ -41,13 +41,13 @@ export const SettingsModal = ({
|
||||
const sections = [
|
||||
{ id: "general" as const, label: "General", icon: faCog },
|
||||
{ id: "accounts" as const, label: "Accounts", icon: faUser },
|
||||
{ id: "alerts" as const, label: "Alerts", icon: faVolumeHigh },
|
||||
{ id: "about" as const, label: "About", icon: faCircleInfo },
|
||||
{
|
||||
id: "router_priority" as const,
|
||||
label: "Model Router Priority",
|
||||
id: "provider_priority" as const,
|
||||
label: "Provider Priority",
|
||||
icon: faRoute,
|
||||
},
|
||||
{ id: "alerts" as const, label: "Alerts", icon: faVolumeHigh },
|
||||
{ id: "about" as const, label: "About", icon: faCircleInfo },
|
||||
//{ id: "video" as const, label: "Video", icon: faVideo },
|
||||
//{ id: "image" as const, label: "Image", icon: faImage },
|
||||
];
|
||||
@@ -66,8 +66,8 @@ export const SettingsModal = ({
|
||||
);
|
||||
case "about":
|
||||
return <AboutSettingsPane />;
|
||||
case "router_priority":
|
||||
return <RouterPrioritySettingsPane />;
|
||||
case "provider_priority":
|
||||
return <ProviderPrioritySettingsPane />;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -17,3 +17,6 @@ export * from "./lib/sora/SoraImageRemix.js";
|
||||
export * from "./lib/sora/useSoraLoginListener.js";
|
||||
export * from "./lib/sora/waitForSoraLogin.js";
|
||||
export * from "./lib/system/GetAppInfo.js";
|
||||
export * from "./lib/providers/SetProviderOrder.js";
|
||||
export * from "./lib/providers/Provider.js";
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
export enum Provider {
|
||||
ArtCraft = "artcraft",
|
||||
Fal = "fal",
|
||||
Sora = "sora",
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { CommandResult } from "../common/CommandStatus";
|
||||
import { Provider } from "./Provider";
|
||||
|
||||
export interface SetProviderOrderRequest {
|
||||
providers: Provider[];
|
||||
}
|
||||
|
||||
export const SetProviderOrder = async (request: SetProviderOrderRequest) : Promise<CommandResult> => {
|
||||
const result = await invoke("set_provider_order_command", {
|
||||
request: {
|
||||
providers: request.providers,
|
||||
}
|
||||
});
|
||||
|
||||
return (result as CommandResult);
|
||||
}
|
||||
Reference in new issue
Block a user