diff --git a/py/services/lora_cache.py b/py/services/lora_cache.py index 64a98ed7..4bb00189 100644 --- a/py/services/lora_cache.py +++ b/py/services/lora_cache.py @@ -2,6 +2,7 @@ import asyncio from typing import List, Dict from dataclasses import dataclass from operator import itemgetter +from natsort import natsorted @dataclass class LoraCache: @@ -17,7 +18,7 @@ class LoraCache: async def resort(self, name_only: bool = False): """Resort all cached data views""" async with self._lock: - self.sorted_by_name = sorted( + self.sorted_by_name = natsorted( self.raw_data, key=lambda x: x['model_name'].lower() # Case-insensitive sort ) diff --git a/py/services/model_cache.py b/py/services/model_cache.py index b652d919..3c552806 100644 --- a/py/services/model_cache.py +++ b/py/services/model_cache.py @@ -2,6 +2,7 @@ import asyncio from typing import List, Dict from dataclasses import dataclass from operator import itemgetter +from natsort import natsorted @dataclass class ModelCache: @@ -17,7 +18,7 @@ class ModelCache: async def resort(self, name_only: bool = False): """Resort all cached data views""" async with self._lock: - self.sorted_by_name = sorted( + self.sorted_by_name = natsorted( self.raw_data, key=lambda x: x['model_name'].lower() # Case-insensitive sort ) diff --git a/py/services/recipe_cache.py b/py/services/recipe_cache.py index 0b7d7da9..b1f52246 100644 --- a/py/services/recipe_cache.py +++ b/py/services/recipe_cache.py @@ -2,6 +2,7 @@ import asyncio from typing import List, Dict from dataclasses import dataclass from operator import itemgetter +from natsort import natsorted @dataclass class RecipeCache: @@ -16,7 +17,7 @@ class RecipeCache: async def resort(self, name_only: bool = False): """Resort all cached data views""" async with self._lock: - self.sorted_by_name = sorted( + self.sorted_by_name = natsorted( self.raw_data, key=lambda x: x.get('title', '').lower() # Case-insensitive sort ) diff --git a/py/services/recipe_scanner.py b/py/services/recipe_scanner.py index 2a2e6063..1987fa41 100644 --- a/py/services/recipe_scanner.py +++ b/py/services/recipe_scanner.py @@ -9,6 +9,7 @@ from .recipe_cache import RecipeCache from .service_registry import ServiceRegistry from .lora_scanner import LoraScanner from ..utils.utils import fuzzy_match +from natsort import natsorted import sys logger = logging.getLogger(__name__) @@ -164,7 +165,7 @@ class RecipeScanner: if hasattr(self._cache, "resort"): try: # Sort by name - self._cache.sorted_by_name = sorted( + self._cache.sorted_by_name = natsorted( self._cache.raw_data, key=lambda x: x.get('title', '').lower() ) diff --git a/requirements.txt b/requirements.txt index b3deb83f..6a90387f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,4 +9,5 @@ olefile requests toml numpy -torch \ No newline at end of file +torch +natsort \ No newline at end of file