Skip to main content
Glama
method_cache.cpython-311.pyc7.19 kB
� �L�g����ddlZddlZddlmZddlmZmZmZddlZddl m Z Gd�d��Z Gd�d ��Z Gd �d ��Z dS) �N)�Path)�Dict�Optional�Tuple�)�FunctionDefinitionc�V�eZdZdefd�Zdedefd�Zdedeefd�Z dedefd�Z d S) � MethodCache� cache_dirc��||_|j�d���tjt��|_dS)NT)�exist_ok)r �mkdir�logging� getLogger�__name__�logger)�selfr s �8/Users/arjun/repos/sparkmango/mcp_server/method_cache.py�__init__zMethodCache.__init__ s8��"��� ����d��+�+�+��'��1�1�� � � ��function�returnc��tj|jd�|jD��d�|jD��|jjd�d���}tj|� ����� ��S)z+Generate a unique cache key for a function.c�*�g|]}|j|jf��S���name�type��.0�ps r� <listcomp>z.MethodCache._get_cache_key.<locals>.<listcomp>s!��A�A�A�A�����'�A�A�Arc�*�g|]}|j|jf��Srrrs rr"z.MethodCache._get_cache_key.<locals>.<listcomp>s!��C�C�C�Q�����(�C�C�Cr)r�inputs�outputs�state_mutabilityT)� sort_keys) �json�dumpsrr$r%r&�value�hashlib�sha256�encode� hexdigest)rr�func_strs r�_get_cache_keyzMethodCache._get_cache_keys����:��M�A�A���A�A�A�C�C�(�2B�C�C�C� (� 9� ?�  � � � �����~�h�o�o�/�/�0�0�:�:�<�<�<rc�"�|�|��}|j|�d�z }|���r6|j�d|j����|���S|j�d|j����dS)z'Get cached implementation if it exists.�.pyzCache hit for function zCache miss for function N)r0r �existsr�infor� read_text)rr� cache_key� cache_files r�get_cached_implementationz%MethodCache.get_cached_implementations����'�'��1�1� ��^��&7�&7�&7�7� � � � � � � *� �K� � �F�x�}�F�F� G� G� G��'�'�)�)� )� � ���C�H�M�C�C�D�D�D��tr�implementationc��|�|��}|j|�d�z }|�|��|j�d|j����dS)z!Cache a generated implementation.r2z#Cached implementation for function N)r0r � write_textrr4r)rrr9r6r7s r�cache_implementationz MethodCache.cache_implementation&se���'�'��1�1� ��^��&7�&7�&7�7� ����n�-�-�-� � ���N�x�}�N�N�O�O�O�O�OrN) r� __module__� __qualname__rrr�strr0rr8r<rrrr r s�������2�$�2�2�2�2� =�'9� =�c� =� =� =� =� �2D� ��RU�� � � � �P�-?�P�QT�P�P�P�P�P�Prr c�8�eZdZd�Zdededeeeffd�ZdS)�MethodValidatorc�B�tjt��|_dS)N)rrrr�rs rrzMethodValidator.__init__/s���'��1�1�� � � rrr9rc�v�gd�}|jjdkr|�d��n|�d��|D]}||vr dd|��fcS�d|j�d�}|�|��sd S|jD]}|j�d �|vrdd |j��fcS�|jjdkrd |vrd Sn d|vrd|vrdSdS)z` Validate a generated implementation. Returns (is_valid, error_message) )z async defzweb3.eth.contractztry:zexcept Exception as e:�view�build_transactionzcall()FzMissing required component: z async def z (state: State)FzInvalid function signature�:zMissing parameter: zreturn {)Fz&View function must return a dictionaryz"type": "transaction_to_sign"z'type': 'transaction_to_sign')Fz7State-changing function must return transaction_to_sign)T�)r&r*�appendr� startswithr$)rrr9�required_components� component�expected_signature�params r�validate_implementationz'MethodValidator.validate_implementation2s\��  � � �� � $� *�f� 4� 4� � &� &�':� ;� ;� ;� ;� � &� &�x� 0� 0� 0�-� I� I�I���.�.��H�Y�H�H�H�H�H�H�/�G�(�-�F�F�F���(�(�);�<�<� 7�6�6��_� A� A�E��*����~�5�5��@�E�J�@�@�@�@�@�@�6� � $� *�f� 4� 4���/�/�F�F�0�/�n�D�D�Ih�p~�I~�I~�W�W��xrN) rr=r>rrr?r�boolrOrrrrArA.s[������2�2�2�+�0B�+�TW�+�\a�bf�hk�bk�\l�+�+�+�+�+�+rrAc�,�eZdZd�Zdefd�Zdefd�ZdS)�LLMMeterc�^�d|_d|_tjt��|_dS)Nr)� total_tokens�total_requestsrrrrrCs rrzLLMMeter.__init__`s(���������'��1�1�� � � r�tokensc ��|xj|z c_|xjdz c_|j�d|�d|j�d|j�d���dS)zRecord LLM usage.rz LLM Usage: z tokens (Total: z tokens, z requests)N)rTrUrr4)rrVs r� record_usagezLLMMeter.record_usageesi�� ���V�#��� ���q� ��� � ���z�v�z�z�t�?P�z�z�[_�[n�z�z�z�{�{�{�{�{rrc�V�|j|j|jdkr|j|jz ndd�S)zGet usage statistics.r)rTrU�average_tokens_per_request)rTrUrCs r�get_usage_statszLLMMeter.get_usage_statsksA��!�-�"�1�UY�Uh�kl�Ul�Ul�$�*;�d�>Q�*Q�*Q�rs� � � rN)rr=r>r�intrXrr[rrrrRrR_s^������2�2�2� |�3�|�|�|�|�  �� � � � � � rrR)r(r+�pathlibr�typingrrrr� abi_analyzerrr rArRrrr�<module>r`s��� � � � �����������(�(�(�(�(�(�(�(�(�(�����,�,�,�,�,�,�$P�$P�$P�$P�$P�$P�$P�$P�L/�/�/�/�/�/�/�/�b � � � � � � � � � r

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ArjunBhuptani/sparkmango'

If you have feedback or need assistance with the MCP directory API, please join our Discord server