o
    "i                     @   s   d Z ddlmZm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mZmZ G dd dee	eef ZG d	d
 d
ee
eef Zee	Zee
ZdS )z5
CRUD operations for ModelProvider and Model models.
    )OptionalList)Session)CRUDBase)ModelProviderModel)ProviderCreateProviderUpdateModelCreateModelUpdatec                
   @   s   e Zd ZdZdddededee dee fdd	Z	ded
edee fddZ
dddededee dee fddZddddedededee fddZdS )CRUDModelProviderz2
    CRUD operations for ModelProvider model.
    N)	tenant_iddbnamer   returnc                C   @   | ttj|k}|durttdr|tj|k}| S )z
        Get model provider by name.

        Args:
            db: Database session
            name: Provider name
            tenant_id: Optional tenant ID for filtering

        Returns:
            ModelProvider instance or None
        Nr   )queryr   filterr   hasattrr   first)selfr   r   r   r    r   9/lsinfo/ai/hellotax_ai/base_platform/app/crud/provider.pyget_by_name      zCRUDModelProvider.get_by_nameidc                C      | j ||dS z5Alias for delete() method for backward compatibility.)r   )delete)r   r   r   r   r   r   remove$      zCRUDModelProvider.removecodec                C   r   )z
        Get model provider by code.

        Args:
            db: Database session
            code: Provider code
            tenant_id: Optional tenant ID for filtering

        Returns:
            ModelProvider instance or None
        Nr   )r   r   r   r!   r   r   r   )r   r   r!   r   r   r   r   r   get_by_code(   r   zCRUDModelProvider.get_by_coder   d   skiplimitr%   r&   c                C   s&   | ttjdk|| S )a  
        Get all active model providers.

        Args:
            db: Database session
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of active provider instances
        T)r   r   r   	is_activeoffsetr&   all)r   r   r%   r&   r   r   r   get_active_providers;   s
   
z&CRUDModelProvider.get_active_providers)__name__
__module____qualname____doc__r   strr   intr   r   r   r"   r   r*   r   r   r   r   r      s     ((r   c                   @   s   e Zd ZdZdddededee dee fdd	Z	ded
edee
 fddZdededee fddZddddededededee f
ddZddddededededee f
ddZdddddedee dededee f
ddZdS )	CRUDModelz*
    CRUD operations for Model model.
    N)provider_idr   r   r2   r   c                C   s   dS )z
        Get model by name.

        Args:
            db: Database session
            name: Model name
            provider_id: Optional provider ID to filter by

        Returns:
            Model instance or None
        Nr   )r   r   r   r2   r   r   r   r   W   s    zCRUDModel.get_by_namer   c                C   r   r   )r   r   r   r   r   r2   r   )r   r   r   r   r   r   r   r   i   r    zCRUDModel.remover!   c                C   s   | ttj|k S )z
        Get model by code.

        Args:
            db: Database session
            code: Model code

        Returns:
            Model instance or None
        )r   r   r   r!   r   )r   r   r!   r   r   r   r"   t   s   zCRUDModel.get_by_coder   r#   r$   r%   r&   c                C   &   | ttj|k|| S )a  
        Get models by provider.

        Args:
            db: Database session
            provider_id: Provider ID
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of model instances
        )r   r   r   r2   r(   r&   r)   )r   r   r2   r%   r&   r   r   r   get_by_provider   
   
zCRUDModel.get_by_provider
model_typec                C   r3   )a-  
        Get models by type.

        Args:
            db: Database session
            model_type: Model type (e.g., 'chat', 'embedding')
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of model instances
        )r   r   r   typer(   r&   r)   )r   r   r6   r%   r&   r   r   r   get_by_type   r5   zCRUDModel.get_by_type)r2   r%   r&   c                C   s>   | ttjdk}|r|tj|k}||| S )a/  
        Get active models.

        Args:
            db: Database session
            provider_id: Optional provider ID to filter by
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of active model instances
        T)r   r   r   r'   r2   r(   r&   r)   )r   r   r2   r%   r&   r   r   r   r   get_active_models   s   zCRUDModel.get_active_models)r+   r,   r-   r.   r   r/   r   r0   r   r   r   r   r"   r   r4   r8   r9   r   r   r   r   r1   R   sl    	


r1   N)r.   typingr   r   sqlalchemy.ormr   app.crud.baser   app.models.providerr   r   app.schemas.providerr   r	   r
   r   r   r1   providermodelr   r   r   r   <module>   s    F|