
    kKjL                        d Z 	 ddlmZ ddlmZmZ ddl	Z	ddl
mZmZ ddlmZ ddlmZ ddlmZ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  ee      Z defdZ! G d de      Z"y# e$ rZ ed      edZ[ww xY w)u  GenerativeUI — a Provider that adds LLM-generated UI capabilities.

Registers tools and resources from ``prefab_ui.generative`` so that an
LLM can write Prefab Python code, execute it in a sandbox, and render
the result as a streaming interactive UI.

Requires ``fastmcp[apps]`` (prefab-ui).

Usage::

    from fastmcp import FastMCP
    from fastmcp.apps.generative import GenerativeUI

    mcp = FastMCP("My Server")
    mcp.add_provider(GenerativeUI())
    N)get_generative_renderer_cspget_generative_renderer_htmlzJGenerativeUI requires prefab-ui. Install with: pip install 'fastmcp[apps]')AsyncIteratorSequence)asynccontextmanager)Any)	AppConfigResourceCSPapp_config_to_meta_dict)Provider)LocalProvider)Tool)
get_logger)UI_MIME_TYPEreturnc                  l    t               } t        | j                  d      | j                  d            S )z?Build CSP from the generative renderer's declared requirements.resource_domainsconnect_domains)r   r   )r   r
   getcsps    h/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/apps/generative.py
_build_cspr   ,   s1    
%
'C!34 12     c            	       2    e Zd ZdZdddddededed	d
f fdZd	efdZd	efdZ	ddZ
d	ee   fdZddeded	ed
z  fdZd	ee   fdZddeded	ed
z  fdZd	ee   fdZddeded	ed
z  fdZd	ee   fdZddeded	ed
z  fdZed	ed
   fd       Z xZS )GenerativeUIa[  A Provider that adds generative UI capabilities to a server.

    Registers:

    - A ``generate_ui`` tool that accepts Prefab Python code, executes
      it in a Pyodide sandbox, and returns the rendered PrefabApp.
      Supports streaming via ``ontoolinputpartial``.
    - A ``components`` tool that searches the Prefab component library.
    - The generative renderer resource with CSP for Pyodide CDN access.

    Example::

        from fastmcp import FastMCP
        from fastmcp.apps.generative import GenerativeUI

        mcp = FastMCP("My Server")
        mcp.add_provider(GenerativeUI())
    generate_prefab_uiTsearch_prefab_components)	tool_nameinclude_components_toolcomponents_tool_namer   r    r!   r   Nc                    t         |           || _        || _        || _        t        d      | _        d | _        d| _        y )Nerror)on_duplicateF)	super__init__
_tool_name_components_tool_name_include_components_toolr   _local_sandbox_setup_done)selfr   r    r!   	__class__s       r   r&   zGenerativeUI.__init__I   sB     	#%9"(?%#9! r   c                 "    d| j                   dS )NzGenerativeUI(tool_name=))r'   r-   s    r   __repr__zGenerativeUI.__repr__X   s    ((;1==r   c                 V    | j                   ddlm}  |       | _         | j                   S )z"Lazily create the Pyodide sandbox.r   )Sandbox)r+   prefab_ui.sandboxr4   )r-   r4   s     r   _get_sandboxzGenerativeUI._get_sandbox[   s"    == 1#IDM}}r   c           
      P  
 | j                   ryt               }t        t        j                  |      }ddlm} | 
	 ddt        dt        t        t        t        f   z  dz  d|f
fd}t        j                  || j                  t        j                  j                  xs d	d
t        |      i      }| j                   j#                  |       | j$                  rgt        j                  t        j&                  | j(                  t        j&                  j                  xs d	      }| j                   j#                  |       ddlm} t        |      } |t        j                  dt/               t0        d
t        |      i      }	| j                   j#                  |	       d| _         y)z4Lazily register tools and resources on first access.N)resource_urir   r   )	PrefabAppcodedatar   c                    K   t        |t              r(|j                         rt        j                  |      nd }n|}t        j                  | |j                                d {   S 7 w)N)r;   sandbox)
isinstancestrstripjsonloads_genexecuter6   )r:   r;   parsed_datasandbox_refs      r   generate_uiz/GenerativeUI._ensure_setup.<locals>.generate_uir   s]     
 $$26**,djj.D" #002   s   A$A.'A,(A. ui)namedescriptionmeta)rJ   rK   )TextResourcer   zPrefab Generative Renderer)urirJ   text	mime_typerL   TN)r,   r   r	   rC   RESOURCE_URIprefab_ui.appr9   r?   dictr   r   from_functionr'   rD   __doc__r   r*   _add_componentr)   search_componentsr(   fastmcp.resources.typesrM   r   r   )r-   r   
app_configr9   rG   toolcomponents_toolrM   resource_configresourcerF   s             @r   _ensure_setupzGenerativeUI._ensure_setupc   se   lD,=,=3G

 	, 15		S#X&-	 	 !!,,2/
;<	
 	""4( (("00&&// 22::@bO
 KK&&7 	9#,!!--/"/@A
 	""8,r   c                 r   K   | j                          | j                  j                          d {   S 7 wrQ   )r_   r*   _list_toolsr1   s    r   ra   zGenerativeUI._list_tools   s+     [[,,....   .757rJ   versionc                 v   K   | j                          | j                  j                  ||       d {   S 7 wrQ   )r_   r*   	_get_toolr-   rJ   rc   s      r   re   zGenerativeUI._get_tool   s/     [[**49999   0979c                 r   K   | j                          | j                  j                          d {   S 7 wrQ   )r_   r*   _list_resourcesr1   s    r   ri   zGenerativeUI._list_resources   s+     [[002222rb   rN   c                 v   K   | j                          | j                  j                  ||       d {   S 7 wrQ   )r_   r*   _get_resourcer-   rN   rc   s      r   rk   zGenerativeUI._get_resource   s/     [[..sG<<<<rg   c                    K   g S wrQ    r1   s    r   _list_resource_templatesz%GenerativeUI._list_resource_templates        	   c                    K   y wrQ   rn   rl   s      r   _get_resource_templatez#GenerativeUI._get_resource_template   	        c                    K   g S wrQ   rn   r1   s    r   _list_promptszGenerativeUI._list_prompts   rp   rq   c                    K   y wrQ   rn   rf   s      r   _get_promptzGenerativeUI._get_prompt   rt   ru   c                   K   | j                          | j                  j                         4 d {    d  d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY wwrQ   )r_   r*   lifespanr1   s    r   r{   zGenerativeUI.lifespan   sA     ;;'')) *))))))sC   /A%AA%AA%AA%A%A"AA"A%)r   NrQ   )__name__
__module____qualname__rV   r?   boolr&   r2   r   r6   r_   r   r   ra   re   ri   rk   ro   rs   rw   ry   r   r   r{   __classcell__)r.   s   @r   r   r   5   s7   , .(,$>! ! "&	!
 "! 
!># >c > H/8D> /:C :# : :3x} 3=s =S =C$J =  c SSWZ Xc] c C 3:  d 3  r   r   )#rV   prefab_ui.generative
generativerC   prefab_ui.rendererr   r   ImportError_excrA   collections.abcr   r   
contextlibr   typingr   fastmcp.apps.configr	   r
   r   fastmcp.server.providers.baser   'fastmcp.server.providers.local_providerr   fastmcp.tools.baser   fastmcp.utilities.loggingr   fastmcp.utilities.mimer   r|   loggerr   r   rn   r   r   <module>r      s   "	'  3 *  O O 2 A # 0 /	H	K R8 R;  
Ts   A, ,A?1	A::A?