feat(metadata): implement metadata providers and initialize metadata service

- Added ModelMetadataProvider and CivitaiModelMetadataProvider for handling model metadata.
- Introduced SQLiteModelMetadataProvider for SQLite database integration.
- Created metadata_service.py to initialize and configure metadata providers.
- Updated CivitaiClient to register as a metadata provider.
- Refactored download_manager to use the new download_file method.
- Added SQL schema for models, model_versions, and model_files.
- Updated requirements.txt to include aiosqlite.
This commit is contained in:
Will Miao
2025-09-08 10:33:59 +08:00
parent d287883671
commit 9ba3e2c204
8 changed files with 473 additions and 23 deletions

View File

@@ -0,0 +1,33 @@
import os
import logging
from .model_metadata_provider import ModelMetadataProviderManager, SQLiteModelMetadataProvider
logger = logging.getLogger(__name__)
async def initialize_metadata_providers():
"""Initialize and configure all metadata providers"""
provider_manager = await ModelMetadataProviderManager.get_instance()
# Use hardcoded SQLite DB path if not set in settings
db_path = os.path.join(
os.path.dirname(os.path.dirname(os.path.dirname(__file__))),
'civitai', 'civitai.sqlite'
)
if db_path and os.path.exists(db_path):
try:
sqlite_provider = SQLiteModelMetadataProvider(db_path)
provider_manager.register_provider('sqlite', sqlite_provider)
logger.info(f"SQLite metadata provider registered with database: {db_path}")
except Exception as e:
logger.error(f"Failed to initialize SQLite metadata provider: {e}")
return provider_manager
async def get_metadata_provider(provider_name: str = None):
"""Get a specific metadata provider or default provider"""
provider_manager = await ModelMetadataProviderManager.get_instance()
if provider_name:
return provider_manager._get_provider(provider_name)
return provider_manager._get_provider()