deduct_quota_when_messaeg_created.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from core.entities.application_entities import ApplicationGenerateEntity
  2. from core.entities.provider_entities import QuotaUnit
  3. from events.message_event import message_was_created
  4. from extensions.ext_database import db
  5. from models.provider import Provider, ProviderType
  6. @message_was_created.connect
  7. def handle(sender, **kwargs):
  8. message = sender
  9. application_generate_entity: ApplicationGenerateEntity = kwargs.get('application_generate_entity')
  10. model_config = application_generate_entity.app_orchestration_config_entity.model_config
  11. provider_model_bundle = model_config.provider_model_bundle
  12. provider_configuration = provider_model_bundle.configuration
  13. if provider_configuration.using_provider_type != ProviderType.SYSTEM:
  14. return
  15. system_configuration = provider_configuration.system_configuration
  16. quota_unit = None
  17. for quota_configuration in system_configuration.quota_configurations:
  18. if quota_configuration.quota_type == system_configuration.current_quota_type:
  19. quota_unit = quota_configuration.quota_unit
  20. break
  21. used_quota = None
  22. if quota_unit:
  23. if quota_unit == QuotaUnit.TOKENS.value:
  24. used_quota = message.message_tokens + message.prompt_tokens
  25. else:
  26. used_quota = 1
  27. if used_quota is not None:
  28. db.session.query(Provider).filter(
  29. Provider.tenant_id == application_generate_entity.tenant_id,
  30. Provider.provider_name == model_config.provider,
  31. Provider.provider_type == ProviderType.SYSTEM.value,
  32. Provider.quota_type == system_configuration.current_quota_type.value,
  33. Provider.quota_limit > Provider.quota_used
  34. ).update({'quota_used': Provider.quota_used + used_quota})
  35. db.session.commit()