Skip to main content
Glama

qudi MCP Integration

by dirkenglund
safety.cpython-313.pyc11.1 kB
� `+�hH,���SrSSKrSSKJr SSKJrJrJrJrJ r SSK J r SSK J r "SS\5r\ "S S 55r\ "S S 55r"S S5rg)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�$�\rSrSrSrSrSrSrSrg)�RunLevel�zSystem run levels for safetyzdry-run�sim�live�N) �__name__� __module__� __qualname__�__firstlineno__�__doc__�DRY_RUN�SIM�LIVE�__static_attributes__r��N/Users/englund/Projects/QPG-MIT/qudi-iqo-modules-QPG/mcp_integration/safety.pyr r s��&��G� �C� �Drr c�h�\rSrSr%Sr\\S'Sr\\ \S'Sr \\ \S'Sr \\S'Sr \\S 'S r g) � SafetyLimit�zSafety limit definition� parameterN� min_value� max_value��unit� descriptionr)rrrrr�str�__annotations__r r�floatr!r#r$rrrrrrs9��!��N�!%�I�x���%�!%�I�x���%��D�#�N��K��rrc�F�\rSrSr%Sr\\S'\\S'\\S'Sr\\S'Sr g ) � InterLock� zSafety interlock definition�name�check_functionr$F�criticalrN) rrrrrr%r&r-�boolrrrrr)r) s ��%� �I������H�d�rr)c �6�\rSrSrSrSrS\\\44Sjr S\ \ 4Sjr S\S\ S\\\44S jrS\\\44S jrS \ S\\\44S jrS \ S\\\44S jrSS\S\S\\\44SjjrSS\S\\\44SjjrSS\S\\\44SjjrS\\\44SjrSrg)� SafetyChecker�)zSafety checking and validationc���[R"S5Ul[RUlUR 5UlUR5Ul SUl g)Nzqudi-mcp.safetyF) �logging� getLogger�loggerr r�runlevel�_load_default_limits� safety_limits�_load_default_interlocks� interlocks�emergency_stop_active��selfs r�__init__�SafetyChecker.__init__,sK���'�'�(9�:�� � �(�(�� �!�6�6�8����7�7�9���%*��"r�returnc��[SSSSSS9[SSS S S S9[S S SS SS9[SSSSSS9[SSSSSS9[SSSSSS9[SS S!S"S#S9S$.$)%z<Load default safety limits for quantum photonics experiments� laser_powergg$@�mWzLaser power limit)rr r!r#r$� 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)rBrDrFrGrIrKrM)rr<s rr7�"SafetyChecker._load_default_limits3s��� '�'����/� �(�(����1� �(�(����1� �*�*�!� ��3� �'�'����9� �*�*����3� �!,�,�� ��6� !�o> �> rc �t�[SSSSS9[SSSSS9[S S S S S9[S SSS S9[SSSS S9/$)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)r<s rr9�&SafetyChecker._load_default_interlocksvsz�� �%�5�:��  � �(�8�=��  � �$�4�>��  � �)�9�9��  � �.�>�8��  �3 � rr�valuec ��XR;aSSU34$URUnURb?X#R:a0SUSUSURSURSUR3 4$URb?X#R:�a0SUSUSURSURSUR3 4$SUSUSURS34$)z*Validate a parameter against safety limitsTzNo safety limit defined for F� z below minimum z above maximum z within limits)r8r r#r!)r=rr\�limits r�validate_parameter� SafetyChecker.validate_parameter�s��� �.�.� .��7� �{�C�C� C��"�"�9�-�� �?�?� &�5�?�?�+B��Y�K�q���q���� �O�E�O�O�K\�\]�^c�^h�^h�]i�j�j� j� �?�?� &�5�?�?�+B��Y�K�q���q���� �O�E�O�O�K\�\]�^c�^h�^h�]i�j�j� j�� �{�!�E�7�!�E�J�J�<�~�F�F�Frc�,�SUR(+0//S.nURH�nUR[R:XaUR U5nOUR U5nUSURURURSS5S.USUR'US(d6UR(a%USRUR5 S US 'M�US(aM�US RUR5 M� U$) zCheck all safety interlocks�safe)�overall_statusrQr:�critical_failures�warnings�status�messager")rgr$r-rhr:re�unsaferdrf) r;r:r6r r�_simulate_interlock�_check_real_interlockr$r-�getr+�append)r=�results� interlockrgs r�check_all_interlocks�"SafetyChecker.check_all_interlocks�s��%�"&�"<�"<�<��!#��  �����I��}�}�� 0� 0�0��1�1�)�<���3�3�I�>��!��*�(�4�4�%�.�.�!�:�:�i��4� 5�G�L� !�)�.�.� 1��(�#� �(:�(:��+�,�3�3�I�N�N�C�,4��(�)��H�%�%�� �#�*�*�9�>�>�:�%)�(�rroc�&�SSUR3S.$)z)Simulate interlock check for dry-run modeTzSimulated OK - �rgrh)r$�r=ros rrj�!SafetyChecker._simulate_interlock�s"�� �(��)>�)>�(?�@� � rc�n�URS:XaUR(+SS.$SSUR3S.$)z<Check real interlock (placeholder for actual implementation)rQzEmergency stop clearrsTzPlaceholder check - )r+r;r$rts rrk�#SafetyChecker._check_real_interlock�sF�� �>�>�-� -�"&�"<�"<�<�I_�`� `��-�i�.C�.C�-D�E� � r�target_runlevel�reasonc���URRSURRSUR35 U[R :XaOUR 5nUSS:waSURRSUS.$SURRSUS .$XlS URRURRS UR3US .$) z*Request runlevel change with safety checkszRunlevel change requested: z -> rdrcFz1Cannot enter LIVE mode - safety interlocks failed)�success�current_runlevelrhr:z@LIVE mode requires explicit human approval (not yet implemented))r{r|rhryTzRunlevel changed to )r{r|�previous_runlevelrhry)r5�infor6r\r rrp)r=rxry�interlock_resultss r�request_runlevel_change�%SafetyChecker.request_runlevel_change�s��� � � ���6�t�}�}�7J�7J�6K�4�P_�Pe�Pe�Of�g�h� �h�m�m� +� $� 9� 9� ;� � �!1�2�f�<�$�(,� � �(;�(;�R�"3� ��!�$(�M�M�$7�$7�]� � � �(� �� $� � � 3� 3�!%���!4�!4�-�o�.C�.C�-D�E��  � rc��SUl[RUlURR SU35 SUURR SS.$)zActivate emergency stopTzEMERGENCY STOP ACTIVATED: r;z-All operations halted - manual reset required�rgryr6rh)r;r rr6r5r-r\�r=rys rrQ�SafetyChecker.emergency_stopsU��&*��"� �(�(�� � � � ���9�&��B�C� .��� � �+�+�F�  � rc��SUlURRSU35 SUURRSS.$)z3Reset emergency stop (requires manual confirmation)FzEmergency stop reset: �emergency_stop_clearedz3Emergency stop cleared - system ready for operationr�)r;r5r~r6r\r�s r�reset_emergency_stop�"SafetyChecker.reset_emergency_stopsH��&+��"� � � ���1�&��:�;�/��� � �+�+�L�  � rc �p�URRURURR 5VVs0sH5upUUR UR URURS._M7 snnUR5UR[R:waSS.$SS.$s snnf)zGet comprehensive safety status)�min�maxr#r$�simulation_mode�hardware_check)r6r;r8r:� last_check) r6r\r;r8�itemsr r!r#r$rpr r)r=r+r_s r�get_safety_status�SafetyChecker.get_safety_status%s���� � �+�+�%)�%?�%?�&*�%7�%7�%=�%=�%?� � &@�k�d� � �?�?� �?�?�!�J�J�#(�#4�#4� �� &@� ��3�3�5�/3�}�}�� � �/M�+�  � �Td�  � ��s�<B2 )r;r:r5r6r8N)r")zManual trigger)rrrrrr>rr%rr7rr)r9r'rr.r`rrprjrkr r�rQr�r�rrrrr0r0)s��(�+�A �d�3� �+;�&<�A �F" �$�y�/�" �HG�C�G��G�%��c� �BR�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��>� rr0)rr3�enumr�typingrrrrr� dataclassesr �pathlibr r rr)r0rrr�<module>r�sh�����3�3�!���t�� ��� �� ��� ��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