| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 
							- from typing import Union
 - 
 - from flask import current_app
 - 
 - from core.llm.provider.llm_provider_service import LLMProviderService
 - from models.account import Tenant
 - from models.provider import *
 - 
 - 
 - class ProviderService:
 - 
 -     @staticmethod
 -     def init_supported_provider(tenant):
 -         """Initialize the model provider, check whether the supported provider has a record"""
 - 
 -         need_init_provider_names = [ProviderName.OPENAI.value, ProviderName.AZURE_OPENAI.value, ProviderName.ANTHROPIC.value]
 - 
 -         providers = db.session.query(Provider).filter(
 -             Provider.tenant_id == tenant.id,
 -             Provider.provider_type == ProviderType.CUSTOM.value,
 -             Provider.provider_name.in_(need_init_provider_names)
 -         ).all()
 - 
 -         exists_provider_names = []
 -         for provider in providers:
 -             exists_provider_names.append(provider.provider_name)
 - 
 -         not_exists_provider_names = list(set(need_init_provider_names) - set(exists_provider_names))
 - 
 -         if not_exists_provider_names:
 -             # Initialize the model provider, check whether the supported provider has a record
 -             for provider_name in not_exists_provider_names:
 -                 provider = Provider(
 -                     tenant_id=tenant.id,
 -                     provider_name=provider_name,
 -                     provider_type=ProviderType.CUSTOM.value,
 -                     is_valid=False
 -                 )
 -                 db.session.add(provider)
 - 
 -             db.session.commit()
 - 
 -     @staticmethod
 -     def get_obfuscated_api_key(tenant, provider_name: ProviderName, only_custom: bool = False):
 -         llm_provider_service = LLMProviderService(tenant.id, provider_name.value)
 -         return llm_provider_service.get_provider_configs(obfuscated=True, only_custom=only_custom)
 - 
 -     @staticmethod
 -     def get_token_type(tenant, provider_name: ProviderName):
 -         llm_provider_service = LLMProviderService(tenant.id, provider_name.value)
 -         return llm_provider_service.get_token_type()
 - 
 -     @staticmethod
 -     def validate_provider_configs(tenant, provider_name: ProviderName, configs: Union[dict | str]):
 -         if current_app.config['DISABLE_PROVIDER_CONFIG_VALIDATION']:
 -             return
 -         llm_provider_service = LLMProviderService(tenant.id, provider_name.value)
 -         return llm_provider_service.config_validate(configs)
 - 
 -     @staticmethod
 -     def get_encrypted_token(tenant, provider_name: ProviderName, configs: Union[dict | str]):
 -         llm_provider_service = LLMProviderService(tenant.id, provider_name.value)
 -         return llm_provider_service.get_encrypted_token(configs)
 - 
 -     @staticmethod
 -     def create_system_provider(tenant: Tenant, provider_name: str = ProviderName.OPENAI.value, quota_limit: int = 200,
 -                                is_valid: bool = True):
 -         if current_app.config['EDITION'] != 'CLOUD':
 -             return
 - 
 -         provider = db.session.query(Provider).filter(
 -             Provider.tenant_id == tenant.id,
 -             Provider.provider_name == provider_name,
 -             Provider.provider_type == ProviderType.SYSTEM.value
 -         ).one_or_none()
 - 
 -         if not provider:
 -             provider = Provider(
 -                 tenant_id=tenant.id,
 -                 provider_name=provider_name,
 -                 provider_type=ProviderType.SYSTEM.value,
 -                 quota_type=ProviderQuotaType.TRIAL.value,
 -                 quota_limit=quota_limit,
 -                 encrypted_config='',
 -                 is_valid=is_valid,
 -             )
 -             db.session.add(provider)
 -             db.session.commit()
 
 
  |