12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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()
|