Skip to main content
Glama
ai_portfolio_doctor.cpython-311.pyc13.3 kB
� �o�hB$��x�ddlZddlZddlmZmZmZddlmZddlZeje ��Z Gd�d��Z dS)�N)�Dict�List�Any)�datetimec�T�eZdZddefd�Zdeeefdeeeffd�Zdeeefdefd�Z deeefde efd�Z deeefd e ede efd �Z deeefd ed e edefd �Z d edefd �Zd edefd�Zd edefd�Zdeeeffd�ZdS)�AIPortfolioDoctorN�openai_api_keyc�4�||_|r|t_dSdS�N)r �openai�api_key)�selfr s �-/home/runner/workspace/ai_portfolio_doctor.py�__init__zAIPortfolioDoctor.__init__ s'��,��� � ,�+�F�N�N�N� ,� ,��portfolio_data�returnc��� |�|��}|�|��}|�||��}|�|||��}||�|��||||�|��t j�����d�S#t$r;}t� d|����|� ��cYd}~Sd}~wwxYw)z-Analyze portfolio and return health diagnosis�� health_score� diagnosis�symptoms�treatment_plan� ai_insights�visual_indicator� timestampzPortfolio diagnosis failed: N) �_calculate_health_score�_identify_symptoms�_generate_treatment_plan�_get_ai_diagnosis�_get_diagnosis_text�_get_health_colorr�utcnow� isoformat� Exception�logger�error�_fallback_diagnosis)rrrrr� ai_diagnosis�es r�diagnose_portfolioz$AIPortfolioDoctor.diagnose_portfolios�� .��7�7��G�G�L��.�.�~�>�>�H�!�:�:�>�8�T�T�N� �1�1�.�,�PX�Y�Y�L�!-�!�5�5�l�C�C�$�"0�+�$(�$:�$:�<�$H�$H�%�_�.�.�8�8�:�:��� ��� .� .� .� �L�L�;��;�;� <� <� <��+�+�-�-� -� -� -� -� -� -����� .���s�B)B,�, C1�60C,�&C1�,C1c�"� �d}|�dg��}|�dd��}|r|dkrdSt|��dkr|dz}nt|��dkr|dz}|D]/}|�dd��}|d kr|d z}�$|d kr|d z}�0gd �� t� fd �|D����}|dkr|d z}n |dkr|dz}td�|D����}|s|d z}t dt d|����S)z(Calculate portfolio health score (0-100)�d�tokens�total_value_usdr��� � percentage�2����USDC�USDT�DAI�BUSDc3��K�|]D}|�dd������v�,|�dd��V��EdS��symbol�r3rN��get�upper��.0�token� stable_coinss �r� <genexpr>z<AIPortfolioDoctor._calculate_health_score.<locals>.<genexpr>@�b����� � ���y�y��2�&�&�,�,�.�.�,�>�>� �I�I�l�A� &� &�>�>�>�>� � r�Fc3�JK�|]}|�dd��dkV��dS�� yield_apyrN�rA�rDrEs rrGz<AIPortfolioDoctor._calculate_health_score.<locals>.<genexpr>L�I���� � �� �I�I�k�1� %� %�� )� � � � � � r)rA�len�sum�any�max�min) rr�scorer.� total_valuerEr3�stable_percentage� yield_earningrFs @rrz)AIPortfolioDoctor._calculate_health_score's�������#�#�H�b�1�1��$�(�(�):�A�>�>� �� ���)�)��2� �v�;�;��?�?� �R�K�E�E� ��[�[�2� � � �R�K�E�� � �E����<��3�3�J��B����� ����b����� ���7�6�6� �� � � � �� � � � � �� �r� !� !� �R�K�E�E� �� #� #� �R�K�E�� � �� � � � � � �� � �R�K�E��1�c�#�u�o�o�&�&�&rc �� �g}|�dg��}|�dd��}|D]N}|�dd��}|dkr0|�|d�d|�dd ���d ����Ot|��d kr|�d ��gd �� t� fd�|D����}|dkr|�d��n|dkr|�d��t d�|D����}|s|�d��t d�|D����r|�d��|S)z"Identify portfolio health symptomsr.r/rr3�(z.0fz% concentrated in r>�unknownz - high risk!r1z0Poor diversification - only holding a few assetsr7c3��K�|]D}|�dd������v�,|�dd��V��EdSr=r@rCs �rrGz7AIPortfolioDoctor._identify_symptoms.<locals>.<genexpr>grHrr2z)Missing stable assets for risk managementrIz/Too conservative - missing growth opportunitiesc3�JK�|]}|�dd��dkV��dSrKrMrNs rrGz7AIPortfolioDoctor._identify_symptoms.<locals>.<genexpr>srOrz0Missing yield opportunities - money sitting idlec3�HK�|]}|�d��dkV��dS�� blockchain�ethereumNrMrNs rrGz7AIPortfolioDoctor._identify_symptoms.<locals>.<genexpr>{�3����I�I��u�y�y��&�&�*�4�I�I�I�I�I�Irz4High gas fees on Ethereum - consider L2 alternatives)rA�appendrPrQrR) rrrr.rVrEr3rWrXrFs @rrz$AIPortfolioDoctor._identify_symptomsUs�������#�#�H�b�1�1��$�(�(�):�A�>�>� �� t� t�E����<��3�3�J��B������:� r� r� r�U�Y�Y�x�Yb�Ec�Ec� r� r� r�s�s�s�� �v�;�;��?�?� �O�O�N� O� O� O�7�6�6� �� � � � �� � � � � �� �r� !� !� �O�O�G� H� H� H� H� �� #� #� �O�O�M� N� N� N�� � �� � � � � � �� P� �O�O�N� O� O� O� �I�I�&�I�I�I� I� I� T� �O�O�R� S� S� S��rrc�� �g}|�dg��}t|��dkr|�d��|D]J}|�dd��}|dkr,|�d|�d���d ����Kgd �� t� fd �|D����}|d kr|�d ��n|dkr|�d��t d�|D����}|s|�d��t d�|D����r|�d��|S)z"Generate treatment recommendationsr.r1z6Add 2-3 more quality assets to improve diversificationr3rrZzReduce r>z position to under 30%r7c3��K�|]D}|�dd������v�,|�dd��V��EdSr=r@rCs �rrGz=AIPortfolioDoctor._generate_treatment_plan.<locals>.<genexpr>�rHrr2z+Allocate 20-30% to stable assets (USDC/DAI)rIz;Increase growth allocation - add ETH or quality DeFi tokensc3�JK�|]}|�dd��dkV��dSrKrMrNs rrGz=AIPortfolioDoctor._generate_treatment_plan.<locals>.<genexpr>�rOrz4Start earning yield - lend USDC on Aave for 4-6% APYc3�HK�|]}|�d��dkV��dSr_rMrNs rrGz=AIPortfolioDoctor._generate_treatment_plan.<locals>.<genexpr>�rbrz.Move some assets to Polygon for 99% lower fees)rArPrcrQrR) rrr� treatmentsr.rEr3rWrXrFs @rrz*AIPortfolioDoctor._generate_treatment_plan�s����� ��#�#�H�b�1�1�� �v�;�;��?�?� � � �V� W� W� W�� Y� Y�E����<��3�3�J��B����!�!�"W�E�I�I�h�,?�,?�"W�"W�"W�X�X�X��7�6�6� �� � � � �� � � � � �� �r� !� !� � � �K� L� L� L� L� �� #� #� � � �[� \� \� \�� � �� � � � � � �� V� � � �T� U� U� U� �I�I�&�I�I�I� I� I� P� � � �N� O� O� O��rrc��|jrt�dS ddlm}||jd���}|jj�ddt d �gd d � ��}|jdjj � ��S#t$r<}t� d |����|�|��cYd}~Sd}~wwxYw)z%Get AI-powered diagnosis using OpenAINz&Connect OpenAI for AI-powered insightsr)�OpenAIzhttps://api.comput3.ai/v1)r �base_urlz llama3:70b�user)�role�content�gffffff�?)�model�messages� max_tokens� temperaturezOpenAI diagnosis failed: )r r rj�chat� completions�create�prompt�choices�messagern�stripr%r&�warning�_fallback_ai_diagnosis)rrrrrj�client�responser*s rr z#AIPortfolioDoctor._get_ai_diagnosis�s����"� <�f�n�;�;� =� %� %� %� %� %� %��V�D�$7�B]�^�^�^�F��{�.�5�5�"�#)�f�=�=�>��� 6���H��#�A�&�.�6�<�<�>�>� >��� =� =� =� �N�N�:�q�:�:� ;� ;� ;��.�.�|�<�<� <� <� <� <� <� <����� =���s�A,A?�? C� 1C�:C�Cc�6�|dkrdS|dkrdS|dkrdSdS)z0Fallback AI diagnosis when OpenAI is unavailable�Pu�Your portfolio is in excellent health! Just like a well-balanced diet, you're diversified and earning steady returns. Keep up the great work! 💪�<u�Your portfolio has moderate health. Think of it like having slightly high cholesterol - not dangerous, but some lifestyle changes could really help optimize your returns! 📈rZu�Your portfolio needs attention. Like visiting a doctor for chest pains, these concentration risks could cause problems. Time for some portfolio medicine! 🏥u�Your portfolio is in critical condition! Just like emergency surgery, immediate action needed to reduce risks and start earning proper returns. Don't panic - we can fix this! 🚨��rrs rr|z(AIPortfolioDoctor._fallback_ai_diagnosis�sS�� �2� � �h�h� �R� � �E�E� �R� � �t�t�I�Irc�6�|dkrdS|dkrdS|dkrdSdS)zGet diagnosis category textr�zExcellent Healthr�z Good HealthrZz Moderate RiskzHigh Risk - Needs Attentionr�r�s rr!z%AIPortfolioDoctor._get_diagnosis_text�s9�� �2� � �%�%� �R� � � �=� �R� � �"�?�0�0rc�&�|dkrdS|dkrdSdS)zGet color for health indicatorr��successr�r{�dangerr�r�s rr"z#AIPortfolioDoctor._get_health_color�s'�� �2� � ��9� �R� � ��9��8rc�`�dddgdgddtj�����d�S)z&Fallback diagnosis when analysis failsr4zAnalysis Unavailablez Unable to analyze portfolio dataz%Check wallet connection and try againz2Portfolio analysis service temporarily unavailabler{r)rr#r$)rs rr(z%AIPortfolioDoctor._fallback_diagnosis�sB���/�;�<�F�G�O� )�!��*�*�4�4�6�6� � � rr )�__name__� __module__� __qualname__�strrrrr+�intrrrrr r|r!r"r(r�rrrr s�������,�,�s�,�,�,�,� .��c�3�h��.�D��c��N�.�.�.�.�0,'�d�3��8�n�,'��,'�,'�,'�,'�\)��c�3�h��)�D��I�)�)�)�)�V(�t�C��H�~�(�QU�VY�QZ�(�_c�dg�_h�(�(�(�(�T=��S�#�X��=�c�=�]a�be�]f�=�kn�=�=�=�=�, I�3� I�3� I� I� I� I� 1�� 1�� 1� 1� 1� 1��c��c�����  �T�#�s�(�^�  �  �  �  �  �  rr) �loggingr �typingrrrr�json� getLoggerr�r&rr�rr�<module>r�s������� � � � �"�"�"�"�"�"�"�"�"�"������� � � � � �� �8� $� $��` �` �` �` �` �` �` �` �` �` 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/JMadhan1/OneDefi-MCP'

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