feat(metadata): implement metadata archive management and update settings for metadata providers

This commit is contained in:
Will Miao
2025-09-08 13:17:16 +08:00
parent 9ba3e2c204
commit 821827a375
11 changed files with 659 additions and 38 deletions

View File

@@ -7,6 +7,7 @@ from server import PromptServer # type: ignore
from .base_model_routes import BaseModelRoutes
from ..services.lora_service import LoraService
from ..services.service_registry import ServiceRegistry
from ..services.model_metadata_provider import ModelMetadataProviderManager
from ..utils.routes_common import ModelRouteUtils
from ..utils.utils import get_lora_info
@@ -19,14 +20,14 @@ class LoraRoutes(BaseModelRoutes):
"""Initialize LoRA routes with LoRA service"""
# Service will be initialized later via setup_routes
self.service = None
self.civitai_client = None
self.metadata_provider = None
self.template_name = "loras.html"
async def initialize_services(self):
"""Initialize services from ServiceRegistry"""
lora_scanner = await ServiceRegistry.get_lora_scanner()
self.service = LoraService(lora_scanner)
self.civitai_client = await ServiceRegistry.get_civitai_client()
self.metadata_provider = await ModelMetadataProviderManager.get_instance()
# Initialize parent with the service
super().__init__(self.service)
@@ -217,7 +218,7 @@ class LoraRoutes(BaseModelRoutes):
"""Get available versions for a Civitai LoRA model with local availability info"""
try:
model_id = request.match_info['model_id']
response = await self.civitai_client.get_model_versions(model_id)
response = await self.metadata_provider.get_model_versions(model_id)
if not response or not response.get('modelVersions'):
return web.Response(status=404, text="Model not found")
@@ -261,8 +262,8 @@ class LoraRoutes(BaseModelRoutes):
try:
model_version_id = request.match_info.get('modelVersionId')
# Get model details from Civitai API
model, error_msg = await self.civitai_client.get_model_version_info(model_version_id)
# Get model details from metadata provider
model, error_msg = await self.metadata_provider.get_model_version_info(model_version_id)
if not model:
# Log warning for failed model retrieval
@@ -288,7 +289,7 @@ class LoraRoutes(BaseModelRoutes):
"""Get CivitAI model details by hash"""
try:
hash = request.match_info.get('hash')
model = await self.civitai_client.get_model_by_hash(hash)
model = await self.metadata_provider.get_model_by_hash(hash)
return web.json_response(model)
except Exception as e:
logger.error(f"Error fetching model details by hash: {e}")