
    \i                     x    S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	  \R                  " \5      r " S S	5      rg)
uD   
AI 提供商工厂

根据配置创建对应的 AI 提供商实例
    )OptionalN   )BaseAIProvider)OpenAIProvider)ClaudeProviderc                       \ rS rSrSr\\\\\\\\\\\\\\S.r\  SS\	S\	S\	S\	S	\
4
S
 jj5       r\S	\
4S j5       r\SS\S\\   S	\\
   4S jj5       r\S	\4S j5       r\S\	S\4S j5       rSrg)AIProviderFactory   u   AI 提供商工厂类)openaideepseekclaudeqwenzhipugroqtogether
openroutergeminimistralsiliconflowcustomcustom_openaicustom_anthropicNprovider_typeapi_keybase_urlmodelreturnc                 d   UR                  5       S;   a+  SSKJn  U" UR                  5       UR                  S5      US9$ UR                  5       S:X  a,  SSKJn  U" UR                  S5      UR                  SS	5      S
9$ U R                  R                  UR                  5       5      nU(       d  [        SU 35      e[        R                  SU 35        U(       dI  SSK
Jn	  U	R                  UR                  5       5      n
U
(       a  U
n[        R                  SU SU 35        U" SUUUS.UD6$ )uV  创建 AI 提供商实例

Args:
    provider_type: 提供商类型 (openai, deepseek, claude, qwen, zhipu, custom)
    api_key: API 密钥
    base_url: API Base URL（可选）
    model: 模型名称（可选）
    **kwargs: 其他配置参数
    
Returns:
    AI 提供商实例
    
Raises:
    ValueError: 不支持的提供商类型
	anyrouteragentrouter   ClaudeRouterServiceuser_idrouter_typer%   r   augmentAugmentServiceverboseF)r%   r+   u!   不支持的 AI 提供商类型: u   创建 AI 提供商: r   )AIProviderTypeu   使用 u    默认 Base URL: )r   r   r    )lowercore.claude_router_servicer$   getcore.augment_servicer*   
_providers
ValueErrorloggerinfoapp.models.databaser,   get_default_base_url)clsr   r   r   r   kwargsr$   r*   provider_classr,   default_urls              K   /Users/yu22x/Desktop/ddd_副本138/ctf/app/services/ai/providers/factory.pycreateAIProviderFactory.create*   s/   2  $@@H&)//1

9-   I-=!

9-

9e4 
 ++M,?,?,AB@PQQ+M?;< :(==m>Q>Q>STK&gm_4FxjQR 

 	
 	
    c                 Z   UR                   S;   a,  SSKJn  U" UR                   UR                  UR                  S9$ UR                   S:X  a"  SSKJn  U" UR                  SUR                  S9$ U R                  UR                   UR                  5       UR                  UR                  S	9$ )
u   从数据库配置创建 AI 提供商实例

Args:
    config: AIProviderConfig 数据库模型实例
    
Returns:
    AI 提供商实例
r   r"   r#   r&   r(   r)   F)r%   r+   r   )r   r   r   r   )
r   r/   r$   r%   r   r1   r*   r=   get_api_keyr   )r8   configr$   r*   s       r<   create_from_config$AIProviderFactory.create_from_configi   s     #??H&"00ll  9,=!ll  zz ..&&(__,,	  
 	
r?   r%   ai_config_idc           	         SSK JnJn  U(       a  UR                  R	                  U5      nU(       a  UR
                  U:X  d  UR
                  cT  UR                  5         [        R                  SU SUR                   SUR                   S35        U R                  U5      $ [        R                  SU S	U S
35        O[        R                  SU S
35        UR                  5       (       a  UR                  5       nOUR                  U5      nU(       a!  UR                  5         U R                  U5      $ [        R                  SU S35        g)u   为用户创建 AI 提供商实例

优先使用用户配置，否则使用系统默认配置

Args:
    user_id: 用户 ID
    ai_config_id: 指定的 AI 配置 ID（可选，如果提供则使用该配置）
    
Returns:
    AI 提供商实例，如果没有可用配置则返回 None
r   )AIProviderConfigSystemAIConfigNu   使用指定的 AI 配置 ID z: z ()u   AI 配置 ID u    不属于用户 u   ，使用默认配置u   未找到 AI 配置 ID u   用户 u    没有可用的 AI 配置)r6   rG   rH   queryr0   r%   	mark_usedr4   r5   namer   rC   warningforce_system_aiget_system_defaultget_effective_config)r8   r%   rE   rG   rH   rB   s         r<   create_for_user!AIProviderFactory.create_for_user   s+    	I %++//=F>>W,0F$$&KK"?~RPVP[P[}\^_e_s_s^ttu vw11&99NN]<.@QRYQZZo#pq!8F[\] ))++%88:F &::7CF))&11	)CDEr?   c                 H    [        U R                  R                  5       5      $ )u   获取支持的提供商列表)listr2   keys)r8   s    r<   get_supported_providers)AIProviderFactory.get_supported_providers   s     CNN'')**r?   r:   c                     [        U[        5      (       d  [        S5      eX R                  UR	                  5       '   [
        R                  SU 35        g)u   注册新的提供商类型

Args:
    provider_type: 提供商类型标识
    provider_class: 提供商类（必须继承 BaseAIProvider）
u*   provider_class 必须继承 BaseAIProvideru   注册新的 AI 提供商: N)
issubclassr   	TypeErrorr2   r.   r4   r5   )r8   r   r:   s      r<   register_provider#AIProviderFactory.register_provider   sF     ..99HII0>}**,-1-ABr?   r-   )NN)N)__name__
__module____qualname____firstlineno____doc__r   r   r2   classmethodstrr   r=   rC   intr   rQ   rT   rV   typer[   __static_attributes__r-   r?   r<   r	   r	      s    !" "$ !% '*J$ 
 <
<
 <
 	<

 <
 
<
 <
| 
> 
 
B )c )# )RZ[iRj ) )V + + + Cc C4 C Cr?   r	   )ra   typingr   loggingbaser   r   r   r   r   	getLoggerr]   r4   r	   r-   r?   r<   <module>rk      s9        " "			8	$vC vCr?   