|
from llama_index.llms.azure_openai import AzureOpenAI |
|
from llama_index.embeddings.azure_openai import AzureOpenAIEmbedding |
|
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings, ChatPromptTemplate |
|
import logging |
|
import sys |
|
import os |
|
|
|
|
|
DEFINITION_1 = "\n".join(["### Descriptions ###", |
|
"#### Main Profile Descriptions ####", |
|
"VISION: Sees the ‘big picture’ and maintains line of sight. Alignment of goals and actions.", |
|
"IDEATION: Generates original and/or innovative ideas; makes unexpected connections.", |
|
"OPPORTUNISM: Alert to opportunity; prepared to seize opportunities.", |
|
"DRIVE: Strong desire to accomplish goals, Propensity to act decisively and get things done; proactive rather than reactive.", |
|
"RESILIENCE: Remains calm and optimistic under pressure, Perseveres in the face of adversity, Recovers from setbacks.", |
|
"#### Red Flag Descriptions ####", |
|
"HUBRIS: Conceit and self-importance, Overestimation of knowledge and/or ability in respect of tasks, Misplaced belief in unique or exceptional abilities. Need and seek attention, flattery and affirmation. Unable to recognise and/or understand the feelings and needs of others. Expectation of special treatment", |
|
"MERCURIAL: Given to sudden changes of mood, behaviour or direction, Given to unconventional or strange behaviour or beliefs, Difficult to predict and/or surprising.", |
|
"DOMINANT: Forceful, insistent, domineering, Hostile and argumentative, Unyielding in the face of evidence or argument.", |
|
"MACHIAVELLIAN: Deliberate deceitfulness in the pursuit on one’s interest; acting in bad faith, Ruthless pursuit of own interests regardless of considerations of right or wrong, General distrust of the motives of others; attribution of bad faith.", |
|
"#### Motivation Descriptions ####", |
|
"Purpose: The sense of meaningfulness and direction in one's work or activities. It is the intrinsic motivation derived from believing that one’s efforts contribute to a larger goal or vision.", |
|
"Mastery: The drive to improve and excel in a skill or field. It reflects the desire to gain expertise, proficiency, and competence through learning and practice.", |
|
"Ownership: The feeling of responsibility and control over one’s work or tasks. It involves having a personal stake in outcomes and the autonomy to make decisions.", |
|
"Connection: The sense of belonging and interpersonal relationships within a group or organization. It includes feeling valued, understood, and supported by others.", |
|
"Reward: The external incentives and recognition received for one’s efforts. It encompasses financial compensation, bonuses, promotions, and other tangible benefits.", |
|
"Power: The capacity to influence others and effect change. It relates to having authority, control, and the ability to shape decisions and outcomes within an organization or group.\n"]) |
|
|
|
DEFINITION_2 = "\n".join(["### Descriptions ###", |
|
"#### Main Profile Descriptions ####", |
|
"FORESIGHT: Sees the ‘big picture’ and maintains line of sight.", |
|
"TRANSPARENCY: Genuine, honest, and straightforward. Authentic.", |
|
"DIRECTION: Takes charge of situations; controls and directs.", |
|
"PERSUASION: Affects how others think and feel without control or direction.", |
|
"CREATIVITY: Generates original and/or innovative ideas; makes unexpected connections.", |
|
"ENTERPRISE: Alert to opportunity; prepared to seize opportunities.", |
|
"SELF-BELIEF: Self-belief/confidence across different domains.", |
|
"GOAL-ORIENTATION: Strong desire to accomplish goals, Propensity to act decisively and get things done.", |
|
"GRIP: Planned rather than spontaneous behavior, Attention to detail and accuracy.", |
|
"ADAPTABILITY: Switches easily between different cognitive processes.", |
|
"PERSEVERANCE: Remains calm and optimistic under pressure. Perseveres in the face of adversity. Recovers from setbacks", |
|
"#### Red Flag Descriptions ####", |
|
"PROUD: Conceit and self-importance, Overestimation of knowledge and/or ability in respect of tasks, Misplaced belief in unique or exceptional abilities. Need and seek attention, flattery and affirmation. Unable to recognise and/or understand the feelings and needs of others. Expectation of special treatment", |
|
"UNPREDICTABLE: Given to sudden changes of mood, behavior or direction, Given to unconventional or strange behavior or beliefs, Difficult to predict and/or surprising.", |
|
"FORCEFUL: Forceful, insistent, domineering, Hostile and argumentative, Unyielding in the face of evidence or argument.", |
|
"CALCULATING: Deliberate deceitfulness in the pursuit of one’s interest; acting in bad faith, Ruthless pursuit of own interests regardless of considerations of right or wrong, General distrust of the motives of others; attribution of bad faith.", |
|
"#### Motivation Descriptions ####", |
|
"Purpose: The sense of meaningfulness and direction in one's work or activities. It is the intrinsic motivation derived from believing that one’s efforts contribute to a larger goal or vision.", |
|
"Mastery: The drive to improve and excel in a skill or field. It reflects the desire to gain expertise, proficiency, and competence through learning and practice.", |
|
"Ownership: The feeling of responsibility and control over one’s work or tasks. It involves having a personal stake in outcomes and the autonomy to make decisions.", |
|
"Connection: The sense of belonging and interpersonal relationships within a group or organization. It includes feeling valued, understood, and supported by others.", |
|
"Reward: The external incentives and recognition received for one’s efforts. It encompasses financial compensation, bonuses, promotions, and other tangible benefits.", |
|
"Power: The capacity to influence others and effect change. It relates to having authority, control, and the ability to shape decisions and outcomes within an organization or group.\n"]) |
|
|
|
|
|
def create_models(): |
|
llm = AzureOpenAI( |
|
deployment_name="personality_gpt4o", |
|
api_key=os.environ.get("OPENAI_API_KEY_RAG"), |
|
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT_RAG"), |
|
api_version="2024-02-01", |
|
) |
|
embed_model = AzureOpenAIEmbedding( |
|
deployment_name="personality_rag_embedding", |
|
api_key=os.environ.get("OPENAI_API_KEY_RAG"), |
|
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT_RAG"), |
|
api_version="2024-02-01", |
|
) |
|
return llm, embed_model |
|
|
|
|
|
|
|
def configure_settings(llm, embed_model): |
|
Settings.llm = llm |
|
Settings.embed_model = embed_model |
|
Settings.chunk_size = 2048 |
|
Settings.chunk_overlap = 50 |
|
|
|
|
|
|
|
def load_documents_and_create_index(): |
|
documents = SimpleDirectoryReader(input_dir="rag_data/").load_data() |
|
return VectorStoreIndex.from_documents(documents) |
|
|
|
|
|
|
|
def create_chat_prompt_template(profile,type_definition): |
|
text_qa_template_str = ( |
|
"You are a knowledgeable advisor providing insights based on the specific analysis provided earlier and the Descriptions for each trait below:" |
|
"{{definition}}" |
|
"\n---------------------\n{{profile}}\n---------------------\n" |
|
"Answer questions about yourself (chatbot) and personality analysis based on the technical manual about yourself (chatbot) and personality analysis below " |
|
"\n---------------------\n{context_str}\n---------------------\n" |
|
"Your responses should around 100 words, directly relate to the user's question, drawing on relevant details from the analysis." |
|
"Do not answer unrelevant questions. If the user's question does not pertain to the personality analysis and yourself (chatbot) or is beyond the scope of the information provided, " |
|
"politely decline to answer, stating that the question is outside the analysis context." |
|
"Focus on delivering concise, accurate, insightful, and relevant information." |
|
"Question: {query_str}") |
|
|
|
print("definition",type_definition) |
|
|
|
if type_definition == 1: |
|
text_qa_template_str = text_qa_template_str.replace("{{definition}}", DEFINITION_1) |
|
else: |
|
text_qa_template_str = text_qa_template_str.replace("{{definition}}", DEFINITION_2) |
|
|
|
if profile: |
|
text_qa_template_str = text_qa_template_str.replace("{{profile}}", profile) |
|
|
|
|
|
print(text_qa_template_str) |
|
|
|
chat_text_qa_msgs = [ |
|
("system", |
|
"Your name is \"Personality Coach\", You are an expert in career advice and personality consultant from " |
|
"the company Meta Profiling. Do not infer or assume information beyond what's explicitly provided in the conversation." |
|
|
|
|
|
), |
|
("user", text_qa_template_str), |
|
] |
|
return ChatPromptTemplate.from_messages(chat_text_qa_msgs) |
|
|
|
|
|
|
|
def execute_query(index, template, query): |
|
query_engine = index.as_query_engine(similarity_top_k=2, text_qa_template=template) |
|
answer = query_engine.query(query) |
|
|
|
return answer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|