|
@@ -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
|