o
    [i
                     @  sd   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	Z	d dl
mZ dd
dZdddZdS )    )annotationsN)defaultdict)CallableUnion)Tool
doc_stringUnion[str, None]returndict[str, str]c           	      C  s  t t}| s|S tt| }|  D ]%}|  }|dr"d}q|dr*d}q||  |  d7  < qd }|d  D ]I}| }d|v r{tjd|dd	}|d
  }|}|d  }t	|dkrv|d rv|d ddd  }|||< q@|r|r||  d| 7  < q@|S )Nzargs:args)zreturns:zyields:zraises:_
:z(?:\(([^)]*)\)|:)\s*   )maxsplitr       )
r   strhash
splitlineslowerstrip
startswithresplitlen)	r   parsed_docstringkeylinelowered_linelast_keypartsarg_namearg_description r%   H/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/ollama/_utils.py_parse_docstring   s4   


r'   funcr   r   c              	   C  s  t tt| }tt| }t| jtjfdd t	| j
 D t	| || d }|di  D ]7\}}d|v rIdd |dD n|dd	h}d
|v r`|d | |d
 || d|d|d |< q7tdtj| j|ddtjjdi |dd}t|S )Nc                 S  s(   i | ]\}}||j tjkr|j ntqS r%   )
annotationinspect_emptyr   ).0kvr%   r%   r&   
<dictcomp>?   s   ( z,convert_function_to_tool.<locals>.<dictcomp>)__annotations____signature____doc__
propertiesanyOfc                 S  s   h | ]}| d dqS )typestring)get)r,   tr%   r%   r&   	<setcomp>G   s    z+convert_function_to_tool.<locals>.<setcomp>r5   r6   nullrequiredz, )descriptionr5   functionr<    )namer<   
parameters)r5   r=   r%   )r   r   r*   getdocr'   r5   __name__pydantic	BaseModel	signaturer@   itemsmodel_json_schemar7   removediscardjoinr   Function
Parametersmodel_validate)r(   doc_string_hashr   schemar-   r.   typestoolr%   r%   r&   convert_function_to_tool8   s:   
*


	rR   )r   r   r	   r
   )r(   r   r	   r   )
__future__r   r*   r   collectionsr   typingr   r   rC   ollama._typesr   r'   rR   r%   r%   r%   r&   <module>   s    
+