o
    |!g
                     @  sb   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ dZG dd	 d	ZdS )
    )annotationsN)cast)Prompt)InvalidPromptErrorPromptNotFoundError)DEFAULT_VERSIONPromptModelzCredis is not installed. Please install it with `pip install redis`.c                   @  sJ   e Zd ZdZ		ddd	d
ZdddZdddddZddd ddZdS )!RedisPromptRegistryz/A prompt registry that stores prompts in Redis.redis://localhost:6379banks:prompt:	redis_urlstrprefixreturnNonec              
   C  sJ   zddl }W n ty } ztt|d}~ww |j|dd| _|| _dS )z
        Initialize the Redis prompt registry.

        Parameters:
            redis_url: Redis connection URL
            prefix: Key prefix for storing prompts in Redis
        r   NT)decode_responses)redisImportErrorREDIS_INSTALL_MSGfrom_url_redis_prefix)selfr   r   r   e r   X/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/banks/registries/redis.py__init__   s   

zRedisPromptRegistry.__init__nameversionc                 C  s   | j  | d| S )zCreate Redis key for a prompt.:)r   )r   r   r   r   r   r   	_make_key$   s   zRedisPromptRegistry._make_keyN)r   
str | Noner   c                C  s\   |pt }| ||}| j|}|sd| d| d}t|ttt|}t	di |S )a  
        Get a prompt by name and version.

        Parameters:
            name: Name of the prompt
            version: Version of the prompt (optional)

        Returns:
            Prompt instance

        Raises:
            PromptNotFoundError: If prompt doesn't exist
        zCannot find prompt with name 'z' and version ''Nr   )
r   r    r   getr   jsonloadsr   r   r   )r   r   r   keydatamsgprompt_datar   r   r   r#   (   s   zRedisPromptRegistry.getF)	overwritepromptr*   boolc                C  sh   |j pt}| |j|}| j|r|sd|j d}t|t|}|	 }| j
|t| dS )z
        Store a prompt in Redis.

        Parameters:
            prompt: Prompt instance to store
            overwrite: Whether to overwrite existing prompt

        Raises:
            InvalidPromptError: If prompt exists and overwrite=False
        zPrompt with name 'z1' already exists. Use overwrite=True to overwriteN)r   r   r    r   r   existsr   r   from_prompt
model_dumpsetr$   dumps)r   r+   r*   r   r&   r(   prompt_modelr)   r   r   r   r0   A   s   

zRedisPromptRegistry.set)r
   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r!   r   r   )r+   r   r*   r,   r   r   )__name__
__module____qualname____doc__r   r    r#   r0   r   r   r   r   r	      s    
r	   )
__future__r   r$   typingr   banksr   banks.errorsr   r   banks.promptr   r   r   r	   r   r   r   r   <module>   s    