
    >j*                    ,   U d Z ddlmZ ddlZddlZddlZddlZddlZddl	Zddl
mZmZmZmZ ddlmZmZmZmZmZmZ  ej        e          Zdddd	d
dddd	d
dddd	d
dZded<   dZddddZdZdZdZd(dZ d)d Z!d*d#Z" G d$ d%e          Z#d+d'Z$dS ),u  
七牛云 Kling 图像生成后端.

使用七牛云 AI 大模型推理 API 的 Kling 系列模型进行文生图。
接口采用异步模式: 提交任务 → 轮询状态 → 下载图片。

支持的模型:
  - kling-v1:   文生图 V1.0
  - kling-v1-5: 文生图 V1.5 (支持角色/人脸参考)
  - kling-v2:   文生图 V2.0 (推荐)

图片以 URL 形式返回 (有效期 7 天), 本插件自动下载到本地缓存。
    )annotationsN)AnyDictListOptional)DEFAULT_ASPECT_RATIOImageGenProvidererror_responseresolve_aspect_ratiosave_url_imagesuccess_responsezKling v2z~60su#   最新文生图, 画面质量最高u   按量计费)displayspeed	strengthspricez
Kling v1.5z~45su%   支持角色特征参考/人脸参考zKling v1z~30su   基础文生图, 速度快)kling-v2z
kling-v1-5zkling-v1zDict[str, Dict[str, Any]]_MODELSr   16:9z9:16z1:1)	landscapeportraitsquare   i,  zhttps://api.qnaigc.com/v1returnOptional[str]c                    dD ]:} t           j                            | d                                          }|r|c S ;	 ddlm}  |            }|                    di           }|                    di           }t          |t                    r,|                    dd                                          }|r|S n# t          $ r Y nw xY wdS )	u   获取七牛云 API Key.)QINIU_API_KEYOPENROUTER_API_KEY r   load_config	providersqiniuapi_keyN)	osenvirongetstriphermes_cli.configr    
isinstancedict	Exception)env_varkeyr    cfgr!   	qiniu_cfgs         8/home/ubuntu/.hermes/plugins/image_gen/qiniu/__init__.py_get_api_keyr1   L   s     ;  jnnWb))//11 	JJJ	
111111kmmGGK,,	MM'2..	i&& 	--	2..4466C 
   4s   A<B= =
C
	C
tuplec                 d   t           j                            dd                                          } | r| t          v r| t          |          fS 	 ddlm}  |            }t          |t                    r|                    d          ni }t          |t                    r|                    d          ni }t          |t                    rB|                    dd                                          }|r|t          v r|t          |         fS t          |t                    r(|                    dd                                          nd}|r|t          v r|t          |         fS n2# t          $ r%}t                              d|           Y d	}~nd	}~ww xY wt          t          t                   fS )
u%   从配置解析当前使用的模型.QINIU_IMAGE_MODELr   r   r   	image_genr"   modelz#Could not load image_gen config: %sN)r$   r%   r&   r'   r   r(   r    r)   r*   r+   loggerdebugDEFAULT_MODEL)env_overrider    r.   img_cfgr/   model_id	top_modelexcs           r0   _resolve_modelr?   b   s   :>>"5r::@@BBL 3//W\222A111111kmm*4S$*?*?G#''+&&&R,6w,E,EMGKK(((2	i&& 	3 }}Wb117799H 3H//!2228B7D8Q8QYGKK,,22444WY	 	1g--gi000 A A A:C@@@@@@@@A '-000s    B>E' AE' '
F1FFhermes_aspectstrc                8    t                               | d          S )u4   将 Hermes 抽象比例映射为 Kling 原生比例.r   )_ASPECT_MAPr&   )r@   s    r0   _kling_aspect_ratiorD   z   s    ??=&111    c                  n    e Zd ZdZedd            Zedd            ZddZdd	ZddZ	ddZ
efddZdS )QiniuImageGenProvideru    七牛云 Kling 文生图后端.r   rA   c                    dS )Nr"    selfs    r0   namezQiniuImageGenProvider.name   s    wrE   c                    dS )N   七牛云 KlingrI   rJ   s    r0   display_namez"QiniuImageGenProvider.display_name   s      rE   boolc                8    t          t                                S N)rP   r1   rJ   s    r0   is_availablez"QiniuImageGenProvider.is_available   s    LNN###rE   List[Dict[str, Any]]c                H    d t                                           D             S )Nc                T    g | ]%\  }}||d          |d         |d         |d         d&S )r   r   r   r   )idr   r   r   r   rI   ).0r<   metas      r0   
<listcomp>z5QiniuImageGenProvider.list_models.<locals>.<listcomp>   sU     	
 	
 	
 $ 	?g!+.g 	
 	
 	
rE   )r   itemsrJ   s    r0   list_modelsz!QiniuImageGenProvider.list_models   s-    	
 	
 #*--//	
 	
 	
 		
rE   r   c                    t           S rR   )r9   rJ   s    r0   default_modelz#QiniuImageGenProvider.default_model   s    rE   Dict[str, Any]c                    dddddddgdS )	NrN   paidu@   七牛云 Kling 系列文生图 (kling-v1/v1-5/v2), 异步接口r   u   七牛云 AI API Keyzhttps://console.qnaigc.com/)r-   prompturl)rL   badgetagenv_varsrI   rJ   s    r0   get_setup_schemaz&QiniuImageGenProvider.get_setup_schema   s4    %U +48 	
 
 	
rE   rb   aspect_ratiokwargsr   c                	   |pd                                 }t          |          }|st          ddd|          S t                      }|st          ddd|          S t	                      \  }}t          |          }t          j        ||d d         |d	d
                              d          }	t          j
                            t           d|	d| dd          }
	 t          j
                            |
d          }t          j        |                                          }|                    d          }n# t          j        j        $ rs}|                                                                d d         }t(                              d|           t          d|j         d| dd|||          cY d }~S d }~wt.          $ r"}t          d| dd|||          cY d }~S d }~ww xY w|st          ddd|||          S t(                              d||           t3          j                    t4          z   }d }t3          j                    |k     rt3          j        t8                     t          j
                            t           d| dd| i           }	 t          j
                            |d!          }t          j        |                                          }n3# t.          $ r&}t(                              d"||           Y d }~d }~ww xY w|                    d#d          }|d$k    r`|                    d%g           }|rGt=          |t>                    r2|d&         }t=          |t@                    r|                    d'          }nJ|d(k    r,t          d)|                    d*d+           d,d|||          S t3          j                    |k     | t          d-t4           d.| d/d|||          S 	 tC          |d0| d12          }nJ# t.          $ r=}t(                              d3|           tE          ||||d|d4d56          cY d }~S d }~ww xY wtE          tG          |          |||dd|i6          S )7Nr   zPrompt is requiredinvalid_argumentr"   )error
error_typeproviderrh   uh   七牛云 API Key 未设置. 请设置环境变量 QINIU_API_KEY 或通过 hermes auth add qiniu 添加.auth_requiredi	     )r6   rb   rh   nzutf-8z/images/generationszBearer zapplication/json)AuthorizationzContent-Type)dataheaders   )timeouttask_idi  zKling submit failed: %su   Kling 提交失败 (HTTP z): 	api_error)rl   rm   rn   r6   rb   rh   u   Kling 提交异常: u   Kling 返回了空的 task_idempty_responsez#Kling task submitted: %s (model=%s)z/images/tasks/rr   )rt   
   zKling poll error for %s: %sstatussucceedrs   r   rc   failedu   Kling 生成失败: status_messageu   未知错误generation_failedu   Kling 任务超时 (>zs): rv   kling_<   )prefixrv   zFailed to cache Kling image: %su%   图片缓存失败，URL有效期7天)rw   note)imager6   rb   rh   rn   extra)$r'   r   r
   r1   r?   rD   jsondumpsencodeurllibrequestRequest	_API_BASEurlopenloadsreadr&   rl   	HTTPErrordecoder7   r8   coder+   infotime_POLL_TIMEOUTsleep_POLL_INTERVALwarningr)   listr*   r   r   rA   )rK   rb   rh   ri   aspectr#   r<   rY   kling_ratiopayloadreqrespresultrw   ebodyr>   deadline	image_urlreq2resp2r{   srs   first
saved_paths                             r0   generatezQiniuImageGenProvider.generate   s    ,B%%''%l33 	!*- #	    .. 		!> + #    ())$)&11 *UdUm'	
 
  
 6'?? 	 n$$---!47!4!4 2  % 
 
	>))#r)::DZ		,,Fjj++GG|% 
	 
	 
	6688??$$TcT*DLL2D999!C!&CCTCC& #          	 	 	!2S22& #        	  	!5+ #    	97HMMM 9;;.#'	ikkH$$J~&&&>))55G55(*=G*=*=> *  D
..tR.@@EJJLL11   <gsKKK 

8R((AI~~zz&"-- 5JtT22 5 GE!%.. 5$)IIe$4$4	h%_<Ln1]1]__2$"!!'   3 ikkH$$D !JmJJJJ$ #   	'***  JJ
  	 	 	NN<cBBB## &C 
 
 
 
 
 
 
 
 
	  j//g&
 
 
 	
si   #AE   G1A(G<G1G1G,&G1,G1&AK. .
L8LL
P   
Q'*2Q"Q'"Q'N)r   rA   )r   rP   )r   rT   r   r   )r   r_   )rb   rA   rh   rA   ri   r   r   r_   )__name__
__module____qualname____doc__propertyrL   rO   rS   r\   r^   rg   r   r   rI   rE   r0   rG   rG      s        **   X ! ! ! X!$ $ $ $

 

 

 

   
 
 
 
" 1c
 c
 c
 c
 c
 c
 c
rE   rG   Nonec                H    |                      t                                 dS )u,   注册七牛云 Kling 图像生成 provider.N)register_image_gen_providerrG   )ctxs    r0   registerr   Z  s#    ##$9$;$;<<<<<rE   r   )r   r2   )r@   rA   r   rA   )r   r   )%r   
__future__r   r   loggingr$   r   urllib.requestr   urllib.errortypingr   r   r   r   agent.image_gen_providerr   r	   r
   r   r   r   	getLoggerr   r7   r   __annotations__r9   rC   r   r   r   r1   r?   rD   rG   r   rI   rE   r0   <module>r      s     # " " " " "   				          , , , , , , , , , , , ,                
	8	$	$ :	   <	  1	 & &    *    '	   ,1 1 1 102 2 2 2N
 N
 N
 N
 N
, N
 N
 N
l= = = = = =rE   