o
    邾h                     @   s   d dl mZ d dlmZ d dlmZmZ d dlZd dlZd dl	m
Z
 d dlmZ e
dd ed	Zed
ZedZejdeeeddZejed G dd dejZG dd dejZG dd deZG dd deZdS )    )Type)BaseTool)	BaseModelFieldN)load_dotenv)LabeledFewShotz7/home/azureuser/microlearn/backend/prompt_opt_dspy/.env)dotenv_pathAZURE_API_KEYAZURE_API_HOSTAZURE_API_VERSIONzazure/Csqr-gpt-4o-minig        )api_keyapi_baseapi_versiontemperature)lmc                   @   s6   e Zd ZU dZe Zeed< ej	ddZ
eed< dS )TopicValidationSignatureu  
    You are a smart validator that checks if a given input represents a meaningful, real-world topic suitable for research, learning, or exploration in fields like science, technology, business, or education.

    A valid topic should:
    - Be widely recognized or commonly discussed 
    - Contain meaningful words (not just random characters or test strings)
    - Be at least 2–3 characters long

    An invalid topic is:
    - Nonsensical 
    - Too short or made-up without real context

    Output format:
        Based on this, evaluate the input and respond eiter:
        "Valid Topic" or "Invalid Topic" only. 
        Should not include any other comments.
    Input:
    - topic: {topic}
    
    topicz'Either 'Valid Topic' or 'Invalid Topic')descvalid_topicN)__name__
__module____qualname____doc__dspy
InputFieldr   str__annotations__OutputFieldr    r   r   /home/azureuser/microlearn/backend/user_journey_with_openai/agentic_workflow/src/user_journey_service/tools/custom_topic_validator_tool.pyr      s   
 r   c                       s*   e Zd Z fddZdefddZ  ZS )TopicValidationModulec                    s   t    tt| _tjddddtjddddtjddddtjddddg}dd	d
}tj|d}|j	| j|d| _
d S )NzArtificial IntelligenceValid Topic)r   r   r   
qwertyuiopInvalid TopiczClimate Changeasdfc                 S   s   t |dd }t|dv S )N
validation )r!   r#   )getattrstripint)goldpredtraceoutputr   r   r   validation_metricL   s   z9TopicValidationModule.__init__.<locals>.validation_metric)metric)studenttrainset)N)super__init__r   Predictr   	predictorExamplewith_inputsBootstrapFewShotcompileoptimized_predictor)selfr1   r.   	optimizer	__class__r   r   r3   7   s   

zTopicValidationModule.__init__r   c                 C   s   | j |dS N)r   )r:   )r;   r   r   r   r   forwardV   s   zTopicValidationModule.forward)r   r   r   r3   r   r@   __classcell__r   r   r=   r   r    6   s    r    c                   @   s&   e Zd ZU dZedddZeed< dS )TopicValidationInputz%Input schema for TopicValidationTool..zThe topic string to validate)descriptionr   N)r   r   r   r   r   r   r   r   r   r   r   r   rB   [   s   
 rB   c                   @   sH   e Zd ZU dZeed< dZeed< eZe	e
 ed< dedefdd	Zd
S )TopicValidationToolzTopic Validation ToolnamezSValidates if a given topic is meaningful. Returns 'Valid Topic' or 'Invalid Topic'.rC   args_schemar   returnc                 C   s   t  }|j|d}|jS r?   )r    r@   r   )r;   r   	validatorresultr   r   r   _runh   s   zTopicValidationTool._runN)r   r   r   rE   r   r   rC   rB   rF   r   r   rJ   r   r   r   r   rD   a   s   
 
rD   )typingr   crewai.toolsr   pydanticr   r   r   osdotenvr   dspy.telepromptr   getenvazure_api_keyazure_api_hostazure_api_versionLMr   	configure	Signaturer   Moduler    rB   rD   r   r   r   r   <module>   s.    



%