import os
from langchain.prompts import PromptTemplate


labels = ['buy', 'sell', 'hold']
headers_inference_api = {"Authorization": f"Bearer {os.environ['HG_api_key']}"}
# headers_inference_endpoint = {
# 	"Authorization": f"Bearer {os.environ['HG_api_key_personal']}",
#	"Content-Type": "application/json"
#}

summarization_system_msg = """You are the best financial advisor and expert broker. You are \
reading Item 7 from Form 10-K of some company and you want to summarize it into 10 sentences the best as \
possible, so that then the human will analyze your summary and take on serious decisions, whether to \
buy, sell or hold the holdings of that company. There is no need to copy messages from the original text. \
Don't write general things, which aren't important to the investor. Include the most important parts, \
which describes the business growth, predictions for next years etc."""
summarization_user_msg = "Company's description: {company_description}"

summarization_user_prompt = PromptTemplate.from_template(
     template=summarization_user_msg
)

# summarization_template = """<system> You are the best financial advisor and expert broker. You are \
# reading Item 7 from Form 10-K of some company and you want to summarize it into 2-3 sentences the best as \
# possible, so that then the human will analyze your summary and take on serious decisions, whether to \
# buy, sell or hold the holdings of that company. There is no need to copy messages from the original text</system>

# Company's description: {company_description}"""

# summarization_prompt_template = PromptTemplate.from_template(
#      template=summarization_template 
# )

prediction_system_msg = """You are the best financial advisor and expert broker. I am an investor, who seek \
for your help. Below is the description of one big company. You need to reply to me with a \
single word, either 'sell', 'buy' or 'hold'. This word should best describe your recommendation \
on what is the best action for me with the company's holdings."""
prediction_user_msg = """Company's description: {company_description}

So what do you think? Sell, buy or hold?"""
prediction_user_prompt = PromptTemplate.from_template(
     template=prediction_user_msg
)

prediction_template = '<system> ' + prediction_system_msg + ' </system>\n\n' + prediction_user_msg
prediction_prompt = PromptTemplate.from_template(
     template=prediction_template
)





template = """<system> You are the best financial advisor and expert broker. I am an investor, who seek \
for your help. Below is the description of one big company. You need to reply to me with a \
single word, either 'sell', 'buy' or 'hold'. This word should best describe your recommendation \
on what is the best action for me with the company's holdings. </system>

Company's description: {company_description}

So what do you think? Sell, buy or hold?"""
prompt_template = PromptTemplate.from_template(
     template=template
)


chat_structure = """
### Instruction:
{instruction}

### Response:
"""
chat_prompt = PromptTemplate.from_template(
     template=chat_structure
)


instruction = """You are the best financial advisor and expert broker. I am an investor, who seek \
for your help. Below is the description of one big company. You need to reply to me with a \
single word, either 'sell', 'buy' or 'hold'. This word should best describe your recommendation \
on what is the best action for me with the company's holdings.

Company's description: {company_description}

So what do you think? Sell, buy or hold?"""
# text_gen_prompt = PromptTemplate.from_template(
#      template=chat_prompt.format(instruction=instruction_prompt.format(company_description=text.page_content))
# )
instruction_prompt = PromptTemplate.from_template(
     template=instruction
)





# predictor_system_message = """You are the preeminent financial advisor and expert broker, 
# renowned for your unparalleled market acumen. As you meticulously analyze the summary of Item 7 from 
# Form 10-K of some company, your task is to distill your profound insights into a single decisive word, 
# choosing from the options: 'sell', 'buy', or 'hold'. This word reflects your beliefs about the company's 
# future. Your selection should be astutely founded on a 
# comprehensive understanding of all economic facets and nuanced considerations. Remember, your 
# recommendation carries significant weight, influencing critical decisions on whether to divest, invest, 
# or maintain positions in that company. If you predict "buy" it means that the company is a good investment 
# option and is likely to grow in the next year. If you predict "sell" it means that you think that the 
# company won't perform wellduring the upcoming year. Approach this task with the sagacity and expertise that 
# has earned you your esteemed reputation. Please, don't include any warnings that it is difficult to make 
# a definitive recommendation, based on the information provided. Please, don't include any additional text 
# before your answer, don't write 'based on the information provided, I recommend ...'."""





summarizers = {
#     'financial-summarization-pegasus': {
#          'model_name': 'human-centered-summarization/financial-summarization-pegasus',
#          'api_url' : 'https://api-inference.huggingface.co/models/human-centered-summarization/financial-summarization-pegasus',
#          'chunk_size': 1_400,
#          'size': 'large'
#     },
    'bart-finance-pegasus': {
         'model_name': 'amitesh11/bart-finance-pegasus',
         'api_url': 'https://api-inference.huggingface.co/models/amitesh11/bart-finance-pegasus',
         'chunk_size': 2_600,
         'size': 'medium'
    },
#     'financial-summary': {
#          'model_name': 'Spacetimetravel/autotrain-financial-conversation_financial-summary-90517144315',
#          'api_url' : "https://api-inference.huggingface.co/models/Spacetimetravel/autotrain-financial-conversation_financial-summary-90517144315",
#          'chunk_size': 1_800,
#          'size': 'small'
#     },
    'gpt-3.5-turbo': {
         'model_name': 'gpt-3.5-turbo',
         'api_url' : "",
         'chunk_size': 6_000,
         'size': ''
    }
}



# There are 3 inference_types: chatGPT, Inference API and Inference Endpoint
# Add captions to display inference_type
predictors = {
     'gpt-3.5-turbo': {
         'model_name': 'OpenAI-gpt-3.5-turbo',
         'inference_type': 'chatGPT',
         'model_task': 'text-generation'
    },


	'blenderbot-3B': {
         'model_name': 'facebook/blenderbot-3B',
         'api_url' : 'https://api-inference.huggingface.co/models/facebook/blenderbot-3B',
         'inference_type': 'Inference API',
         'model_task': 'conversational'
    },
	'TinyLlama-1.1B': {
         'model_name': 'tog/TinyLlama-1.1B-alpaca-chat-v1.0',
         'api_url' : 'https://api-inference.huggingface.co/models/tog/TinyLlama-1.1B-alpaca-chat-v1.0',
         'inference_type': 'Inference API',
         'model_task': 'conversational'
    },

 
	'open-llama-7b-v2': {
         'model_name': 'VMware/open-llama-7b-v2-open-instruct',
         'api_url' : 'https://audqis4a3tk9s0li.us-east-1.aws.endpoints.huggingface.cloud',
         'inference_type': 'Inference Endpoint',
         'model_task': 'conversational'
    },
 
 
     'gpt2-xl': {
         'model_name': 'gpt2-xl',
         'api_url' : 'https://api-inference.huggingface.co/models/gpt2-xl',
         'inference_type': 'Inference API',
         'model_task': 'text-generation'
    },
	'distilgpt2-finance': {
         'model_name': 'lxyuan/distilgpt2-finetuned-finance',
         'api_url' : 'https://api-inference.huggingface.co/models/lxyuan/distilgpt2-finetuned-finance',
         'inference_type': 'Inference API',
         'model_task': 'text-generation'
    },


     'embedding_mlp_classifier': {
          'dataset_name': 'CabraVC/vector_dataset_2023-12-02_00-32',
          'embedding_model': 'all-distilroberta-v1',
          'embedding_dim': 768,
          'mlp_model': 'embedding_mlp.safetensors',
          
     },
     'embedding_mlp_classifier_gtr-t5-xxl': {
          'dataset_name': 'CabraVC/vector_dataset_2023-12-02_00-32',
          'embedding_model': 'gtr-t5-xxl',
          'embedding_dim': 768,
          'mlp_model': 'embedding_mlp.safetensors',    
     }
}



summary_scores_template = {
    'rouge-1': [],
    'rouge-2': [],
    'rouge-l': []
}