Merge_PR_410_with_local_changes

This commit is contained in:
ajaysi
2026-03-12 15:21:08 +05:30
parent ecf901c76f
commit e90a29c27e
10 changed files with 841 additions and 560 deletions

View File

@@ -64,16 +64,44 @@ async def get_usage_logs(
provider_enum = APIProvider.MISTRAL
else:
try:
# Refresh enum to ensure latest values
from models.subscription_models import APIProvider
_ = list(APIProvider) # Force enum refresh
provider_enum = APIProvider(provider_lower)
except ValueError:
# Invalid provider, return empty results
return {
"logs": [],
"total_count": 0,
"limit": limit,
"offset": offset,
"has_more": False
}
# Fallback: try to find matching provider or use default
try:
# Check if it's a known provider that might not be in enum
known_providers = ['gemini', 'openai', 'anthropic', 'mistral', 'wavespeed', 'tavily', 'serper', 'metaphor', 'firecrawl', 'stability', 'exa', 'video', 'image_edit', 'audio']
if provider_lower in known_providers:
# Map to existing enum values or skip
provider_mapping = {
'mistral': 'MISTRAL',
'wavespeed': 'WAVESPEED',
'video': 'VIDEO',
'image_edit': 'IMAGE_EDIT',
'audio': 'AUDIO'
}
mapped_provider = provider_mapping.get(provider_lower, provider_lower.upper())
provider_enum = APIProvider(mapped_provider)
else:
# Invalid provider, return empty results
return {
"logs": [],
"total_count": 0,
"limit": limit,
"offset": offset,
"has_more": False
}
except (ValueError, AttributeError):
# If all else fails, return empty results
return {
"logs": [],
"total_count": 0,
"limit": limit,
"offset": offset,
"has_more": False
}
query = query.filter(APIUsageLog.provider == provider_enum)
if status_code is not None:
@@ -98,15 +126,44 @@ async def get_usage_logs(
provider_enum = APIProvider.MISTRAL
else:
try:
# Refresh enum to ensure latest values
from models.subscription_models import APIProvider
_ = list(APIProvider) # Force enum refresh
provider_enum = APIProvider(provider_lower)
except ValueError:
return {
"logs": [],
"total_count": 0,
"limit": limit,
"offset": offset,
"has_more": False
}
# Fallback: try to find matching provider or use default
try:
# Check if it's a known provider that might not be in enum
known_providers = ['gemini', 'openai', 'anthropic', 'mistral', 'wavespeed', 'tavily', 'serper', 'metaphor', 'firecrawl', 'stability', 'exa', 'video', 'image_edit', 'audio']
if provider_lower in known_providers:
# Map to existing enum values or skip
provider_mapping = {
'mistral': 'MISTRAL',
'wavespeed': 'WAVESPEED',
'video': 'VIDEO',
'image_edit': 'IMAGE_EDIT',
'audio': 'AUDIO'
}
mapped_provider = provider_mapping.get(provider_lower, provider_lower.upper())
provider_enum = APIProvider(mapped_provider)
else:
# Invalid provider, return empty results
return {
"logs": [],
"total_count": 0,
"limit": limit,
"offset": offset,
"has_more": False
}
except (ValueError, AttributeError):
# If all else fails, return empty results
return {
"logs": [],
"total_count": 0,
"limit": limit,
"offset": offset,
"has_more": False
}
query = query.filter(APIUsageLog.provider == provider_enum)
if status_code is not None:
query = query.filter(APIUsageLog.status_code == status_code)

View File

@@ -173,12 +173,32 @@ class LimitValidator:
if not usage:
# First usage this period, create summary
try:
usage = UsageSummary(
user_id=user_id,
billing_period=current_period
)
self.db.add(usage)
self.db.commit()
# Try to create with minimal fields first to avoid missing column errors
from sqlalchemy import text
try:
# Insert with only essential fields
insert_sql = text("""
INSERT INTO usage_summaries (user_id, billing_period, created_at, updated_at)
VALUES (:user_id, :period, datetime('now'), datetime('now'))
""")
self.db.execute(insert_sql, {'user_id': user_id, 'period': current_period})
self.db.commit()
# Now fetch the created record
usage = self.db.query(UsageSummary).filter(
UsageSummary.user_id == user_id,
UsageSummary.billing_period == current_period
).first()
except Exception as sql_error:
logger.debug(f"[Subscription Check] Direct SQL insert failed, trying ORM: {sql_error}")
# Fallback to ORM creation
usage = UsageSummary(
user_id=user_id,
billing_period=current_period
)
self.db.add(usage)
self.db.commit()
except Exception as create_error:
logger.error(f"Error creating usage summary: {create_error}")
self.db.rollback()