mirror of
https://github.com/vladmandic/automatic
synced 2026-09-11 07:18:44 +02:00
add loaded-loras api endpoint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
+9
-4
@@ -4,11 +4,14 @@
|
||||
|
||||
### Highlights for 2026-07-12
|
||||
|
||||
*What's New?* Full 3 days(!) since there release, we're bringing a service pack update:
|
||||
**Anima** has new *Aesthetic* and *Turbo* variants, UI log viewer now allows monitoring and easy sharing of server and client logs
|
||||
There are quite a few SDNQ improvements and we're continuing with enhanced support for 3rd party finetunes
|
||||
*What's New?* Full week(!) since there release, we're bringing a service pack update:
|
||||
**Anima** has new *Aesthetic* and *Turbo* variants
|
||||
But also:
|
||||
- UI updates to Server info and Log viewers, more informative and allows easier sharing of info
|
||||
- Quite a few SDNQ improvements, both to quantization and attention
|
||||
- Continuing with enhanced support for 3rd party finetunes
|
||||
|
||||
*Note*: As long as there are no major items in #dev branch, we will continue with weekly service updates, so stay tuned for more!
|
||||
*Note*: As long as there are no major items in `#dev` branch, we will continue with weekly service updates, so stay tuned for more!
|
||||
|
||||
[Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic)
|
||||
|
||||
@@ -28,6 +31,8 @@ There are quite a few SDNQ improvements and we're continuing with enhanced suppo
|
||||
- sdnq: improve attention
|
||||
- api: add `/sdapi/v1/restart` endpoint
|
||||
- **UI**
|
||||
- improved server info panel
|
||||
now shows loaded components, networks, etc.
|
||||
- improved log viewer for both server and client logs
|
||||
- expose server errors
|
||||
- log view copy server log and copy client log buttons
|
||||
|
||||
Submodule extensions-builtin/sdnext-modernui updated: 6964b18a91...79949497d9
@@ -26,6 +26,12 @@ def post_refresh_loras():
|
||||
return result
|
||||
|
||||
|
||||
def get_loaded():
|
||||
"""Return a list of currently loaded LoRA networks with name, alias, path, and metadata."""
|
||||
from modules.lora import lora_common
|
||||
return [obj.name for obj in lora_common.loaded_networks]
|
||||
|
||||
|
||||
def _invalidate_extra_networks():
|
||||
"""Reset extra-networks page caches so the v2 API picks up changes."""
|
||||
from modules import shared
|
||||
@@ -38,3 +44,4 @@ def register_api(api):
|
||||
api.add_api_route("/sdapi/v1/lora", get_lora, methods=["GET"], response_model=dict, tags=["Enumerators"])
|
||||
api.add_api_route("/sdapi/v1/loras", get_loras, methods=["GET"], response_model=list[dict], tags=["Enumerators"])
|
||||
api.add_api_route("/sdapi/v1/refresh-loras", post_refresh_loras, methods=["POST"], tags=["Functional"])
|
||||
api.add_api_route("/sdapi/v1/loaded-loras", get_loaded, methods=["GET"], response_model=list[str], tags=["Enumerators"])
|
||||
|
||||
@@ -31,6 +31,7 @@ log_cost = {
|
||||
"/sdapi/v1/memory": -1,
|
||||
"/sdapi/v1/platform": -1,
|
||||
"/sdapi/v1/checkpoint": -1,
|
||||
"/sdapi/v1/loaded-loras": -1,
|
||||
"/sdapi/v1/gpu-smi": -1,
|
||||
"/sdapi/v1/status": 60,
|
||||
"/sdapi/v1/progress": 60,
|
||||
|
||||
Vendored
+6
@@ -10313,9 +10313,13 @@ async function setupControlUI() {
|
||||
|
||||
// ui/extraNetworks.ts
|
||||
var activePromptTextarea = {};
|
||||
var selectedNetworks = {};
|
||||
var sortVal = -1;
|
||||
var totalCards = -1;
|
||||
var lastTab = "control";
|
||||
function getSelectedNetworks() {
|
||||
return selectedNetworks;
|
||||
}
|
||||
var getENActiveTab = () => {
|
||||
let tabName = "";
|
||||
if (gradioApp().getElementById("txt2img_prompt")?.checkVisibility() || gradioApp().getElementById("txt2img_generate")?.checkVisibility()) tabName = "txt2img";
|
||||
@@ -10544,6 +10548,7 @@ function sortExtraNetworks(fixed = "no") {
|
||||
}
|
||||
async function markSelectedCards(selected, page = "") {
|
||||
log("markSelectedCards", selected, page);
|
||||
selectedNetworks[page] = selected;
|
||||
gradioApp().querySelectorAll(".extra-network-cards .card").forEach((el2) => {
|
||||
if (page.length > 0 && el2.dataset.page !== page) return;
|
||||
if (selected.includes(el2.dataset.name) || selected.includes(el2.dataset.short)) el2.classList.add("card-selected");
|
||||
@@ -10856,6 +10861,7 @@ window.applyStyles = applyStyles;
|
||||
window.closeDetailsEN = closeDetailsEN;
|
||||
window.getENActivePage = getENActivePage;
|
||||
window.getCardDetails = getCardDetails;
|
||||
window.getSelectedNetworks = getSelectedNetworks;
|
||||
window.sortExtraNetworks = sortExtraNetworks;
|
||||
window.refeshDetailsEN = refeshDetailsEN;
|
||||
window.extraNetworksSearchButton = extraNetworksSearchButton;
|
||||
|
||||
Vendored
+2
-2
File diff suppressed because one or more lines are too long
@@ -4,12 +4,17 @@ import { authFetch } from './authWrap';
|
||||
import { timer } from './timers';
|
||||
|
||||
const activePromptTextarea = {};
|
||||
const selectedNetworks = {};
|
||||
let sortVal = -1;
|
||||
let totalCards = -1;
|
||||
let lastTab = 'control';
|
||||
|
||||
// helpers
|
||||
|
||||
export function getSelectedNetworks() {
|
||||
return selectedNetworks;
|
||||
}
|
||||
|
||||
export const getENActiveTab = () => {
|
||||
let tabName = '';
|
||||
if (gradioApp().getElementById('txt2img_prompt')?.checkVisibility() || gradioApp().getElementById('txt2img_generate')?.checkVisibility()) tabName = 'txt2img';
|
||||
@@ -307,6 +312,7 @@ function refreshENInput(tabName) {
|
||||
|
||||
export async function markSelectedCards(selected, page = '') {
|
||||
log('markSelectedCards', selected, page);
|
||||
selectedNetworks[page] = selected;
|
||||
gradioApp().querySelectorAll('.extra-network-cards .card').forEach((el) => {
|
||||
if (page.length > 0 && el.dataset.page !== page) return; // filter by page
|
||||
if (selected.includes(el.dataset.name) || selected.includes(el.dataset.short)) el.classList.add('card-selected');
|
||||
@@ -660,6 +666,7 @@ window.applyStyles = applyStyles;
|
||||
window.closeDetailsEN = closeDetailsEN;
|
||||
window.getENActivePage = getENActivePage;
|
||||
window.getCardDetails = getCardDetails;
|
||||
window.getSelectedNetworks = getSelectedNetworks;
|
||||
window.sortExtraNetworks = sortExtraNetworks;
|
||||
window.refeshDetailsEN = refeshDetailsEN;
|
||||
window.extraNetworksSearchButton = extraNetworksSearchButton;
|
||||
|
||||
Vendored
+1
@@ -102,6 +102,7 @@ declare global {
|
||||
closeDetailsEN?: (...args: unknown[]) => unknown[]; // ui/extraNetworks.ts
|
||||
extraNetworksFilterVersion?: (event: Event) => void; // ui/extraNetworks.ts
|
||||
extraNetworksSearchButton?: (event: Event) => void; // ui/extraNetworks.ts
|
||||
getSelectedNetworks?: () => Record<string, string[]>; // ui/extraNetworks.ts
|
||||
getCardDetails?: (...args: unknown[]) => unknown[]; // ui/extraNetworks.ts
|
||||
quickSaveStyle?: () => void; // ui/extraNetworks.ts
|
||||
getENActivePage?: () => string; // ui/extraNetworks.ts
|
||||
|
||||
Reference in New Issue
Block a user