
    Iۻi	                         U d Z ddlZddlZddlZddlmZ  ej                  e      Zg a	e
e   ed<   daeed<    ej                         Zdadeeef   fdZdd	Zdefd
ZdefdZy)u  Gemini API 키 라운드로빈 풀.

GEMINI_API_KEY(기본) + GEMINI_API_KEY1, GEMINI_API_KEY2, ... 순서로 수집.
호출마다 다음 키를 반환하여 rate limit 분산.

키 소스: os.environ → .env 파일 (pydantic settings가 로드하는 것과 동일)
    N)Path_keys_counterFreturnc                  .   t        t              j                         j                  j                  j                  j                  dz  } | j	                         si S i }| j                  d      j                         D ]  }|j                         }|r|j                  d      r'd|vr,|j                  d      \  }}}|j                         }|j                         j                  d      j                  d      }|j                  d      s|||<    |S )	uF   pydantic이 로드하는 .env 파일에서 GEMINI_API_KEY* 값 수집.z.envzutf-8)encoding#="'GEMINI_API_KEY)
r   __file__resolveparentexists	read_text
splitlinesstrip
startswith	partition)env_fileresultlinekey_vals         U/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_key_pool.py_load_dotenv_keysr      s     H~%%'..55<<CCfLH??	F""G"4??Azz|ts+d?nnS)Qiikiik$**3/>>*+F3K B M    c                     t         ry t        5  t         r
	 d d d        y t               } i | t        t        j
                        }|j                  dd      }|rt        j                  |       d}	 |j                  d| d      }|sn#|t        vrt        j                  |       |dz  };da t        j                  dt        t                     d d d        y # 1 sw Y   y xY w)Nr       Tz!Gemini key pool: %d key(s) loaded)_initialized_lockr   dictosenvirongetr   appendloggerinfolen)dotenvall_sourcesbase_keyiks        r   _initr2   +   s    	 

 #$444

#34 ??#3R8LL" . 4b9A~QFA  7UD1 
s   CB3CC$c                      t                t        st        d      t        t              dk(  r	t        d   S t        5  t
        t        t              z  } t
        dz  at        |    cddd       S # 1 sw Y   yxY w)u,   라운드로빈으로 다음 API 키 반환.zNo Gemini API keys configuredr"   r   N)r2   r   RuntimeErrorr,   r$   r   )idxs    r   get_next_keyr6   J   sW     
G:;;
5zQQx	U#ASz 
s   (A//A8c                  4    t                t        t              S )N)r2   r,   r    r   r   	key_countr9   X   s    	Gu:r   )r   N)__doc__loggingr&   	threadingpathlibr   	getLogger__name__r*   r   liststr__annotations__r   intLockr$   r#   r%   r   r2   r6   r9   r8   r   r   <module>rE      s     	  			8	$tCy # 	4S> *E>c 3 r   