diff --git a/agent_scheduler/api.py b/agent_scheduler/api.py index e0c77ed..064b2be 100644 --- a/agent_scheduler/api.py +++ b/agent_scheduler/api.py @@ -7,7 +7,7 @@ from uuid import uuid4 from zipfile import ZipFile from pathlib import Path from secrets import compare_digest -from typing import Optional, Dict +from typing import Optional, Dict, List from gradio.routes import App from PIL import Image from fastapi import Depends @@ -15,7 +15,7 @@ from fastapi.responses import StreamingResponse from fastapi.security import HTTPBasic, HTTPBasicCredentials from fastapi.exceptions import HTTPException -from modules import shared, progress +from modules import shared, progress, sd_models, sd_samplers from .db import Task, TaskStatus, task_manager from .models import ( @@ -98,6 +98,14 @@ def regsiter_apis(app: App, task_runner: TaskRunner): log.info("[AgentScheduler] Registering APIs") + @app.get("/agent-scheduler/v1/samplers", response_model=List[str]) + def get_samplers(): + return [sampler[0] for sampler in sd_samplers.all_samplers] + + @app.get("/agent-scheduler/v1/sd-models", response_model=List[str]) + def get_sd_models(): + return [x.title for x in sd_models.checkpoints_list.values()] + @app.post("/agent-scheduler/v1/queue/txt2img", response_model=QueueTaskResponse, dependencies=deps) def queue_txt2img(body: Txt2ImgApiTaskArgs): task_id = str(uuid4()) diff --git a/javascript/agent-scheduler.iife.js b/javascript/agent-scheduler.iife.js index 8637f4b..ebe76d8 100644 --- a/javascript/agent-scheduler.iife.js +++ b/javascript/agent-scheduler.iife.js @@ -299,7 +299,7 @@ For more info see: https://www.ag-grid.com/javascript-grid/packages/`;return z(f -`,yw=Nt.prototype.setFocusedCell;Nt.prototype.setFocusedCell=function(n){return n.preventScrollOnBrowserFocus==null&&(n.preventScrollOnBrowserFocus=!0),yw.call(this,n)};const Cw=(n,t)=>{if(n.getDisplayedRowCount()===0)return;const e=n.paginationGetPageSize()*n.paginationGetCurrentPage(),o=n.getDisplayedRowAtIndex(e).rowTop,i=Math.min(n.paginationGetPageSize()*(n.paginationGetCurrentPage()+1)-1,n.getDisplayedRowCount()-1),s=n.getDisplayedRowAtIndex(i),a=s.rowTop+s.rowHeight;let l;return n.forEachNodeAfterFilterAndSort(u=>{const c=u.rowTop,p=u.rowHeight;if(c0&&d{const r=n.paginationGetPageSize()*n.paginationGetCurrentPage(),i=n.getDisplayedRowAtIndex(r).rowTop;return e-(t.rowTop-i)},mw=(n,t,e)=>Ns(n,t,e){let e;return function(...r){clearTimeout(e),e=setTimeout(()=>n.apply(this,r),t)}},ww=n=>(n+"").replace(/[/][/].*$/gm,"").replace(/\s+/g,"").replace(/[/][*][^/*]*[*][/]/g,"").split("){",1)[0].replace(/^[^(]*[(]/,"").replace(/=[^,]+/g,"").split(",").filter(Boolean),Pu=n=>{let t;const e=new Set,r=(l,u)=>{const c=typeof l=="function"?l(t):l;if(!Object.is(c,t)){const p=t;t=u??typeof c!="object"?c:Object.assign({},t,c),e.forEach(d=>d(t,p))}},o=()=>t,a={setState:r,getState:o,subscribe:l=>(e.add(l),()=>e.delete(l)),destroy:()=>{e.clear()}};return t=n(r,o,a),a},Gs=n=>n?Pu(n):Pu,Sw=n=>{const t=Gs()(()=>n),{getState:e,setState:r,subscribe:o}=t,i={refresh:async s=>{const{limit:a=1e3,offset:l=0}=s??{},u=e().status??"";return fetch(`/agent-scheduler/v1/history?status=${u}&limit=${a}&offset=${l}`).then(c=>c.json()).then(c=>(r({...c}),c))},onFilterStatus:s=>{r({status:s}),i.refresh()},bookmarkTask:async(s,a)=>fetch(`/agent-scheduler/v1/task/${s}/${a?"bookmark":"unbookmark"}`,{method:"POST"}).then(l=>l.json()),renameTask:async(s,a)=>fetch(`/agent-scheduler/v1/task/${s}/rename?name=${encodeURIComponent(a)}`,{method:"POST",headers:{"Content-Type":"application/json"}}).then(l=>l.json()),requeueTask:async s=>fetch(`/agent-scheduler/v1/task/${s}/requeue`,{method:"POST"}).then(a=>a.json()),clearHistory:async()=>fetch("/agent-scheduler/v1/history/clear",{method:"POST"}).then(s=>(i.refresh(),s.json()))};return{getState:e,setState:r,subscribe:o,...i}},Ew=n=>{const t=Gs()(()=>n),{getState:e,setState:r,subscribe:o}=t,i={refresh:async()=>fetch("/agent-scheduler/v1/queue?limit=1000").then(s=>s.json()).then(r),pauseQueue:async()=>fetch("/agent-scheduler/v1/queue/pause",{method:"POST"}).then(s=>s.json()).then(s=>(setTimeout(()=>{i.refresh()},500),s)),resumeQueue:async()=>fetch("/agent-scheduler/v1/queue/resume",{method:"POST"}).then(s=>s.json()).then(s=>(setTimeout(()=>{i.refresh()},500),s)),clearQueue:async()=>fetch("/agent-scheduler/v1/queue/clear",{method:"POST"}).then(s=>s.json()).then(s=>(i.refresh(),s)),runTask:async s=>fetch(`/agent-scheduler/v1/task/${s}/run`,{method:"POST"}).then(a=>a.json()).then(a=>(setTimeout(()=>{i.refresh()},500),a)),moveTask:async(s,a)=>fetch(`/agent-scheduler/v1/task/${s}/move/${a}`,{method:"POST"}).then(l=>l.json()).then(l=>(i.refresh(),l)),updateTask:async(s,a)=>{const l={name:a.name,checkpoint:a.params.checkpoint,params:{prompt:a.params.prompt,negative_prompt:a.params.negative_prompt,sampler_name:a.params.sampler_name,steps:a.params.steps,cfg_scale:a.params.cfg_scale}};return fetch(`/agent-scheduler/v1/task/${s}`,{method:"PUT",body:JSON.stringify(l),headers:{"Content-Type":"application/json"}}).then(u=>u.json())},deleteTask:async s=>fetch(`/agent-scheduler/v1/task/${s}`,{method:"DELETE"}).then(a=>a.json())};return{getState:e,setState:r,subscribe:o,...i}},_w=n=>{const t=Gs(()=>n),{getState:e,setState:r,subscribe:o}=t;return{getState:e,setState:r,subscribe:o,...{setSelectedTab:s=>{r({selectedTab:s})},getSamplers:async()=>fetch("/sdapi/v1/samplers").then(s=>s.json()).then(s=>s.map(a=>a.name)),getCheckpoints:async()=>fetch("/sdapi/v1/sd-models").then(s=>s.json()).then(s=>s.map(a=>a.title))}}},bw="",Fw="",xw="",Lw="";let Fi;const Ze=_w({uiAsTab:!0,selectedTab:"pending"}),dt=Ew({current_task_id:null,total_pending_tasks:0,pending_tasks:[],paused:!1}),xi=Sw({total:0,tasks:[]}),Du=[],Au=["System"],ar={defaultColDef:{sortable:!1,filter:!0,resizable:!0,suppressMenu:!0},columnDefs:[{field:"name",headerName:"Task Id",cellDataType:"text",minWidth:240,maxWidth:240,pinned:"left",rowDrag:!0,valueGetter:({data:n})=>(n==null?void 0:n.name)??(n==null?void 0:n.id),cellClass:({data:n})=>{if(n==null)return;const t=["cursor-pointer"];switch(n.status){case"pending":t.push("task-pending");break;case"running":t.push("task-running");break;case"done":t.push("task-done");break;case"failed":t.push("task-failed");break;case"interrupted":t.push("task-interrupted");break}return t}},{field:"type",headerName:"Type",minWidth:80,maxWidth:80,editable:!1},{field:"editing",editable:!1,hide:!0},{headerName:"Params",children:[{field:"params.prompt",headerName:"Prompt",cellDataType:"text",minWidth:200,maxWidth:400,autoHeight:!0,wrapText:!0,cellClass:"wrap-cell"},{field:"params.negative_prompt",headerName:"Negative Prompt",cellDataType:"text",minWidth:200,maxWidth:400,autoHeight:!0,wrapText:!0,cellClass:"wrap-cell"},{field:"params.checkpoint",headerName:"Checkpoint",cellDataType:"text",minWidth:150,maxWidth:300,valueFormatter:({value:n})=>n??"System",cellEditor:"agSelectCellEditor",cellEditorParams:()=>({values:Au})},{field:"params.sampler_name",headerName:"Sampler",cellDataType:"text",width:150,minWidth:150,cellEditor:"agSelectCellEditor",cellEditorParams:()=>({values:Du})},{field:"params.steps",headerName:"Steps",cellDataType:"number",minWidth:80,maxWidth:80,filter:"agNumberColumnFilter",cellEditor:"agNumberCellEditor",cellEditorParams:{min:1,max:150,precision:0,step:1}},{field:"params.cfg_scale",headerName:"CFG Scale",cellDataType:"number",width:100,minWidth:100,filter:"agNumberColumnFilter",cellEditor:"agNumberCellEditor",cellEditorParams:{min:1,max:30,precision:1,step:.5}},{field:"params.size",headerName:"Size",minWidth:110,maxWidth:110,editable:!1,valueGetter:({data:n})=>{const t=n==null?void 0:n.params;return t!=null?`${t.width} × ${t.height}`:void 0}},{field:"params.batch",headerName:"Batching",minWidth:100,maxWidth:100,editable:!1,valueGetter:({data:n})=>{const t=n==null?void 0:n.params;return t!=null?`${t.batch_size} × ${t.n_iter}`:"1 × 1"}}]},{field:"created_at",headerName:"Queued At",minWidth:180,editable:!1,valueFormatter:({value:n})=>n!=null?new Date(n).toLocaleString(document.documentElement.lang):""},{field:"updated_at",headerName:"Updated At",minWidth:180,editable:!1,valueFormatter:({value:n})=>n!=null?new Date(n).toLocaleString(document.documentElement.lang):""}],getRowId:({data:n})=>n.id,rowSelection:"single",animateRows:!0,pagination:!0,paginationAutoPageSize:!0,suppressCopyRowsToClipboard:!0,suppressRowTransform:!0,enableBrowserTooltips:!0};function bu(n){const t=gradioApp().querySelector(n);if(t==null)throw new Error(`Search container '${n}' not found.`);const e=t.getElementsByTagName("input")[0];if(e==null)throw new Error("Search input not found.");e.classList.add("ts-search-input");const r=document.createElement("div");return r.className="ts-search-icon",r.innerHTML=gw,e.parentElement.appendChild(r),e}async function ze(n){if(Fi==null){const t=await Promise.resolve().then(()=>Aw);Fi=new t.Notyf({position:{x:"center",y:"bottom"},duration:3e3})}n.success?Fi.success(n.message):Fi.error(n.message)}window.notify=ze,window.origRandomId=window.randomId;function Fu(n,t,e){if(Object.keys(opts).length===0){setTimeout(()=>Fu(n,t,e),500);return}const r=ww(requestProgress),o=gradioApp().querySelector("#agent_scheduler_current_task_images");if(r.includes("progressbarContainer"))requestProgress(n,o,o,e);else{const i=document.createElement("div");i.className="progressDiv",o.parentElement.insertBefore(i,o),requestProgress(n,o,o,()=>{i.remove(),e()},s=>{const a=`${Math.round(s.progress*100)}%`,l=s.paused?"Paused":`ETA: ${Math.round(s.eta)}s`;i.innerText=`${a} ${l}`,i.style.background=`linear-gradient(to right, var(--primary-500) 0%, var(--primary-800) ${a}, var(--neutral-700) ${a})`})}window.randomId=()=>n,t==="txt2img"?window.submit():t==="img2img"&&window.submit_img2img(),window.randomId=window.origRandomId}function Rw(){const n=l=>{const u=gradioApp().querySelector(`#${l?"img2img_enqueue_wrapper":"txt2img_enqueue_wrapper"} input`);if(u!=null){const p=u.value;if(p==="Runtime Checkpoint"||p!=="Current Checkpoint")return p}const c=gradioApp().querySelector("#setting_sd_model_checkpoint input");return(c==null?void 0:c.value)??"Current Checkpoint"},t=gradioApp().querySelector("#txt2img_enqueue");window.submit_enqueue=(...l)=>{const u=create_submit_args(l);return u[0]=n(!1),u[1]=randomId(),window.randomId=window.origRandomId,t!=null&&(t.innerText="Queued",setTimeout(()=>{t.innerText="Enqueue",Ze.getState().uiAsTab||Ze.getState().selectedTab==="pending"&&dt.refresh()},1e3)),u};const e=gradioApp().querySelector("#img2img_enqueue");window.submit_enqueue_img2img=(...l)=>{const u=create_submit_args(l);return u[0]=n(!0),u[1]=randomId(),u[2]=get_tab_index("mode_img2img"),window.randomId=window.origRandomId,e!=null&&(e.innerText="Queued",setTimeout(()=>{e.innerText="Enqueue",Ze.getState().uiAsTab||Ze.getState().selectedTab==="pending"&&dt.refresh()},1e3)),u};const r=gradioApp().querySelector(".interrogate-col");r.childElementCount>2&&r.classList.add("has-queue-button");const o=gradioApp().querySelector("#setting_queue_keyboard_shortcut textarea");if(!o.value.includes("Disabled")){const l=o.value.split("+"),u=l.pop(),c=f=>{if(f.code!==u||l.includes("Shift")&&!f.shiftKey||l.includes("Alt")&&!f.altKey||l.includes("Command")&&!f.metaKey||(l.includes("Control")||l.includes("Ctrl"))&&!f.ctrlKey)return;f.preventDefault(),f.stopPropagation();const g=get_tab_index("tabs");g===0?t.click():g===1&&e.click()};window.addEventListener("keydown",c),gradioApp().querySelector("#txt2img_prompt textarea").addEventListener("keydown",c),gradioApp().querySelector("#img2img_prompt textarea").addEventListener("keydown",c)}dt.subscribe((l,u)=>{const c=l.current_task_id;if(c!==u.current_task_id&&c!=null){const p=l.pending_tasks.find(d=>d.id===c);Fu(c,p==null?void 0:p.type,dt.refresh)}});const i=(l=!1)=>{const u=prompt("Enter task name");window.randomId=()=>u??window.origRandomId(),l?e.click():t.click()},s=(l=!1)=>{window.randomId=()=>"$$_queue_with_all_checkpoints_$$",l?e.click():t.click()};appendContextMenuOption("#txt2img_enqueue","Queue with task name",()=>i()),appendContextMenuOption("#txt2img_enqueue","Queue with all checkpoints",()=>s()),appendContextMenuOption("#img2img_enqueue","Queue with task name",()=>i(!0)),appendContextMenuOption("#img2img_enqueue","Queue with all checkpoints",()=>s(!0));const a=window.modalSaveImage;window.modalSaveImage=l=>{gradioApp().querySelector("#tab_agent_scheduler").style.display!=="none"?(gradioApp().querySelector("#agent_scheduler_save").click(),l.preventDefault()):a(l)}}function Ow(){Ze.subscribe((e,r)=>{(!e.uiAsTab||e.selectedTab!==r.selectedTab)&&(e.selectedTab==="pending"?dt.refresh():xi.refresh())});const n=new MutationObserver(e=>{e.forEach(r=>{const o=r.target;if(o.style.display!=="none")switch(o.id){case"tab_agent_scheduler":Ze.getState().selectedTab==="pending"?dt.refresh():xi.refresh();break;case"agent_scheduler_pending_tasks_tab":Ze.setSelectedTab("pending");break;case"agent_scheduler_history_tab":Ze.setSelectedTab("history");break}})}),t=gradioApp().querySelector("#tab_agent_scheduler");t!=null?n.observe(t,{attributeFilter:["style"]}):Ze.setState({uiAsTab:!1}),n.observe(gradioApp().querySelector("#agent_scheduler_pending_tasks_tab"),{attributeFilter:["style"]}),n.observe(gradioApp().querySelector("#agent_scheduler_history_tab"),{attributeFilter:["style"]})}function Tw(){const n=dt;Ze.getSamplers().then(C=>Du.push(...C)),Ze.getCheckpoints().then(C=>Au.push(...C)),gradioApp().querySelector("#agent_scheduler_action_reload").addEventListener("click",()=>n.refresh());const e=gradioApp().querySelector("#agent_scheduler_action_pause");e.addEventListener("click",()=>n.pauseQueue().then(ze));const r=gradioApp().querySelector("#agent_scheduler_action_resume");r.addEventListener("click",()=>n.resumeQueue().then(ze)),gradioApp().querySelector("#agent_scheduler_action_clear_queue").addEventListener("click",()=>{confirm("Are you sure you want to clear the queue?")&&n.clearQueue().then(ze)});const i=C=>{C.paused?(e.classList.add("hide","hidden"),r.classList.remove("hide","hidden")):(e.classList.remove("hide","hidden"),r.classList.add("hide","hidden"))};n.subscribe(i),i(n.getState());let s,a;const l=1.5*1e3,u=45/2,c=()=>{a!=null&&(clearTimeout(a),a=null)},p=(C,w)=>{if(s==null){c();return}const S=C.paginationGetPageSize()*C.paginationGetCurrentPage(),E=Math.min(C.paginationGetPageSize()*(C.paginationGetCurrentPage()+1)-1,C.getDisplayedRowCount()-1),A=s.rowIndex;if(A===S){if(Ns(C,s,w)>u){c();return}a==null&&(a=setTimeout(()=>{C.paginationGetCurrentPage()>0&&(C.paginationGoToPreviousPage(),g(C)),a=null},l))}else if(A===E){if(Ns(C,s,w){C.paginationGetCurrentPage(){c(),d=null,s!=null&&(s.setHighlighted(null),s=null)},g=(C,w)=>{if(w==null){if(d==null)return;w=d}else d=w;const S=Cw(C,w);if(S==null)return;const E=mw(C,S,w);s!=null&&S.id!==s.id&&f(),S.setHighlighted(E),s=S,p(C,w)},y={...ar,editType:"fullRow",defaultColDef:{...ar.defaultColDef,editable:({data:C})=>(C==null?void 0:C.status)==="pending",cellDataType:!1},columnDefs:[{field:"priority",hide:!0,sort:"asc"},...ar.columnDefs,{headerName:"Action",pinned:"right",minWidth:110,maxWidth:110,resizable:!1,editable:!1,valueGetter:({data:C})=>C==null?void 0:C.id,cellClass:"pending-actions",cellRenderer:({api:C,value:w,data:S})=>{if(S==null||w==null)return;const E=document.createElement("div");return E.innerHTML=` +`,yw=Nt.prototype.setFocusedCell;Nt.prototype.setFocusedCell=function(n){return n.preventScrollOnBrowserFocus==null&&(n.preventScrollOnBrowserFocus=!0),yw.call(this,n)};const Cw=(n,t)=>{if(n.getDisplayedRowCount()===0)return;const e=n.paginationGetPageSize()*n.paginationGetCurrentPage(),o=n.getDisplayedRowAtIndex(e).rowTop,i=Math.min(n.paginationGetPageSize()*(n.paginationGetCurrentPage()+1)-1,n.getDisplayedRowCount()-1),s=n.getDisplayedRowAtIndex(i),a=s.rowTop+s.rowHeight;let l;return n.forEachNodeAfterFilterAndSort(u=>{const c=u.rowTop,p=u.rowHeight;if(c0&&d{const r=n.paginationGetPageSize()*n.paginationGetCurrentPage(),i=n.getDisplayedRowAtIndex(r).rowTop;return e-(t.rowTop-i)},mw=(n,t,e)=>Ns(n,t,e){let e;return function(...r){clearTimeout(e),e=setTimeout(()=>n.apply(this,r),t)}},ww=n=>(n+"").replace(/[/][/].*$/gm,"").replace(/\s+/g,"").replace(/[/][*][^/*]*[*][/]/g,"").split("){",1)[0].replace(/^[^(]*[(]/,"").replace(/=[^,]+/g,"").split(",").filter(Boolean),Pu=n=>{let t;const e=new Set,r=(l,u)=>{const c=typeof l=="function"?l(t):l;if(!Object.is(c,t)){const p=t;t=u??typeof c!="object"?c:Object.assign({},t,c),e.forEach(d=>d(t,p))}},o=()=>t,a={setState:r,getState:o,subscribe:l=>(e.add(l),()=>e.delete(l)),destroy:()=>{e.clear()}};return t=n(r,o,a),a},Gs=n=>n?Pu(n):Pu,Sw=n=>{const t=Gs()(()=>n),{getState:e,setState:r,subscribe:o}=t,i={refresh:async s=>{const{limit:a=1e3,offset:l=0}=s??{},u=e().status??"";return fetch(`/agent-scheduler/v1/history?status=${u}&limit=${a}&offset=${l}`).then(c=>c.json()).then(c=>(r({...c}),c))},onFilterStatus:s=>{r({status:s}),i.refresh()},bookmarkTask:async(s,a)=>fetch(`/agent-scheduler/v1/task/${s}/${a?"bookmark":"unbookmark"}`,{method:"POST"}).then(l=>l.json()),renameTask:async(s,a)=>fetch(`/agent-scheduler/v1/task/${s}/rename?name=${encodeURIComponent(a)}`,{method:"POST",headers:{"Content-Type":"application/json"}}).then(l=>l.json()),requeueTask:async s=>fetch(`/agent-scheduler/v1/task/${s}/requeue`,{method:"POST"}).then(a=>a.json()),clearHistory:async()=>fetch("/agent-scheduler/v1/history/clear",{method:"POST"}).then(s=>(i.refresh(),s.json()))};return{getState:e,setState:r,subscribe:o,...i}},Ew=n=>{const t=Gs()(()=>n),{getState:e,setState:r,subscribe:o}=t,i={refresh:async()=>fetch("/agent-scheduler/v1/queue?limit=1000").then(s=>s.json()).then(r),pauseQueue:async()=>fetch("/agent-scheduler/v1/queue/pause",{method:"POST"}).then(s=>s.json()).then(s=>(setTimeout(()=>{i.refresh()},500),s)),resumeQueue:async()=>fetch("/agent-scheduler/v1/queue/resume",{method:"POST"}).then(s=>s.json()).then(s=>(setTimeout(()=>{i.refresh()},500),s)),clearQueue:async()=>fetch("/agent-scheduler/v1/queue/clear",{method:"POST"}).then(s=>s.json()).then(s=>(i.refresh(),s)),runTask:async s=>fetch(`/agent-scheduler/v1/task/${s}/run`,{method:"POST"}).then(a=>a.json()).then(a=>(setTimeout(()=>{i.refresh()},500),a)),moveTask:async(s,a)=>fetch(`/agent-scheduler/v1/task/${s}/move/${a}`,{method:"POST"}).then(l=>l.json()).then(l=>(i.refresh(),l)),updateTask:async(s,a)=>{const l={name:a.name,checkpoint:a.params.checkpoint,params:{prompt:a.params.prompt,negative_prompt:a.params.negative_prompt,sampler_name:a.params.sampler_name,steps:a.params.steps,cfg_scale:a.params.cfg_scale}};return fetch(`/agent-scheduler/v1/task/${s}`,{method:"PUT",body:JSON.stringify(l),headers:{"Content-Type":"application/json"}}).then(u=>u.json())},deleteTask:async s=>fetch(`/agent-scheduler/v1/task/${s}`,{method:"DELETE"}).then(a=>a.json())};return{getState:e,setState:r,subscribe:o,...i}},_w=n=>{const t=Gs(()=>n),{getState:e,setState:r,subscribe:o}=t;return{getState:e,setState:r,subscribe:o,...{setSelectedTab:s=>{r({selectedTab:s})},getSamplers:async()=>fetch("/agent-scheduler/v1/samplers").then(s=>s.json()),getCheckpoints:async()=>fetch("/agent-scheduler/v1/sd-models").then(s=>s.json())}}},bw="",Fw="",xw="",Lw="";let Fi;const Ze=_w({uiAsTab:!0,selectedTab:"pending"}),dt=Ew({current_task_id:null,total_pending_tasks:0,pending_tasks:[],paused:!1}),xi=Sw({total:0,tasks:[]}),Du=[],Au=["System"],ar={defaultColDef:{sortable:!1,filter:!0,resizable:!0,suppressMenu:!0},columnDefs:[{field:"name",headerName:"Task Id",cellDataType:"text",minWidth:240,maxWidth:240,pinned:"left",rowDrag:!0,valueGetter:({data:n})=>(n==null?void 0:n.name)??(n==null?void 0:n.id),cellClass:({data:n})=>{if(n==null)return;const t=["cursor-pointer"];switch(n.status){case"pending":t.push("task-pending");break;case"running":t.push("task-running");break;case"done":t.push("task-done");break;case"failed":t.push("task-failed");break;case"interrupted":t.push("task-interrupted");break}return t}},{field:"type",headerName:"Type",minWidth:80,maxWidth:80,editable:!1},{field:"editing",editable:!1,hide:!0},{headerName:"Params",children:[{field:"params.prompt",headerName:"Prompt",cellDataType:"text",minWidth:200,maxWidth:400,autoHeight:!0,wrapText:!0,cellClass:"wrap-cell"},{field:"params.negative_prompt",headerName:"Negative Prompt",cellDataType:"text",minWidth:200,maxWidth:400,autoHeight:!0,wrapText:!0,cellClass:"wrap-cell"},{field:"params.checkpoint",headerName:"Checkpoint",cellDataType:"text",minWidth:150,maxWidth:300,valueFormatter:({value:n})=>n??"System",cellEditor:"agSelectCellEditor",cellEditorParams:()=>({values:Au})},{field:"params.sampler_name",headerName:"Sampler",cellDataType:"text",width:150,minWidth:150,cellEditor:"agSelectCellEditor",cellEditorParams:()=>({values:Du})},{field:"params.steps",headerName:"Steps",cellDataType:"number",minWidth:80,maxWidth:80,filter:"agNumberColumnFilter",cellEditor:"agNumberCellEditor",cellEditorParams:{min:1,max:150,precision:0,step:1}},{field:"params.cfg_scale",headerName:"CFG Scale",cellDataType:"number",width:100,minWidth:100,filter:"agNumberColumnFilter",cellEditor:"agNumberCellEditor",cellEditorParams:{min:1,max:30,precision:1,step:.5}},{field:"params.size",headerName:"Size",minWidth:110,maxWidth:110,editable:!1,valueGetter:({data:n})=>{const t=n==null?void 0:n.params;return t!=null?`${t.width} × ${t.height}`:void 0}},{field:"params.batch",headerName:"Batching",minWidth:100,maxWidth:100,editable:!1,valueGetter:({data:n})=>{const t=n==null?void 0:n.params;return t!=null?`${t.batch_size} × ${t.n_iter}`:"1 × 1"}}]},{field:"created_at",headerName:"Queued At",minWidth:180,editable:!1,valueFormatter:({value:n})=>n!=null?new Date(n).toLocaleString(document.documentElement.lang):""},{field:"updated_at",headerName:"Updated At",minWidth:180,editable:!1,valueFormatter:({value:n})=>n!=null?new Date(n).toLocaleString(document.documentElement.lang):""}],getRowId:({data:n})=>n.id,rowSelection:"single",animateRows:!0,pagination:!0,paginationAutoPageSize:!0,suppressCopyRowsToClipboard:!0,suppressRowTransform:!0,enableBrowserTooltips:!0};function bu(n){const t=gradioApp().querySelector(n);if(t==null)throw new Error(`Search container '${n}' not found.`);const e=t.getElementsByTagName("input")[0];if(e==null)throw new Error("Search input not found.");e.classList.add("ts-search-input");const r=document.createElement("div");return r.className="ts-search-icon",r.innerHTML=gw,e.parentElement.appendChild(r),e}async function ze(n){if(Fi==null){const t=await Promise.resolve().then(()=>Aw);Fi=new t.Notyf({position:{x:"center",y:"bottom"},duration:3e3})}n.success?Fi.success(n.message):Fi.error(n.message)}window.notify=ze,window.origRandomId=window.randomId;function Fu(n,t,e){if(Object.keys(opts).length===0){setTimeout(()=>Fu(n,t,e),500);return}const r=ww(requestProgress),o=gradioApp().querySelector("#agent_scheduler_current_task_images");if(r.includes("progressbarContainer"))requestProgress(n,o,o,e);else{const i=document.createElement("div");i.className="progressDiv",o.parentElement.insertBefore(i,o),requestProgress(n,o,o,()=>{i.remove(),e()},s=>{const a=`${Math.round(s.progress*100)}%`,l=s.paused?"Paused":`ETA: ${Math.round(s.eta)}s`;i.innerText=`${a} ${l}`,i.style.background=`linear-gradient(to right, var(--primary-500) 0%, var(--primary-800) ${a}, var(--neutral-700) ${a})`})}window.randomId=()=>n,t==="txt2img"?window.submit():t==="img2img"&&window.submit_img2img(),window.randomId=window.origRandomId}function Rw(){const n=l=>{const u=gradioApp().querySelector(`#${l?"img2img_enqueue_wrapper":"txt2img_enqueue_wrapper"} input`);if(u!=null){const p=u.value;if(p==="Runtime Checkpoint"||p!=="Current Checkpoint")return p}const c=gradioApp().querySelector("#setting_sd_model_checkpoint input");return(c==null?void 0:c.value)??"Current Checkpoint"},t=gradioApp().querySelector("#txt2img_enqueue");window.submit_enqueue=(...l)=>{const u=create_submit_args(l);return u[0]=n(!1),u[1]=randomId(),window.randomId=window.origRandomId,t!=null&&(t.innerText="Queued",setTimeout(()=>{t.innerText="Enqueue",Ze.getState().uiAsTab||Ze.getState().selectedTab==="pending"&&dt.refresh()},1e3)),u};const e=gradioApp().querySelector("#img2img_enqueue");window.submit_enqueue_img2img=(...l)=>{const u=create_submit_args(l);return u[0]=n(!0),u[1]=randomId(),u[2]=get_tab_index("mode_img2img"),window.randomId=window.origRandomId,e!=null&&(e.innerText="Queued",setTimeout(()=>{e.innerText="Enqueue",Ze.getState().uiAsTab||Ze.getState().selectedTab==="pending"&&dt.refresh()},1e3)),u};const r=gradioApp().querySelector(".interrogate-col");r.childElementCount>2&&r.classList.add("has-queue-button");const o=gradioApp().querySelector("#setting_queue_keyboard_shortcut textarea");if(!o.value.includes("Disabled")){const l=o.value.split("+"),u=l.pop(),c=f=>{if(f.code!==u||l.includes("Shift")&&!f.shiftKey||l.includes("Alt")&&!f.altKey||l.includes("Command")&&!f.metaKey||(l.includes("Control")||l.includes("Ctrl"))&&!f.ctrlKey)return;f.preventDefault(),f.stopPropagation();const g=get_tab_index("tabs");g===0?t.click():g===1&&e.click()};window.addEventListener("keydown",c),gradioApp().querySelector("#txt2img_prompt textarea").addEventListener("keydown",c),gradioApp().querySelector("#img2img_prompt textarea").addEventListener("keydown",c)}dt.subscribe((l,u)=>{const c=l.current_task_id;if(c!==u.current_task_id&&c!=null){const p=l.pending_tasks.find(d=>d.id===c);Fu(c,p==null?void 0:p.type,dt.refresh)}});const i=(l=!1)=>{const u=prompt("Enter task name");window.randomId=()=>u??window.origRandomId(),l?e.click():t.click()},s=(l=!1)=>{window.randomId=()=>"$$_queue_with_all_checkpoints_$$",l?e.click():t.click()};appendContextMenuOption("#txt2img_enqueue","Queue with task name",()=>i()),appendContextMenuOption("#txt2img_enqueue","Queue with all checkpoints",()=>s()),appendContextMenuOption("#img2img_enqueue","Queue with task name",()=>i(!0)),appendContextMenuOption("#img2img_enqueue","Queue with all checkpoints",()=>s(!0));const a=window.modalSaveImage;window.modalSaveImage=l=>{gradioApp().querySelector("#tab_agent_scheduler").style.display!=="none"?(gradioApp().querySelector("#agent_scheduler_save").click(),l.preventDefault()):a(l)}}function Ow(){Ze.subscribe((e,r)=>{(!e.uiAsTab||e.selectedTab!==r.selectedTab)&&(e.selectedTab==="pending"?dt.refresh():xi.refresh())});const n=new MutationObserver(e=>{e.forEach(r=>{const o=r.target;if(o.style.display!=="none")switch(o.id){case"tab_agent_scheduler":Ze.getState().selectedTab==="pending"?dt.refresh():xi.refresh();break;case"agent_scheduler_pending_tasks_tab":Ze.setSelectedTab("pending");break;case"agent_scheduler_history_tab":Ze.setSelectedTab("history");break}})}),t=gradioApp().querySelector("#tab_agent_scheduler");t!=null?n.observe(t,{attributeFilter:["style"]}):Ze.setState({uiAsTab:!1}),n.observe(gradioApp().querySelector("#agent_scheduler_pending_tasks_tab"),{attributeFilter:["style"]}),n.observe(gradioApp().querySelector("#agent_scheduler_history_tab"),{attributeFilter:["style"]})}function Tw(){const n=dt;Ze.getSamplers().then(C=>Du.push(...C)),Ze.getCheckpoints().then(C=>Au.push(...C)),gradioApp().querySelector("#agent_scheduler_action_reload").addEventListener("click",()=>n.refresh());const e=gradioApp().querySelector("#agent_scheduler_action_pause");e.addEventListener("click",()=>n.pauseQueue().then(ze));const r=gradioApp().querySelector("#agent_scheduler_action_resume");r.addEventListener("click",()=>n.resumeQueue().then(ze)),gradioApp().querySelector("#agent_scheduler_action_clear_queue").addEventListener("click",()=>{confirm("Are you sure you want to clear the queue?")&&n.clearQueue().then(ze)});const i=C=>{C.paused?(e.classList.add("hide","hidden"),r.classList.remove("hide","hidden")):(e.classList.remove("hide","hidden"),r.classList.add("hide","hidden"))};n.subscribe(i),i(n.getState());let s,a;const l=1.5*1e3,u=45/2,c=()=>{a!=null&&(clearTimeout(a),a=null)},p=(C,w)=>{if(s==null){c();return}const S=C.paginationGetPageSize()*C.paginationGetCurrentPage(),E=Math.min(C.paginationGetPageSize()*(C.paginationGetCurrentPage()+1)-1,C.getDisplayedRowCount()-1),A=s.rowIndex;if(A===S){if(Ns(C,s,w)>u){c();return}a==null&&(a=setTimeout(()=>{C.paginationGetCurrentPage()>0&&(C.paginationGoToPreviousPage(),g(C)),a=null},l))}else if(A===E){if(Ns(C,s,w){C.paginationGetCurrentPage(){c(),d=null,s!=null&&(s.setHighlighted(null),s=null)},g=(C,w)=>{if(w==null){if(d==null)return;w=d}else d=w;const S=Cw(C,w);if(S==null)return;const E=mw(C,S,w);s!=null&&S.id!==s.id&&f(),S.setHighlighted(E),s=S,p(C,w)},y={...ar,editType:"fullRow",defaultColDef:{...ar.defaultColDef,editable:({data:C})=>(C==null?void 0:C.status)==="pending",cellDataType:!1},columnDefs:[{field:"priority",hide:!0,sort:"asc"},...ar.columnDefs,{headerName:"Action",pinned:"right",minWidth:110,maxWidth:110,resizable:!1,editable:!1,valueGetter:({data:C})=>C==null?void 0:C.id,cellClass:"pending-actions",cellRenderer:({api:C,value:w,data:S})=>{if(S==null||w==null)return;const E=document.createElement("div");return E.innerHTML=`