From 5f6bee5a87ec256ddc0ed9863c0a9579fff2ab71 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 27 Jun 2025 20:32:45 -0400 Subject: [PATCH] update priority --- .../providers/set_provider_order_command.rs | 8 ++++ ...e.tsx => ProviderPrioritySettingsPane.tsx} | 38 +++++++++---------- .../settings-modal/src/lib/settings-modal.tsx | 16 ++++---- frontend/libs/tauri-api/src/index.ts | 3 ++ .../tauri-api/src/lib/providers/Provider.ts | 6 +++ .../src/lib/providers/SetProviderOrder.ts | 17 +++++++++ 6 files changed, 61 insertions(+), 27 deletions(-) rename frontend/libs/components/settings-modal/src/lib/panes/{RouterPrioritySettingsPane.tsx => ProviderPrioritySettingsPane.tsx} (76%) create mode 100644 frontend/libs/tauri-api/src/lib/providers/Provider.ts create mode 100644 frontend/libs/tauri-api/src/lib/providers/SetProviderOrder.ts diff --git a/crates/desktop/artcraft/src/core/commands/providers/set_provider_order_command.rs b/crates/desktop/artcraft/src/core/commands/providers/set_provider_order_command.rs index d7d403952c..02577e4498 100644 --- a/crates/desktop/artcraft/src/core/commands/providers/set_provider_order_command.rs +++ b/crates/desktop/artcraft/src/core/commands/providers/set_provider_order_command.rs @@ -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()) } diff --git a/frontend/libs/components/settings-modal/src/lib/panes/RouterPrioritySettingsPane.tsx b/frontend/libs/components/settings-modal/src/lib/panes/ProviderPrioritySettingsPane.tsx similarity index 76% rename from frontend/libs/components/settings-modal/src/lib/panes/RouterPrioritySettingsPane.tsx rename to frontend/libs/components/settings-modal/src/lib/panes/ProviderPrioritySettingsPane.tsx index 19a50c27ac..7085038567 100644 --- a/frontend/libs/components/settings-modal/src/lib/panes/RouterPrioritySettingsPane.tsx +++ b/frontend/libs/components/settings-modal/src/lib/panes/ProviderPrioritySettingsPane.tsx @@ -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([ - { 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([ + { 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 = () => {

- 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.

diff --git a/frontend/libs/components/settings-modal/src/lib/settings-modal.tsx b/frontend/libs/components/settings-modal/src/lib/settings-modal.tsx index 70a3737b0a..d6c78708ad 100644 --- a/frontend/libs/components/settings-modal/src/lib/settings-modal.tsx +++ b/frontend/libs/components/settings-modal/src/lib/settings-modal.tsx @@ -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 ; - case "router_priority": - return ; + case "provider_priority": + return ; } }; diff --git a/frontend/libs/tauri-api/src/index.ts b/frontend/libs/tauri-api/src/index.ts index f32a3b435a..80b255d05a 100644 --- a/frontend/libs/tauri-api/src/index.ts +++ b/frontend/libs/tauri-api/src/index.ts @@ -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"; + diff --git a/frontend/libs/tauri-api/src/lib/providers/Provider.ts b/frontend/libs/tauri-api/src/lib/providers/Provider.ts new file mode 100644 index 0000000000..35e9b74c74 --- /dev/null +++ b/frontend/libs/tauri-api/src/lib/providers/Provider.ts @@ -0,0 +1,6 @@ + +export enum Provider { + ArtCraft = "artcraft", + Fal = "fal", + Sora = "sora", +} diff --git a/frontend/libs/tauri-api/src/lib/providers/SetProviderOrder.ts b/frontend/libs/tauri-api/src/lib/providers/SetProviderOrder.ts new file mode 100644 index 0000000000..60799dca00 --- /dev/null +++ b/frontend/libs/tauri-api/src/lib/providers/SetProviderOrder.ts @@ -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 => { + const result = await invoke("set_provider_order_command", { + request: { + providers: request.providers, + } + }); + + return (result as CommandResult); +}