| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- from core.app.entities.app_invoke_entities import AgentChatAppGenerateEntity, ChatAppGenerateEntity
 
- from core.entities.provider_entities import QuotaUnit
 
- from events.message_event import message_was_created
 
- from extensions.ext_database import db
 
- from models.provider import Provider, ProviderType
 
- @message_was_created.connect
 
- def handle(sender, **kwargs):
 
-     message = sender
 
-     application_generate_entity = kwargs.get("application_generate_entity")
 
-     if not isinstance(application_generate_entity, ChatAppGenerateEntity | AgentChatAppGenerateEntity):
 
-         return
 
-     model_config = application_generate_entity.model_conf
 
-     provider_model_bundle = model_config.provider_model_bundle
 
-     provider_configuration = provider_model_bundle.configuration
 
-     if provider_configuration.using_provider_type != ProviderType.SYSTEM:
 
-         return
 
-     system_configuration = provider_configuration.system_configuration
 
-     quota_unit = None
 
-     for quota_configuration in system_configuration.quota_configurations:
 
-         if quota_configuration.quota_type == system_configuration.current_quota_type:
 
-             quota_unit = quota_configuration.quota_unit
 
-             if quota_configuration.quota_limit == -1:
 
-                 return
 
-             break
 
-     used_quota = None
 
-     if quota_unit:
 
-         if quota_unit == QuotaUnit.TOKENS:
 
-             used_quota = message.message_tokens + message.answer_tokens
 
-         elif quota_unit == QuotaUnit.CREDITS:
 
-             used_quota = 1
 
-             if "gpt-4" in model_config.model:
 
-                 used_quota = 20
 
-         else:
 
-             used_quota = 1
 
-     if used_quota is not None:
 
-         db.session.query(Provider).filter(
 
-             Provider.tenant_id == application_generate_entity.app_config.tenant_id,
 
-             Provider.provider_name == model_config.provider,
 
-             Provider.provider_type == ProviderType.SYSTEM.value,
 
-             Provider.quota_type == system_configuration.current_quota_type.value,
 
-             Provider.quota_limit > Provider.quota_used,
 
-         ).update({"quota_used": Provider.quota_used + used_quota})
 
-         db.session.commit()
 
 
  |