Skip to main content
Glama

qudi MCP Integration

by dirkenglund
safety_tools.cpython-311.pyc9.76 kB
� �+�h���P�dZddlZddlmZmZmZmZddlmZGd�d��Z dS)z� Safety and system control tools for qudi MCP integration Handles safety interlocks, emergency controls, and system monitoring for quantum photonics experiments. �N)�Dict�List�Any�Optional�)�RunLevelc��eZdZdZd�Zdedeeefdeeeffd�Zdeeefdeeeffd�Z deeefdeeeffd �Z deeefdeeeffd �Z deeefdeeeffd �Z deeefdeeeffd �Z deeefdeeeffd �Zdeeefdeeeffd�Zdefd�ZdS)� SafetyToolsz"Safety and emergency control toolsc�F�||_tjd��|_dS)Nzqudi-mcp.safety)�server�logging� getLogger�logger)�selfr s �Z/Users/englund/Projects/QPG-MIT/qudi-iqo-modules-QPG/mcp_integration/tools/safety_tools.py�__init__zSafetyTools.__init__s ���� ��'�(9�:�:�� � � ��name� arguments�returnc��K�|j|j|j|j|j|j|jd�}||vrdd|��iS|||���d{V��S)zRoute safety tool calls)zsafety.check_interlockszsafety.set_runlevelzsafety.get_statuszsafety.validate_parameterzsystem.emergency_stopzsystem.reset_emergencyzsystem.get_limits�errorzUnknown safety tool: N)�_check_interlocks� _set_runlevel�_get_safety_status�_validate_parameter�_emergency_stop�_reset_emergency� _get_limits)rrr�tool_maps r� handle_toolzSafetyTools.handle_tools�����(,�'=�#'�#5�!%�!8�)-�)A�%)�%9�&*�&;�!%�!1� � �� �x� � ��;�T�;�;�<� <�#�X�d�^�I�.�.�.�.�.�.�.�.�.r�argsc���K�|j�d��|jj���}d|jjj||���d|d��d�S)zCheck all safety interlockszChecking safety interlocks�successzInterlock check completed - �overall_status)�status�runlevel� interlocks� timestamp�message)r�infor �safety_checker�check_all_interlocksr'�value�_get_timestamp)rr"�interlock_resultss rrzSafetyTools._check_interlocks&sy���� � ���5�6�6�6� �K�6�K�K�M�M�� �� �,�2�+��,�,�.�.�[�6G�HX�6Y�[�[�  � � rc��K�|�d��}|�dd��}|sddiS t|��}n#t$r dd|�d�icYSwxYw|j�d|jjj�d |����|jj� ||��}|d r ||j_|d rd nd |jjj|jjj||d |� ��d �S)z&Set system runlevel with safety checksr'�reasonz User requestrzrunlevel is requiredzInvalid runlevel: z#. Valid options: dry-run, sim, livezRunlevel change requested: z -> r$�failedr*)r&�previous_runlevel�current_runlevelr2r*r)) �getr� ValueErrorrr+r r'r.r,�request_runlevel_changer/)rr"�target_runlevelr2� target_enum�results rrzSafetyTools._set_runlevel5sI�����(�(�:�.�.�����(�N�3�3��� 5��3�4� 4� h�"�?�3�3�K�K��� h� h� h��f�/�f�f�f�g� g� g� g� h���� � ���h�t�{�7K�7Q�h�h�Wf�h�h�i�i�i���+�C�C�K�QW�X�X�� �)� � /�#.�D�K� �$*�)�#4�B�i�i�(�!%��!5�!;� $� � 4� :���i�(��,�,�.�.�  � � s�A�A�Ac��nK�d|jj���|���d�S)zGet comprehensive safety statusr$)r&� safety_statusr))r r,�get_safety_statusr/)rr"s rrzSafetyTools._get_safety_statusTs=���� �!�[�7�I�I�K�K��,�,�.�.� � � rc��DK�|�d��}|�d��}|�|�ddiS t|��}n#ttf$r dd|��icYSwxYw|jj�||��\}}d|||||���d�S) z0Validate a parameter value against safety limits� parameterr.Nrz parameter and value are requiredzValue must be numeric, got: r$)r&r@r.�is_safer*r))r6�floatr7� TypeErrorr r,�validate_parameterr/)rr"r@r.rAr*s rrzSafetyTools._validate_parameter]s������H�H�[�)�)� �����!�!�� � �� ��?�@� @� E��%�L�L�E�E���I�&� E� E� E��C�E�C�C�D� D� D� D� E���� �;�5�H�H��TY�Z�Z���� �"�����,�,�.�.�  � � s�A�A!� A!c���K�|�dd��}|j�d|����|jj�|��}t j|j_g}|jj � ��D]+\}}|ddkrd|d<|� |���,d|||jjj |d|� ��d �S) zActivate emergency stopr2zManual emergency stop via MCPzEmergency stop activated: r&�running�emergency_stopped�emergency_stop_activatedr*)r&r2�stopped_measurementsr'r*r))r6r�criticalr r,�emergency_stopr�DRY_RUNr'�measurement_state�items�appendr.r/)rr"r2r;rI�measurement_id�states rrzSafetyTools._emergency_stopvs��������(�$C�D�D�� � ���B�&�B�B�C�C�C���+�:�:�6�B�B�� (�/�� �� "��%)�[�%B�%H�%H�%J�%J� <� <� !�N�E��X��)�+�+�"5��h��$�+�+�N�;�;�;��1��$8�� �,�2��i�(��,�,�.�.�  � � rc��DK�|�dd��}|�dd��}|sdddd�S|j�d |����|jj�|��}d ||jjj|d |���d �S) z,Reset emergency stop (requires confirmation)r2zManual reset via MCP�confirmFz3Emergency stop reset requires explicit confirmationz)Set 'confirm': true to proceed with reset�emergency_stop_active)rr*�current_statuszEmergency stop reset: �emergency_stop_resetr*)r&r2r'r*r)) r6rr+r r,�reset_emergency_stopr'r.r/)rr"r2rSr;s rrzSafetyTools._reset_emergency�s��������(�$:�;�;���(�(�9�e�,�,��� �N�F�"9��� � � ���:�&�:�:�;�;�;���+�@�@��H�H��-��� �,�2��i�(��,�,�.�.�  � � rc��K�|�d��}|rP||jjjvr6|jjj|}d||j|j|j|jd�d�Sdd|��iSi}|jjj���D]#\}}|j|j|j|jd�||<�$d|t|��d�S)z,Get all safety limits and their descriptionsr@r$)� min_value� max_value�unit� description)r&r@�limitrz'No safety limit defined for parameter: )r&�limits�total_parameters) r6r r,� safety_limitsrYrZr[r\rN�len)rr"r@r]r^rs rrzSafetyTools._get_limits�s�����H�H�[�)�)� � � ��D�K�6�D�D�D�� �2�@��K��'�!*�%*�_�%*�_� %� �',�'8� �� � � � �!V�9�!V�!V�W�W��F�#�{�9�G�M�M�O�O� � � ��e�!&��!&��!�J�#(�#4�  � ��t� � �$� �$'��K�K��� rc�Z�ddlm}|������S)z#Get current timestamp in ISO formatr)�datetime)rc�now� isoformat)rrcs rr/zSafetyTools._get_timestamp�s.��%�%�%�%�%�%��|�|�~�~�'�'�)�)�)rN)�__name__� __module__� __qualname__�__doc__r�strrrr!rrrrrrrr/�rrr r s�������,�,�;�;�;�/�c�/�d�3��8�n�/��c�SV�h��/�/�/�/�$  �D��c��N�  �t�C��H�~�  �  �  �  � ��S�#�X�� �4��S��>� � � � �> �T�#�s�(�^� ��S�#�X�� � � � � �d�3��8�n� ��c�3�h�� � � � �2 �$�s�C�x�.� �T�#�s�(�^� � � � �8 �4��S��>� �d�3��8�n� � � � �2$�d�3��8�n�$��c�3�h��$�$�$�$�L*��*�*�*�*�*�*rr ) rir �typingrrrr�safetyrr rkrr�<module>rns���������,�,�,�,�,�,�,�,�,�,�,�,�������G*�G*�G*�G*�G*�G*�G*�G*�G*�G*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