
    `gj.                        d Z ddlmZmZmZ ddlZddlmZ i dddddddddd	d
ddddddd	dddddddd	dddddddddd	ddddddd d	d!d"ddd#d#d$d	d%d&dddddddd	d'd(d)did	d*d+ddd,d	d-d.dddd/d	d0d1dddd2d	d3d4dd#d5d6d	d7d8dddd9d	d:d;d<did	d=d>d?d@ddAd	dBdCd?d?d?dDdddEd	dFdGdHdHdHdIdddJd	ZdKe	dLeee	e
f      fdMZdLee	ef   fdNZdOe	dLee	   fdPZdOe	dLefdQZdOe	dLdfdRZedSk(  rZ	  edT        edU        edV        edW        e       j'                         D ]e  \  ZZ edXe dY        edZed[           d\j-                  ed]   j'                         D  cg c]  \  } }|  d^| d_ c}}       Z ed`e        g  eda        edW       g dbZeD ]  Z edce dY       g Z edd      D ]!  Z ee      Zej=                   ee             #  edeed            edfedg            edhedi            edjedk            edledm             edn        edW        ed
        ed       yyc c}} w )oa  
Toolset Distributions Module

This module defines distributions of toolsets for data generation runs.
Each distribution specifies which toolsets should be used and their probability
of being selected for any given prompt during the batch processing.

A distribution is a dictionary mapping toolset names to their selection probability (%).
Probabilities should sum to 100, but the system will normalize if they don't.

Usage:
    from toolset_distributions import get_distribution, list_distributions
    
    # Get a specific distribution
    dist = get_distribution("image_gen")
    
    # List all available distributions
    all_dists = list_distributions()
    )DictListOptionalN)validate_toolsetdefaultz!All available tools, all the timed   )webvision	image_genterminalfilebrowser)descriptiontoolsetsr   z;Heavy focus on image generation with vision and web supportZ   7   -   )r   r
   r	   r   researchz/Web research with vision analysis and reasoningF   2   
   )r	   r   r
   r   sciencezFScientific research with web, terminal, file, and browser capabilities^   A      )r	   r   r   r
   r   r   developmentz>Terminal, file tools, and reasoning with occasional web lookupP      )r   r   r	   r
   safez$All tools except terminal for safety<   )r	   r   r
   r   balancedz!Equal probability of all toolsetsminimalz!Only web tools for basic researchr	   terminal_onlyz0Terminal and file tools for code execution tasks)r   r   terminal_webz@Terminal and file tools with web search for documentation lookup)r   r   r	   creativez*Image generation and vision analysis focus)r   r
   r	   	reasoningz>Heavy research/reasoning distribution with minimal other tools   )r	   r   r   browser_usezHFull browser-based web interaction with search, vision, and page control)r   r	   r
   browser_onlyz<Only browser automation tools for pure web interaction tasksr   browser_taskszBrowser-focused distribution (browser toolset includes web_search for finding URLs since Google blocks direct browser searches)a      )r   r
   r   terminal_taskszZTerminal-focused distribution with high terminal/file availability, occasional other toolsK   )r   r   r	   r   r
   r   mixed_taskszWMixed distribution with high browser, terminal, and file availability for complex tasks\   #   )r   r   r   r	   r
   r   namereturnc                 ,    t         j                  |       S )z
    Get a toolset distribution by name.
    
    Args:
        name (str): Name of the distribution
        
    Returns:
        Dict: Distribution definition with description and toolsets
        None: If distribution not found
    )DISTRIBUTIONSget)r2   s    H/root/.hermes/venv/lib/python3.12/site-packages/toolset_distributions.pyget_distributionr8      s     T""    c                  *    t         j                         S )zh
    List all available distributions.
    
    Returns:
        Dict: All distribution definitions
    )r5   copy r9   r7   list_distributionsr=      s     r9   distribution_namec                    t        |       }|st        d|        g }|d   j                         D ]O  \  }}t        |      st	        d| d|  d       $t        j
                         dz  |k  s?|j                  |       Q |sC|d   r>t        |d   j                         d       d	   }t        |      r|j                  |       |S )
a  
    Sample toolsets based on a distribution's probabilities.
    
    Each toolset in the distribution has a % chance of being included.
    This allows multiple toolsets to be active simultaneously.
    
    Args:
        distribution_name (str): Name of the distribution to sample from
        
    Returns:
        List[str]: List of sampled toolset names
        
    Raises:
        ValueError: If distribution name is not found
    zUnknown distribution: r   u   ⚠️  Warning: Toolset 'z' in distribution 'z' is not validr   c                     | d   S N   r<   xs    r7   <lambda>z3sample_toolsets_from_distribution.<locals>.<lambda>  s
    1Q4 r9   )keyr   )r8   
ValueErroritemsr   printrandomappendmax)r>   distselected_toolsetstoolset_nameprobabilityhighest_prob_toolsets         r7   !sample_toolsets_from_distributionrR      s      -.D12C1DEFF %)*%5%;%;%= 3!k-.|n<OPaObbpqr ==?S ;.$$\23 j!1"4
#3#9#9#;PQRS01$$%9:r9   c                     | t         v S )z
    Check if a distribution name is valid.
    
    Args:
        distribution_name (str): Distribution name to validate
        
    Returns:
        bool: True if valid, False otherwise
    )r5   )r>   s    r7   validate_distributionrT     s     --r9   c                    t        |       }|st        d|         yt        d|         t        d|d           t        d       t        |d   j                         d d	
      D ]  \  }}t        d|dd|dd        y)z|
    Print detailed information about a distribution.
    
    Args:
        distribution_name (str): Distribution name
    u   ❌ Unknown distribution: Nu   
📊 Distribution: z   Description: r   z   Toolsets:r   c                     | d   S rA   r<   rC   s    r7   rE   z)print_distribution_info.<locals>.<lambda>9  s
    ! r9   T)rF   reverseu	        • 15z : 3z% chance)r8   rI   sortedrH   )r>   rM   toolsetprobs       r7   print_distribution_infor]   *  s     -.D*+<*=>?	!"3!4
56	T-01
23	.Z 0 6 6 8nVZ[ ;	'"Sa9:;r9   __main__u   📊 Toolset Distributions Demoz<============================================================u   
📋 Available Distributions:z(----------------------------------------z
  :z    r   z, r   (z%)z    Toolsets: u   

🎲 Sampling Examples:)r   r   r!   r   
   z  Sample 1: z  Sample 2: rB   z  Sample 3:    z  Sample 4:    z  Sample 5:    u"   

📊 Detailed Distribution Info:) __doc__typingr   r   r   rJ   r   r   r5   stranyr8   r=   rR   boolrT   r]   __name__rI   rH   r2   rM   jointoolset_listtest_distributions	dist_namesamplesrange_sampledrK   rZ   )tsps   00r7   <module>rv      s  ( ( '  %
y:

y T	
y4 H	
5yJ _

Kyd W	
eyz =	
{yP :

Qyj :3
kyz I
{yL Y
My` C
ayt W
uyJ a
Ky^ Us
_yn  Y
oyB s

Cy\ p

]yx#3 #8DcN#; # DdO  ) )c )X
.S 
.T 
.;s ;t ;& z 

+,	(O 

+,	(O(*002 /
dTF!nT-()*+yyT*=M=S=S=U!VEBRD!B-!VW|n-.	/ 

'(	(OI' +	9+Q q 	,A7	BGNN6'?+	, 	WQZL)*WQZL)*WQZL)*WQZL)*WQZL)*+ 

01	(OK(J'Q  "Ws   I(