update priority

This commit is contained in:
Brandon Thomas committed 2025-06-27 20:32:45 -04:00
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())
}
@@ -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 />;
}
};
+3
View File
@@ -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);
}