
    >'h
                    h    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	      Zy)
    )annotationsN)cast)Prompt)InvalidPromptErrorPromptNotFoundError)DEFAULT_VERSIONPromptModelzCredis is not installed. Please install it with `pip install redis`.c                  L    e Zd ZdZ	 	 d
	 	 	 	 	 ddZddZddddZdddd	Zy)RedisPromptRegistryz/A prompt registry that stores prompts in Redis.c                    	 ddl }|j                  |d      | _        || _        y# t        $ r}t        t              |d}~ww xY w)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)self	redis_urlprefixr   es        ]/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/banks/registries/redis.py__init__zRedisPromptRegistry.__init__   sG    	8 nnYnF	  	8/0a7	8s   & 	A?Ac                (    | j                    | d| S )zCreate Redis key for a prompt.:)r   )r   nameversions      r   	_make_keyzRedisPromptRegistry._make_key$   s    ,,vQwi00    N)r   c                   |xs t         }| j                  ||      }| j                  j                  |      }|sd| d| d}t	        |      t        j                  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 '' )
r   r   r   getr   jsonloadsr   strr   )r   r   r   keydatamsgprompt_datas          r   r#   zRedisPromptRegistry.get(   su     ,_nnT7+{{s#24&yPQRC%c**jjc41$$$r   F)	overwritec               |   |j                   xs t        }| j                  |j                  |      }| j                  j                  |      r|sd|j                   d}t        |      t        j                  |      }|j                         }| j                  j                  |t        j                  |             y)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   promptr+   r   r'   r)   prompt_modelr*   s           r   r0   zRedisPromptRegistry.setA   s     ..3OnnV[['2 ;;c"9&v{{m3deC$S)) #..v6"--/ 	TZZ45r   )zredis://localhost:6379zbanks:prompt:)r   r&   r   r&   returnNone)r   r&   r   r&   r4   r&   )r   r&   r   z
str | Noner4   r   )r2   r   r+   boolr4   r5   )__name__
__module____qualname____doc__r   r   r#   r0   r"   r   r   r   r      sG    9 2%  
	(1 7; %2 8= 6r   r   )
__future__r   r$   typingr   banksr   banks.errorsr   r   banks.promptr   r	   r   r   r"   r   r   <module>r@      s)    "    @ 5Y L6 L6r   