chore: clear lint and sync admin story views
This commit is contained in:
@@ -17,9 +17,10 @@ logger = get_logger(__name__)
|
||||
ProviderType = Literal["text", "image", "tts", "storybook"]
|
||||
|
||||
|
||||
class CachedProvider(BaseModel):
|
||||
"""Serializable provider configuration matching DB model fields."""
|
||||
id: str
|
||||
class CachedProvider(BaseModel):
|
||||
"""Serializable provider configuration matching DB model fields."""
|
||||
|
||||
id: str
|
||||
name: str
|
||||
type: str
|
||||
adapter: str
|
||||
@@ -43,28 +44,30 @@ CACHE_KEY = "dreamweaver:providers:config"
|
||||
async def reload_providers(db: AsyncSession) -> dict[ProviderType, list[CachedProvider]]:
|
||||
"""Reload providers from DB and update Redis cache."""
|
||||
try:
|
||||
result = await db.execute(select(Provider).where(Provider.enabled == True)) # noqa: E712
|
||||
providers = result.scalars().all()
|
||||
|
||||
# Convert to Pydantic models
|
||||
cached_list = []
|
||||
for p in providers:
|
||||
cached_list.append(CachedProvider(
|
||||
id=p.id,
|
||||
name=p.name,
|
||||
type=p.type,
|
||||
adapter=p.adapter,
|
||||
model=p.model,
|
||||
api_base=p.api_base,
|
||||
api_key=p.api_key,
|
||||
timeout_ms=p.timeout_ms,
|
||||
max_retries=p.max_retries,
|
||||
weight=p.weight,
|
||||
priority=p.priority,
|
||||
enabled=p.enabled,
|
||||
config_json=p.config_json,
|
||||
config_ref=p.config_ref
|
||||
))
|
||||
result = await db.execute(select(Provider).where(Provider.enabled == True)) # noqa: E712
|
||||
providers = result.scalars().all()
|
||||
|
||||
# Convert to Pydantic models
|
||||
cached_list = []
|
||||
for p in providers:
|
||||
cached_list.append(
|
||||
CachedProvider(
|
||||
id=p.id,
|
||||
name=p.name,
|
||||
type=p.type,
|
||||
adapter=p.adapter,
|
||||
model=p.model,
|
||||
api_base=p.api_base,
|
||||
api_key=p.api_key,
|
||||
timeout_ms=p.timeout_ms,
|
||||
max_retries=p.max_retries,
|
||||
weight=p.weight,
|
||||
priority=p.priority,
|
||||
enabled=p.enabled,
|
||||
config_json=p.config_json,
|
||||
config_ref=p.config_ref,
|
||||
)
|
||||
)
|
||||
|
||||
# Group by type
|
||||
grouped: dict[str, list[CachedProvider]] = defaultdict(list)
|
||||
@@ -77,19 +80,19 @@ async def reload_providers(db: AsyncSession) -> dict[ProviderType, list[CachedPr
|
||||
|
||||
# Update Redis
|
||||
redis = await get_redis()
|
||||
# Serialize entire dict structure
|
||||
# Pydantic -> dict -> json
|
||||
json_data = {k: [p.model_dump() for p in v] for k, v in grouped.items()}
|
||||
await redis.set(CACHE_KEY, json.dumps(json_data))
|
||||
|
||||
# Update local cache
|
||||
_local_cache.clear()
|
||||
_local_cache.update(grouped)
|
||||
return grouped
|
||||
|
||||
except Exception as e:
|
||||
logger.error("failed_to_reload_providers", error=str(e))
|
||||
raise
|
||||
# Serialize entire dict structure
|
||||
# Pydantic -> dict -> json
|
||||
json_data = {k: [p.model_dump() for p in v] for k, v in grouped.items()}
|
||||
await redis.set(CACHE_KEY, json.dumps(json_data))
|
||||
|
||||
# Update local cache
|
||||
_local_cache.clear()
|
||||
_local_cache.update(grouped)
|
||||
return grouped
|
||||
|
||||
except Exception as e:
|
||||
logger.error("failed_to_reload_providers", error=str(e))
|
||||
raise
|
||||
|
||||
|
||||
async def get_providers(provider_type: ProviderType) -> list[CachedProvider]:
|
||||
@@ -102,8 +105,8 @@ async def get_providers(provider_type: ProviderType) -> list[CachedProvider]:
|
||||
if provider_type in raw_dict:
|
||||
return [CachedProvider(**item) for item in raw_dict[provider_type]]
|
||||
return []
|
||||
except Exception as e:
|
||||
logger.warning("redis_cache_read_failed", error=str(e))
|
||||
|
||||
# Fallback to local memory
|
||||
return _local_cache.get(provider_type, [])
|
||||
except Exception as e:
|
||||
logger.warning("redis_cache_read_failed", error=str(e))
|
||||
|
||||
# Fallback to local memory
|
||||
return _local_cache.get(provider_type, [])
|
||||
|
||||
Reference in New Issue
Block a user