Skip to main content
Glama

qudi MCP Integration

by dirkenglund
safety.cpython-311.pyc11.5 kB
� `+�hH,����dZddlZddlmZddlmZmZmZmZm Z ddl m Z ddl m Z Gd�de��Ze Gd �d ����Ze Gd �d ����ZGd �d��ZdS)z� Safety and runlevel management for qudi MCP integration Implements safety interlocks, runlevel management, and parameter validation to ensure safe operation of quantum photonics experiments. �N)�Enum)�Dict�List�Any�Optional�Tuple)� dataclass)�Pathc��eZdZdZdZdZdZdS)�RunLevelzSystem run levels for safetyzdry-run�sim�liveN)�__name__� __module__� __qualname__�__doc__�DRY_RUN�SIM�LIVE���N/Users/englund/Projects/QPG-MIT/qudi-iqo-modules-QPG/mcp_integration/safety.pyr r s#������&�&��G� �C� �D�D�Drr c�n�eZdZUdZeed<dZeeed<dZ eeed<dZ eed<dZ eed<dS) � SafetyLimitzSafety limit definition� parameterN� min_value� max_value��unit� description) rrrr�str�__annotations__rr�floatrrr rrrrrsf�������!�!��N�N�N�!%�I�x���%�%�%�!%�I�x���%�%�%��D�#�N�N�N��K������rrc�@�eZdZUdZeed<eed<eed<dZeed<dS)� InterLockzSafety interlock definition�name�check_functionr F�criticalN)rrrrr!r"r(�boolrrrr%r% sI�������%�%� �I�I�I����������H�d�����rr%c �R�eZdZdZd�Zdeeeffd�Zde e fd�Z dede de eeffd�Zdeeeffd �Zd e deeeffd �Zd e deeeffd �Zddededeeeffd�Zddedeeeffd�Zddedeeeffd�Zdeeeffd�ZdS)� SafetyCheckerzSafety checking and validationc���tjd��|_tj|_|���|_|���|_ d|_ dS)Nzqudi-mcp.safetyF) �logging� getLogger�loggerr r�runlevel�_load_default_limits� safety_limits�_load_default_interlocks� interlocks�emergency_stop_active��selfs r�__init__zSafetyChecker.__init__,sT���'�(9�:�:�� � �(�� �!�6�6�8�8����7�7�9�9���%*��"�"�"r�returnc ��tddddd���tddd d d ���td d dd d���tddddd���tddddd���tddddd���tdd d!d"d#���d$�S)%z<Load default safety limits for quantum photonics experiments� laser_powergg$@�mWzLaser power limit)rrrrr � gate_voltageg�g@�VzGate voltage limits� bias_voltageg�g�?zBias voltage limits�source_currentg-C��6�g-C��6?�AzSource current limits� temperatureg{�G�z�?g�r@�KzCryostat temperature limits�magnetic_fieldg"�g"@�TzMagnetic field limits�measurement_timeg����MbP?g �@�szMaximum measurement time)r;r=r?r@rBrDrF)rr6s rr1z"SafetyChecker._load_default_limits3s�� '�'����/� ���(�(����1� ���(�(����1� ���*�*�!� ��3� ���'�'����9� ���*�*����3� ���!,�,�� ��6� !�!�!�o> �> �> rc ��tdddd���tdddd���td d d d ���td ddd ���tdddd ���gS)zLoad default safety interlocks�emergency_stop�check_emergency_stopzEmergency stop button statusT)r&r'r r(�cryostat_pressure�check_cryostat_pressurezCryostat pressure within limits� laser_shutter�check_laser_shutterz Laser safety shutter operationalF�temperature_stable�check_temperature_stablezTemperature stability check�instrument_connectivity�check_instrument_connectivityzAll instruments responding)r%r6s rr3z&SafetyChecker._load_default_interlocksvs��� �%�5�:��  � � � �(�8�=��  � � � �$�4�>��  � � � �)�9�9��  � � � �.�>�8��  � � �3 � rr�valuec �,�||jvrdd|��fS|j|}|j�,||jkr!d|�d|�d|j�d|j�d|j�� fS|j�,||jkr!d|�d|�d|j�d|j�d|j�� fSd|�d|�d|j�d�fS) z*Validate a parameter against safety limitsTzNo safety limit defined for NF� z below minimum z above maximum z within limits)r2rrr)r7rrS�limits r�validate_parameterz SafetyChecker.validate_parameter�s��� �D�.� .� .��C� �C�C�C� C��"�9�-�� �?� &�5�5�?�+B�+B��Y�j�j��j�j���j�j�E�O�j�j�^c�^h�j�j�j� j� �?� &�5�5�?�+B�+B��Y�j�j��j�j���j�j�E�O�j�j�^c�^h�j�j�j� j�� �F�F�E�F�F�E�J�F�F�F�F�Frc���d|j iggd�}|jD]�}|jtjkr|�|��}n|�|��}|d|j|j|� dd��d�|d|j <|ds-|jr&|d� |j ��d |d <��|ds |d � |j ����|S) zCheck all safety interlocks�safe)�overall_statusrIr4�critical_failures�warnings�status�messager)r]r r(r^r4r[�unsaferZr\) r5r4r0r r�_simulate_interlock�_check_real_interlockr r(�getr&�append)r7�results� interlockr]s r�check_all_interlocksz"SafetyChecker.check_all_interlocks�s ��%�"&�"<�<��!#��  � ���� ;� ;�I��}�� 0�0�0��1�1�)�<�<����3�3�I�>�>��!��*�(�4�%�.�!�:�:�i��4�4� 5�5�G�L� !�)�.� 1��(�#� ;� �(:� ;��+�,�3�3�I�N�C�C�C�,4��(�)�)��H�%� ;�� �#�*�*�9�>�:�:�:���rrec��dd|j��d�S)z)Simulate interlock check for dry-run modeTzSimulated OK - �r]r^)r �r7res rr`z!SafetyChecker._simulate_interlock�s$�� �@��)>�@�@� � � rc�H�|jdkr |j dd�Sdd|j��d�S)z<Check real interlock (placeholder for actual implementation)rIzEmergency stop clearrhTzPlaceholder check - )r&r5r ris rraz#SafetyChecker._check_real_interlock�sI�� �>�-� -� -�"&�"<�<�I_�`�`� `��E�i�.C�E�E� � � rr�target_runlevel�reasonc�Z�|j�d|jj�d|j����|tjkrB|���}|ddkrd|jjd|d�Sd|jjd|d �S||_d |jj|jjd |j��|d �S) z*Request runlevel change with safety checkszRunlevel change requested: z -> rZrYFz1Cannot enter LIVE mode - safety interlocks failed)�success�current_runlevelr^r4z@LIVE mode requires explicit human approval (not yet implemented))rnror^rlTzRunlevel changed to )rnro�previous_runlevelr^rl)r/�infor0rSr rrf)r7rkrl�interlock_resultss r�request_runlevel_changez%SafetyChecker.request_runlevel_change�s��� � ���g�t�}�7J�g�g�P_�Pe�g�g�h�h�h� �h�m� +� +� $� 9� 9� ;� ;� � �!1�2�f�<�<�$�(,� �(;�R�"3� ���!�$(�M�$7�]� � �� �(�� �� $� � 3�!%��!4�E�o�.C�E�E��  � � r�Manual triggerc��d|_tj|_|j�d|����d||jjdd�S)zActivate emergency stopTzEMERGENCY STOP ACTIVATED: r5z-All operations halted - manual reset required�r]rlr0r^)r5r rr0r/r(rS�r7rls rrIzSafetyChecker.emergency_stopsW��&*��"� �(�� � � ���B�&�B�B�C�C�C� .��� �+�F�  � � rc�l�d|_|j�d|����d||jjdd�S)z3Reset emergency stop (requires manual confirmation)FzEmergency stop reset: �emergency_stop_clearedz3Emergency stop cleared - system ready for operationrv)r5r/rqr0rSrws r�reset_emergency_stopz"SafetyChecker.reset_emergency_stopsM��&+��"� � ���:�&�:�:�;�;�;�/��� �+�L�  � � rc���|jj|jd�|j���D��|���|jt jkrdndd�S)zGet comprehensive safety statusc�L�i|]!\}}||j|j|j|jd���"S))�min�maxrr )rrrr )�.0r&rVs r� <dictcomp>z3SafetyChecker.get_safety_status.<locals>.<dictcomp>+sM����� "�d�E� � �?� �?�!�J�#(�#4� ����r�simulation_mode�hardware_check)r0r5r2r4� last_check)r0rSr5r2�itemsrfr rr6s r�get_safety_statuszSafetyChecker.get_safety_status%sw��� �+�%)�%?��� &*�%7�%=�%=�%?�%?� ����3�3�5�5�/3�}�� �/M�/M�+�+�Sc�  �  � rN)r)rt)rrrrr8rr!rr1rr%r3r#rr)rWrrfr`rar rsrIrzr�rrrr+r+)s�������(�(�+�+�+�A �d�3� �+;�&<�A �A �A �A �F" �$�y�/�" �" �" �" �HG�C�G��G�%��c� �BR�G�G�G�G� �d�3��8�n�����B �Y� �4��S��>� � � � �  �y�  �T�#�s�(�^�  �  �  �  �" �" �x�" ��" �VZ�[^�`c�[c�Vd�" �" �" �" �H � �S� ��S�#�X�� � � � �"  �  �3�  ��S�#�X��  �  �  �  � �4��S��>� � � � � � rr+)rr-�enumr�typingrrrrr� dataclassesr �pathlibr r rr%r+rrr�<module>r�sH��������������3�3�3�3�3�3�3�3�3�3�3�3�3�3�!�!�!�!�!�!������������t���� �������� ��� �������� ���L �L �L �L �L �L �L �L �L �L r

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/dirkenglund/qudi-mcp-integration'

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