|
|
|
|
@ -1,9 +1,40 @@
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
from pydantic import Field, NonNegativeInt
|
|
|
|
|
from pydantic import Field, NonNegativeInt, computed_field
|
|
|
|
|
from pydantic_settings import BaseSettings
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HostedCreditConfig(BaseSettings):
|
|
|
|
|
HOSTED_MODEL_CREDIT_CONFIG: str = Field(
|
|
|
|
|
description="Model credit configuration in format 'model:credits,model:credits', e.g., 'gpt-4:20,gpt-4o:10'",
|
|
|
|
|
default="",
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def get_model_credits(self, model_name: str) -> int:
|
|
|
|
|
"""
|
|
|
|
|
Get credit value for a specific model name.
|
|
|
|
|
Returns 1 if model is not found in configuration (default credit).
|
|
|
|
|
|
|
|
|
|
:param model_name: The name of the model to search for
|
|
|
|
|
:return: The credit value for the model
|
|
|
|
|
"""
|
|
|
|
|
if not self.HOSTED_MODEL_CREDIT_CONFIG:
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
credit_map = dict(
|
|
|
|
|
item.strip().split(":", 1) for item in self.HOSTED_MODEL_CREDIT_CONFIG.split(",") if ":" in item
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Search for matching model pattern
|
|
|
|
|
for pattern, credit in credit_map.items():
|
|
|
|
|
if pattern.strip() in model_name:
|
|
|
|
|
return int(credit)
|
|
|
|
|
return 1 # Default quota if no match found
|
|
|
|
|
except (ValueError, AttributeError):
|
|
|
|
|
return 1 # Return default quota if parsing fails
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HostedOpenAiConfig(BaseSettings):
|
|
|
|
|
"""
|
|
|
|
|
Configuration for hosted OpenAI service
|
|
|
|
|
@ -202,5 +233,7 @@ class HostedServiceConfig(
|
|
|
|
|
HostedZhipuAIConfig,
|
|
|
|
|
# moderation
|
|
|
|
|
HostedModerationConfig,
|
|
|
|
|
# credit config
|
|
|
|
|
HostedCreditConfig,
|
|
|
|
|
):
|
|
|
|
|
pass
|
|
|
|
|
|