§
    ÙŽ’j­  ã                   ó¼   — d Z ddlmZmZmZmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ  G d„ d¦  «        ZdS )zThe credential factory class.é    )Ú	AnnotatedÚTypeÚUnionÚget_argsÚget_type_hints)ÚTypeAdapterÚFieldé   )ÚAnthropicCredential)ÚDashScopeCredential)ÚDeepSeekCredential)ÚGeminiCredential)ÚMoonshotCredential)ÚOllamaCredential)ÚOpenAICredential)ÚXAICredential)ÚCredentialBasec                   ó8  — e Zd ZU dZeeeeee	e
egZeee                  ed<   dZee         dz  ed<   edee         fd„¦   «         Zedee         ddfd„¦   «         Zed	edefd
„¦   «         Zededee         dz  fd„¦   «         Zedee         fd„¦   «         ZdS )ÚCredentialFactoryaú  Registry and deserializer for :class:`CredentialBase` subclasses.

    Built-in credential types are pre-registered.  Call
    :meth:`register_credential` to add custom types before starting the app.

    Usage::

        # Deserialize from storage
        credential = CredentialFactory.from_dict(record.data)

        # Register a custom type
        CredentialFactory.register_credential(MyCredential)

        # List schemas for the frontend form
        schemas = CredentialFactory.list_schemas()
    Ú_classesNÚ_adapterÚreturnc                 óº   — | j         €Nt          t          t          | j        ¦  «                 t          d¬¦  «        f         }t          |¦  «        | _         | j         S )NÚtype)Údiscriminator)r   r   r   Útupler   r	   r   )ÚclsÚunions     úLC:\Projects\DSCons\.venv\Lib\site-packages\agentscope\credential\_factory.pyÚ_get_adapterzCredentialFactory._get_adapter0   sR   € àŒ<ÐÝÝ•e˜CœLÑ)Ô)Ô*Ý FÐ+Ñ+Ô+ð-ôˆEõ ' uÑ-Ô-ˆCŒLØŒ|Ðó    Úcredential_clsc                 ó^   — || j         v rdS | j                              |¦  «         d| _        dS )a  Register a custom :class:`CredentialBase` subclass.

        The class must define a ``type`` field with a unique ``Literal``
        default so Pydantic can use it as a discriminator.

        Args:
            credential_cls: The subclass to register.
        N)r   Úappendr   )r   r"   s     r   Úregister_credentialz%CredentialFactory.register_credential:   s7   € ð ˜Sœ\Ð)Ð)ØˆFØŒ×Ò˜NÑ+Ô+Ð+ØˆŒˆˆr!   Údatac                 óP   — |                       ¦   «                              |¦  «        S )zâDeserialize a credential dict (from storage) to a typed instance.

        Args:
            data: Raw dict containing a ``"type"`` key.

        Returns:
            A typed :class:`CredentialBase` subclass instance.
        )r    Úvalidate_python)r   r&   s     r   Ú	from_dictzCredentialFactory.from_dictI   s$   € ð ×ÒÑ!Ô!×1Ò1°$Ñ7Ô7Ð7r!   Úproviderc                 óª   — | j         D ]J}t          |¦  «        }|                     d¦  «        }|€Œ)t          |¦  «        }|r|d         |k    r|c S ŒKdS )a  Return the credential class for the given provider type, or None.

        Args:
            provider: The ``type`` discriminator value (e.g. ``"openai"``).

        Returns:
            The matching :class:`CredentialBase` subclass, or ``None`` if not
            found.
        r   Nr   )r   r   Úgetr   )r   r*   ÚcÚhintsÚ	type_hintÚargss         r   Úget_credential_classz&CredentialFactory.get_credential_classU   sn   € ð ”ð 	ð 	ˆAÝ" 1Ñ%Ô%ˆEØŸ	š	 &Ñ)Ô)ˆIØÐ ØÝ˜IÑ&Ô&ˆDàð ˜˜Qœ 8Ò+Ð+Ø���øØˆtr!   c                 ó$   — d„ | j         D ¦   «         S )z‡Return JSON schemas for all registered credential types.

        Used by the frontend to render credential forms dynamically.
        c                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Úmodel_json_schema)Ú.0r-   s     r   ú
<listcomp>z2CredentialFactory.list_schemas.<locals>.<listcomp>t   s$   € Ð<Ð<Ð<¨!�×#Ò#Ñ%Ô%Ð<Ð<Ð<r!   )r   )r   s    r   Úlist_schemaszCredentialFactory.list_schemasn   s   € ð =Ð<¨s¬|Ð<Ñ<Ô<Ð<r!   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   Úlistr   r   Ú__annotations__r   r   Úclassmethodr    r%   Údictr)   Ústrr1   r8   r4   r!   r   r   r      sj  € € € € € € ðð ð$ 	ØØØØØØØð	,€Hˆd�4˜Ô'Ô(ð 	ð 	ñ 	ð 48€Hˆk˜.Ô)¨DÑ0Ð7Ð7Ñ7àð˜[¨Ô8ð ð ð ñ „[ðð ð°°nÔ1Eð È$ð ð ð ñ „[ðð ð	8˜Tð 	8 nð 	8ð 	8ð 	8ñ „[ð	8ð ðàðð 
ˆnÔ	 Ñ	$ðð ð ñ „[ðð0 ð=˜T $œZð =ð =ð =ñ „[ð=ð =ð =r!   r   N)r<   Útypingr   r   r   r   r   Úpydanticr   r	   Ú
_anthropicr   Ú
_dashscoper   Ú	_deepseekr   Ú_geminir   Ú	_moonshotr   Ú_ollamar   Ú_openair   Ú_xair   Ú_baser   r   r4   r!   r   ú<module>rM      s+  ðà #Ð #Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cà 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %Ø )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ðb=ð b=ð b=ð b=ð b=ñ b=ô b=ð b=ð b=ð b=r!   