o
    @Tj
                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	m
Z
 e eZee
jddZeeddZd	eedf fd
dZedddd Zdd Zedddd Zdd Zdd Zdd Zedddd ZdS )    N)AsyncGenerator)	lru_cache)AsyncSessionasync_sessionmakercreate_async_engine)settingsF)echo)expire_on_commitreturnc               	   C  sH   t  4 I d H } | V  W d   I d H  d S 1 I d H sw   Y  d S )N)async_session_factory)session r   0/home/ubuntu/htdocs/ootd-api/app/dependencies.pyget_db   s   .r      )maxsizec                  C      ddl m}  td |  S )z;Singleton FaceAnalyzer instance (heavy model load, cached).r   FaceAnalyzerz*Loading FaceAnalyzer model (first call)...)app.utils.face_analyzerr   loggerinfor   r   r   r   get_face_analyzer      
r   c                  C   s   ddl m}  | t dS )z/Create FaceService with the singleton analyzer.r   FaceService)analyzer)app.services.face_servicer   r   r   r   r   r   get_face_service   s   r   c                  C   sJ   t j } | dkrddlm} td | S ddlm} td | S )z5Singleton LLM provider based on LLM_PROVIDER env var.openair   )OpenAIProviderzUsing OpenAI LLM provider)GeminiProviderzUsing Gemini LLM provider)	r   LLM_PROVIDERlowerapp.services.llm.openair    r   r   app.services.llm.geminir!   )provider_namer    r!   r   r   r   get_llm_provider$   s   


r'   c                  C   s   ddl m}  | t t dS )zECreate GarmentService with the singleton LLM provider + segmentation.r   GarmentService)llm_providersegmentation_service)app.services.garment_servicer)   r'   get_segmentation_servicer(   r   r   r   get_garment_service2   s
   r.   c                  C   s   ddl m}  |  S )zCreate WardrobeService.r   WardrobeService)app.services.wardrobe_servicer0   r/   r   r   r   get_wardrobe_service<   s   r2   c                  C   s    ddl m}  | t t t dS )zRCreate VtonService with the singleton LLM provider + face analyzer + segmentation.r   VtonService)r*   face_analyzerr+   )app.services.vton_servicer4   r'   r   r-   r3   r   r   r   get_vton_serviceC   s   r7   c                  C   r   )z9Singleton SegmentationService (heavy model load, cached).r   SegmentationServicez1Loading SegmentationService model (first call)...)!app.services.segmentation_servicer9   r   r   r8   r   r   r   r-   N   r   r-   )loggingcollections.abcr   	functoolsr   sqlalchemy.ext.asyncior   r   r   
app.configr   	getLogger__name__r   DATABASE_URLenginer   r   r   r   r'   r.   r2   r7   r-   r   r   r   r   <module>   s&    



