
    i
                    h    S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
JrJr  Sr " S S	5      rg)
    )annotationsN)cast)Prompt)InvalidPromptErrorPromptNotFoundError)DEFAULT_VERSIONPromptModelzCredis is not installed. Please install it with `pip install redis`.c                  b    \ rS rSrSr  S     SS jjrSS jrSS.SS jjrSS	.SS
 jjrSr	g)RedisPromptRegistry   z/A prompt registry that stores prompts in Redis.c                     SSK nUR                  USS9U l        X l        g! [         a  n[        [        5      UeSnAff = f)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        P/home/james-whalen/.local/lib/python3.13/site-packages/banks/registries/redis.py__init__RedisPromptRegistry.__init__   sE    	8 nnYnF	  	8/0a7	8s   " 
A<Ac                (    U R                    U SU 3$ )zCreate Redis key for a prompt.:)r   )r   nameversions      r   	_make_keyRedisPromptRegistry._make_key$   s    ,,vQwi00    N)r   c                  U=(       d    [         nU R                  X5      nU R                  R                  U5      nU(       d  SU SU S3n[	        U5      e[
        R                  " [        [        U5      5      n[        S0 UD6$ )z
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&   RedisPromptRegistry.get(   ss     ,_nnT+{{s#24&yPQRC%c**jjc41$$$r"   F)	overwritec                  UR                   =(       d    [        nU R                  UR                  U5      nU R                  R                  U5      (       a"  U(       d  SUR                   S3n[        U5      e[        R                  " U5      nUR                  5       nU R                  R                  U[        R                  " U5      5        g)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   r4   RedisPromptRegistry.setA   s     ..3OnnV[['2 ;;c""9&v{{m3deC$S)) #..v6"--/ 	TZZ45r"   )r   r   )zredis://localhost:6379zbanks:prompt:)r   r)   r   r)   returnNone)r   r)   r   r)   r9   r)   )r   r)   r   z
str | Noner9   r   )r6   r   r/   boolr9   r:   )
__name__
__module____qualname____firstlineno____doc__r   r    r&   r4   __static_attributes__r%   r"   r   r   r      sL    9 2%  
	(1 7; %2 8= 6 6r"   r   )
__future__r   r'   typingr   banksr   banks.errorsr   r   banks.promptr   r	   r   r   r%   r"   r   <module>rG      s)    "    @ 5Y L6 L6r"   