Merge branch 'main' into feat/db/migrations

This commit is contained in:
psychedelicious 2023-12-13 11:24:55 +11:00 committed by GitHub
commit cc18d86f29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 18 deletions

View File

@ -5,7 +5,6 @@ from enum import Enum
from pathlib import Path from pathlib import Path
from typing import Any, Dict, List, Literal, Optional, Union from typing import Any, Dict, List, Literal, Optional, Union
from fastapi import Body
from pydantic import BaseModel, Field, field_validator from pydantic import BaseModel, Field, field_validator
from pydantic.networks import AnyHttpUrl from pydantic.networks import AnyHttpUrl
from typing_extensions import Annotated from typing_extensions import Annotated
@ -112,17 +111,7 @@ class URLModelSource(StringLikeSource):
return str(self.url) return str(self.url)
# Body() is being applied here rather than Field() because otherwise FastAPI will ModelSource = Annotated[Union[LocalModelSource, HFModelSource, URLModelSource], Field(discriminator="type")]
# refuse to generate a schema. Relevant links:
#
# "Model Manager Refactor Phase 1 - SQL-based config storage
# https://github.com/invoke-ai/InvokeAI/pull/5039#discussion_r1389752119 (comment)
# Param: xyz can only be a request body, using Body() when using discriminated unions
# https://github.com/tiangolo/fastapi/discussions/9761
# Body parameter cannot be a pydantic union anymore sinve v0.95
# https://github.com/tiangolo/fastapi/discussions/9287
ModelSource = Annotated[Union[LocalModelSource, HFModelSource, URLModelSource], Body(discriminator="type")]
class ModelInstallJob(BaseModel): class ModelInstallJob(BaseModel):

View File

@ -191,11 +191,15 @@ def calc_tiles_min_overlap(
assert min_overlap < tile_height assert min_overlap < tile_height
assert min_overlap < tile_width assert min_overlap < tile_width
# The If Else catches the case when the tile size is larger than the images size and just clips the number of tiles to 1 # catches the cases when the tile size is larger than the images size and adjusts the tile size
num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 if image_width < tile_width:
num_tiles_y = ( tile_width = image_width
math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1
) if image_height < tile_height:
tile_height = image_height
num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap))
num_tiles_y = math.ceil((image_height - min_overlap) / (tile_height - min_overlap))
# tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column.
tiles: list[Tile] = [] tiles: list[Tile] = []

View File

@ -47,7 +47,7 @@ dependencies = [
"easing-functions", "easing-functions",
"einops", "einops",
"facexlib", "facexlib",
"fastapi~=0.104.1", "fastapi~=0.105.0",
"fastapi-events~=0.9.1", "fastapi-events~=0.9.1",
"huggingface-hub~=0.16.4", "huggingface-hub~=0.16.4",
"imohash", "imohash",

View File

@ -241,6 +241,28 @@ def test_calc_tiles_min_overlap_not_evenly_divisible():
assert tiles == expected_tiles assert tiles == expected_tiles
def test_calc_tiles_min_overlap_tile_bigger_than_image():
"""Test calc_tiles_min_overlap() behavior when the tile is nigger than the image"""
# Parameters mimic roughly the same output as the original tile generations of the same test name
tiles = calc_tiles_min_overlap(
image_height=1024,
image_width=1024,
tile_height=1408,
tile_width=1408,
min_overlap=128,
)
expected_tiles = [
# single tile
Tile(
coords=TBLR(top=0, bottom=1024, left=0, right=1024),
overlap=TBLR(top=0, bottom=0, left=0, right=0),
),
]
assert tiles == expected_tiles
@pytest.mark.parametrize( @pytest.mark.parametrize(
[ [
"image_height", "image_height",