from fi.prompt.client import PromptClient
from fi.prompt.types import ModelConfig, PromptTemplate, SystemMessage, UserMessage

def create_basic_prompt():
    """Case 1: Create a simple prompt with no variables"""
    template = PromptTemplate(
        name="basic_template",
        messages=[
            SystemMessage(content="You are a helpful assistant."),
            UserMessage(content="Tell me about artificial intelligence.")
        ],
        model_configuration=ModelConfig(
            model_name="gpt-4",
            temperature=0.7,
            max_tokens=1000,
            top_p=0.95,
            frequency_penalty=0,
            presence_penalty=0,
        )
    )
    
    client = PromptClient(template=template)
    return client.create()

def create_single_variable_prompt():
    """Case 2: Create a prompt with a single variable"""
    template = PromptTemplate(
        name="single_var_template",
        messages=[
            SystemMessage(content="You are a geography expert."),
            UserMessage(content="What is the capital of {country}?")
        ],
        model_configuration=ModelConfig(
            model_name="gpt-4",
            temperature=0.5
        )
    )
    
    client = PromptClient(template=template)
    return client.create()

def create_multiple_variables_prompt():
    """Case 3: Create a prompt with multiple variables"""
    template = PromptTemplate(
        name="multi_var_template",
        messages=[
            SystemMessage(content="You are a travel guide."),
            UserMessage(content="What's the weather like in {city} during {season}?"),
            UserMessage(content="What are the top {number} attractions in {city}?")
        ],
        model_configuration=ModelConfig(
            model_name="gpt-4",
            temperature=0.7
        )
    )
    
    client = PromptClient(template=template)
    return client.create()


if __name__ == "__main__":    
    # Case 1: Basic prompt
    basic_client = create_basic_prompt()
    
    # Case 2: Single variable
    single_var_client = create_single_variable_prompt()
    response = single_var_client.run(variables={"country": "France"})
    
    # Case 3: Multiple variables
    multi_var_client = create_multiple_variables_prompt()
    response = multi_var_client.run(variables={
        "city": "Paris",
        "season": "summer",
        "number": "5"
    })