o
    d6i                     @   s  d Z ddl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 ddlmZ ddlmZ dd	lmZmZ eeZe  G d
d dZG dd deZdedefddZeddZeddZedeeddZeeZeeddZeeed e dedZdS )a%  
Agent configuration and model setup for Karishye AI.

This module contains:
- Model configuration classes
- AI model initialization (Gemini/OpenAI)
- Agent definitions (general_agent for internal use, karishye_agent for user interaction)
- ChatContext class for passing dependencies to tools
    N)load_dotenv)Optional)	BaseModel	validator)Agent)OpenAIChatModel)OpenAIProvider)SYSTEM_PROMPTKARISHYE_AGENT_TOOL_INFO_PROMPTc                	   @   s,   e Zd ZdZd	dedededefddZdS )
ChatContexta  
    Context for passing dependencies to agent tools.
    
    Attributes:
        user_id: User identifier
        session_id: Session identifier
        phone_number: Pre-collected phone number from WhatsApp
        user_name: Pre-collected user name from WhatsApp
    Nuser_id
session_idphone_number	user_namec                 C   s   || _ || _|| _|| _d S )N)r   r   r   r   )selfr   r   r   r    r   5/var/www/html/karishye-ai-python/app/agents/agents.py__init__)   s   
zChatContext.__init__)NN)__name__
__module____qualname____doc__strr   r   r   r   r   r      s     	r   c                   @   sB   e Zd ZU dZeed< eed< dZee ed< eddd Z	dS )ModelConfigz%Configuration for AI model providers.
model_namebase_urlNapi_keyc                 C   s   |st d|S )Nzbase_url must not be empty)
ValueError)clsvr   r   r   base_url_must_not_be_empty:   s   z&ModelConfig.base_url_must_not_be_empty)
r   r   r   r   r   __annotations__r   r   r   r    r   r   r   r   r   3   s   
 r   configreturnc                 C   s:   d| j i}| jr| j|d< tdi |}t| j|d}|S )z-Create an OpenAIChatModel from configuration.r   r   )r   providerNr   )r   r   r   r   r   )r"   provider_kwargsr$   modelr   r   r   _create_modelA   s   

r'   OPENAI_API_KEY OPENAI_API_BASE_URLzhttps://api.openai.com/v1zgpt-4o-miniT)r   r   r   streamzkarishye-bot)r&   namez

zkarishye-agent)r&   system_promptr,   	deps_type) r   osloggingdotenvr   typingr   pydanticr   r   pydantic_air   pydantic_ai.models.openair   pydantic_ai.providers.openair   app.system_promptsr	   r
   	getLoggerr   loggerr   r   r'   getenvr(   OPENAI_API_BASEmodel_configr&   general_agentkarishye_agentr   r   r   r   <module>   sD    

	

