deduct_quota_when_messaeg_created.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. if quota_configuration.quota_limit == -1:
  21. return
  22. break
  23. used_quota = None
  24. if quota_unit:
  25. if quota_unit == QuotaUnit.TOKENS:
  26. used_quota = message.message_tokens + message.answer_tokens
  27. else:
  28. used_quota = 1
  29. if used_quota is not None:
  30. db.session.query(Provider).filter(
  31. Provider.tenant_id == application_generate_entity.tenant_id,
  32. Provider.provider_name == model_config.provider,
  33. Provider.provider_type == ProviderType.SYSTEM.value,
  34. Provider.quota_type == system_configuration.current_quota_type.value,
  35. Provider.quota_limit > Provider.quota_used
  36. ).update({'quota_used': Provider.quota_used + used_quota})
  37. db.session.commit()