forked from open-webui/open-webui
		
	Allow configuration of steps, default to a1111 default
This commit is contained in:
		
							parent
							
								
									261a53c8b1
								
							
						
					
					
						commit
						3fa79e59bf
					
				
					 3 changed files with 82 additions and 1 deletions
				
			
		|  | @ -102,6 +102,32 @@ async def update_image_size( | |||
|         ) | ||||
|      | ||||
| 
 | ||||
| class ImageStepsUpdateForm(BaseModel): | ||||
|     steps: int | ||||
| 
 | ||||
| 
 | ||||
| @app.get("/steps") | ||||
| async def get_image_size(user=Depends(get_admin_user)): | ||||
|     return {"IMAGE_STEPS": app.state.IMAGE_STEPS} | ||||
| 
 | ||||
| 
 | ||||
| @app.post("/steps/update") | ||||
| async def update_image_size( | ||||
|     form_data: ImageStepsUpdateForm, user=Depends(get_admin_user) | ||||
| ): | ||||
|     if form_data.steps >= 0: | ||||
|         app.state.IMAGE_STEPS = form_data.steps | ||||
|         return { | ||||
|             "IMAGE_STEPS": app.state.IMAGE_STEPS, | ||||
|             "status": True, | ||||
|         } | ||||
|     else: | ||||
|         raise HTTPException( | ||||
|             status_code=400, | ||||
|             detail=ERROR_MESSAGES.INCORRECT_FORMAT("  (e.g., 50)."), | ||||
|         ) | ||||
| 
 | ||||
| 
 | ||||
| @app.get("/models") | ||||
| def get_models(user=Depends(get_current_user)): | ||||
|     try: | ||||
|  | @ -177,6 +203,9 @@ def generate_image( | |||
|             "height": height, | ||||
|         } | ||||
| 
 | ||||
|         if app.state.IMAGE_STEPS != None: | ||||
|             data["steps"] = app.state.IMAGE_STEPS | ||||
| 
 | ||||
|         if form_data.negative_prompt != None: | ||||
|             data["negative_prompt"] = form_data.negative_prompt | ||||
| 
 | ||||
|  |  | |||
|  | @ -198,6 +198,39 @@ export const updateImageSize = async (token: string = '', size: string) => { | |||
| 	return res.IMAGE_SIZE; | ||||
| }; | ||||
| 
 | ||||
| export const updateImageSteps = async (token: string = '', steps: number) => { | ||||
| 	let error = null; | ||||
| 
 | ||||
| 	const res = await fetch(`${IMAGES_API_BASE_URL}/steps/update`, { | ||||
| 		method: 'POST', | ||||
| 		headers: { | ||||
| 			Accept: 'application/json', | ||||
| 			'Content-Type': 'application/json', | ||||
| 			...(token && { authorization: `Bearer ${token}` }) | ||||
| 		}, | ||||
| 		body: JSON.stringify({ steps }) | ||||
| 	}) | ||||
| 		.then(async (res) => { | ||||
| 			if (!res.ok) throw await res.json(); | ||||
| 			return res.json(); | ||||
| 		}) | ||||
| 		.catch((err) => { | ||||
| 			console.log(err); | ||||
| 			if ('detail' in err) { | ||||
| 				error = err.detail; | ||||
| 			} else { | ||||
| 				error = 'Server connection failed'; | ||||
| 			} | ||||
| 			return null; | ||||
| 		}); | ||||
| 
 | ||||
| 	if (error) { | ||||
| 		throw error; | ||||
| 	} | ||||
| 
 | ||||
| 	return res.IMAGE_STEPS; | ||||
| }; | ||||
| 
 | ||||
| export const getDiffusionModels = async (token: string = '') => { | ||||
| 	let error = null; | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,8 @@ | |||
| 		toggleImageGenerationEnabledStatus, | ||||
| 		updateAUTOMATIC1111Url, | ||||
| 		updateDefaultDiffusionModel, | ||||
| 		updateImageSize | ||||
| 		updateImageSize, | ||||
| 		updateImageSteps | ||||
| 	} from '$lib/apis/images'; | ||||
| 	import { getBackendConfig } from '$lib/apis'; | ||||
| 	const dispatch = createEventDispatcher(); | ||||
|  | @ -28,6 +29,7 @@ | |||
| 	let models = []; | ||||
| 
 | ||||
| 	let imageSize = ''; | ||||
| 	let steps = 50; | ||||
| 
 | ||||
| 	const getModels = async () => { | ||||
| 		models = await getDiffusionModels(localStorage.token).catch((error) => { | ||||
|  | @ -98,6 +100,10 @@ | |||
| 			toast.error(error); | ||||
| 			return null; | ||||
| 		}); | ||||
| 		await updateImageSteps(localStorage.token, steps).catch((error) => { | ||||
| 			toast.error(error); | ||||
| 			return null; | ||||
| 		}); | ||||
| 
 | ||||
| 		dispatch('save'); | ||||
| 		loading = false; | ||||
|  | @ -210,6 +216,19 @@ | |||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 
 | ||||
| 			<div> | ||||
| 				<div class=" mb-2.5 text-sm font-medium">Set Steps</div> | ||||
| 				<div class="flex w-full"> | ||||
| 					<div class="flex-1 mr-2"> | ||||
| 						<input | ||||
| 							class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none" | ||||
| 							placeholder="Enter Number of Steps (e.g. 50)" | ||||
| 							bind:value={steps} | ||||
| 						/> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		{/if} | ||||
| 	</div> | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue