Spaces:
Sleeping
Sleeping
Shageenderan Sapai commited on
Commit ·
07ee2bb
1
Parent(s): 74312f0
Fixed post gg integration
Browse files- app/__pycache__/assistants.cpython-312.pyc +0 -0
- app/__pycache__/flows.cpython-312.pyc +0 -0
- app/__pycache__/main.cpython-312.pyc +0 -0
- app/__pycache__/user.cpython-312.pyc +0 -0
- app/__pycache__/utils.cpython-312.pyc +0 -0
- app/gg_report.json +26 -0
- app/main.py +2 -2
- app/user.py +57 -25
- app/utils.py +14 -13
- app/zoom_summary.txt +18 -57
app/__pycache__/assistants.cpython-312.pyc
CHANGED
|
Binary files a/app/__pycache__/assistants.cpython-312.pyc and b/app/__pycache__/assistants.cpython-312.pyc differ
|
|
|
app/__pycache__/flows.cpython-312.pyc
CHANGED
|
Binary files a/app/__pycache__/flows.cpython-312.pyc and b/app/__pycache__/flows.cpython-312.pyc differ
|
|
|
app/__pycache__/main.cpython-312.pyc
CHANGED
|
Binary files a/app/__pycache__/main.cpython-312.pyc and b/app/__pycache__/main.cpython-312.pyc differ
|
|
|
app/__pycache__/user.cpython-312.pyc
CHANGED
|
Binary files a/app/__pycache__/user.cpython-312.pyc and b/app/__pycache__/user.cpython-312.pyc differ
|
|
|
app/__pycache__/utils.cpython-312.pyc
CHANGED
|
Binary files a/app/__pycache__/utils.cpython-312.pyc and b/app/__pycache__/utils.cpython-312.pyc differ
|
|
|
app/gg_report.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"question": 1,
|
| 4 |
+
"answer": "Farant's action plan includes practicing presentations regularly, both alone and with a small group of friends, implementing and refining breathing techniques to manage his stuttering and reduce anxiety, incorporating stress management strategies such as mindfulness or relaxation exercises into his daily routine, and allocating specific times for preparation to avoid overthinking and excessive focus on details."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"question": 2,
|
| 8 |
+
"answer": "Yes, Farant is still facing the same challenges with stuttering during presentations and anxiety before speaking engagements, although he reports some improvement in his comfort level and a gradual decrease in anxiety."
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"question": 3,
|
| 12 |
+
"answer": "Yes, Farant is facing a new challenge related to balancing his preparation for presentations. He tends to spend excessive time on details, which contributes to his stress levels, and is working on finding the right balance between thorough preparation and avoiding overthinking."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"question": 4,
|
| 16 |
+
"answer": "Yes, in addition to improving his communication skills, Farant is focusing on his mental well-being by managing stress, recognizing that this is crucial for both his personal health and achieving his communication objectives."
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"question": 5,
|
| 20 |
+
"answer": "Based on today's session, Farant would like to continue pursuing his current goal of improving communication skills while also incorporating strategies to manage his stress, believing that addressing both areas simultaneously will lead to more effective and sustainable progress."
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"question": 6,
|
| 24 |
+
"answer": ""
|
| 25 |
+
}
|
| 26 |
+
]
|
app/main.py
CHANGED
|
@@ -366,7 +366,7 @@ def add_ai_message(request: ChatItem, api_key: str = Security(get_api_key)):
|
|
| 366 |
detail=str(e)
|
| 367 |
)
|
| 368 |
|
| 369 |
-
app.post("/process_gg_session")
|
| 370 |
def process_gg_session(request: GGItem, api_key: str = Security(get_api_key)):
|
| 371 |
session_id = request.gg_session_id
|
| 372 |
user_id = request.user_id
|
|
@@ -382,7 +382,7 @@ def process_gg_session(request: GGItem, api_key: str = Security(get_api_key)):
|
|
| 382 |
# update user
|
| 383 |
response = user.process_growth_guide_session(session_data)
|
| 384 |
logger.info(f"GG session processed: {session_id}, response: {response}", extra={"user_id": user_id, "endpoint": "/process_gg_session"})
|
| 385 |
-
|
| 386 |
|
| 387 |
@app.post("/batch_refresh_users")
|
| 388 |
def refresh_multiple_users(user_ids: List[str], api_key: str = Security(get_api_key)):
|
|
|
|
| 366 |
detail=str(e)
|
| 367 |
)
|
| 368 |
|
| 369 |
+
@app.post("/process_gg_session")
|
| 370 |
def process_gg_session(request: GGItem, api_key: str = Security(get_api_key)):
|
| 371 |
session_id = request.gg_session_id
|
| 372 |
user_id = request.user_id
|
|
|
|
| 382 |
# update user
|
| 383 |
response = user.process_growth_guide_session(session_data)
|
| 384 |
logger.info(f"GG session processed: {session_id}, response: {response}", extra={"user_id": user_id, "endpoint": "/process_gg_session"})
|
| 385 |
+
return {"response": response}
|
| 386 |
|
| 387 |
@app.post("/batch_refresh_users")
|
| 388 |
def refresh_multiple_users(user_ids: List[str], api_key: str = Security(get_api_key)):
|
app/user.py
CHANGED
|
@@ -11,6 +11,19 @@ import random
|
|
| 11 |
import logging
|
| 12 |
|
| 13 |
from app.flows import FINAL_SUMMARY_STATE, FINAL_SUMMARY_STATE, MICRO_ACTION_STATE, MOTIVATION_INSPIRATION_STATE, OPEN_DISCUSSION_STATE, PROGRESS_REFLECTION_STATE, PROGRESS_SUMMARY_STATE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
logger = logging.getLogger(__name__)
|
| 16 |
|
|
@@ -523,12 +536,8 @@ class User:
|
|
| 523 |
temperature=0.2
|
| 524 |
)
|
| 525 |
return response.choices[0].message.content
|
| 526 |
-
|
| 527 |
-
def _update_user_data(self, data_type, text_input, extra_text=""):
|
| 528 |
-
# data_type is a string indicating the type of data to update ('micro_actions', 'challenges', 'other_focusses')
|
| 529 |
-
# text_input is the text to process
|
| 530 |
-
# extra_text is any additional text to include in the prompt
|
| 531 |
|
|
|
|
| 532 |
data_mapping = {
|
| 533 |
'micro_actions': {
|
| 534 |
'prompt_description': 'micro actions',
|
|
@@ -537,7 +546,7 @@ class User:
|
|
| 537 |
'endpoint': f'update_{data_type}',
|
| 538 |
},
|
| 539 |
'challenges': {
|
| 540 |
-
'prompt_description': 'challenges',
|
| 541 |
'status': 'ONGOING',
|
| 542 |
'attribute': 'challenges',
|
| 543 |
'endpoint': f'update_{data_type}',
|
|
@@ -545,7 +554,7 @@ class User:
|
|
| 545 |
'other_focusses': {
|
| 546 |
'prompt_description': 'other focuses',
|
| 547 |
'status': 'ONGOING',
|
| 548 |
-
'attribute': 'other_focusses',
|
| 549 |
'endpoint': f'update_{data_type}',
|
| 550 |
},
|
| 551 |
}
|
|
@@ -557,30 +566,41 @@ class User:
|
|
| 557 |
mapping = data_mapping[data_type]
|
| 558 |
|
| 559 |
prompt = (
|
| 560 |
-
f"Extract {mapping['prompt_description']} from the following text and
|
| 561 |
-
f"If there are no {mapping['prompt_description']}, return an empty array. "
|
| 562 |
-
f"Each item should include
|
| 563 |
-
f"'user_id' as '{self.user_id}', 'status' as '{mapping['status']}', and 'created_at' and 'updated_at' as the current datetime "
|
| 564 |
-
"formatted as '%d-%m-%Y %a %H:%M:%S'. Only output the JSON array.\n\n"
|
| 565 |
f"{extra_text}"
|
| 566 |
f"Text:\n{text_input}"
|
| 567 |
)
|
| 568 |
|
| 569 |
-
response = self.client.chat.completions.create(
|
| 570 |
-
model="gpt-4o",
|
| 571 |
-
messages=[{"role": "user", "content": prompt}],
|
| 572 |
-
temperature=0.2
|
| 573 |
-
)
|
| 574 |
-
|
| 575 |
try:
|
| 576 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 577 |
logger.info(f"Updated {data_type}: {data}", extra={"user_id": self.user_id, "endpoint": mapping['endpoint']})
|
| 578 |
-
getattr(self, mapping['attribute']).extend(data
|
|
|
|
| 579 |
except Exception as e:
|
| 580 |
logger.error(f"Failed to update {data_type}: {e}", extra={"user_id": self.user_id})
|
| 581 |
|
| 582 |
def update_user_data(self, gg_report):
|
| 583 |
-
self._update_user_data('micro_actions', gg_report[0]['answer'])
|
| 584 |
|
| 585 |
extra_text = f"User has new challenge:\n{gg_report[1]['answer']}\n\n"
|
| 586 |
self._update_user_data('challenges', gg_report[2]['answer'], extra_text=extra_text)
|
|
@@ -729,12 +749,24 @@ Use bullet points or numbered lists where appropriate to enhance readability."""
|
|
| 729 |
self.client = None
|
| 730 |
|
| 731 |
def __str__(self):
|
| 732 |
-
return f"User(user_id={self.user_id}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 733 |
|
| 734 |
def __repr__(self):
|
| 735 |
-
return
|
| 736 |
-
|
| 737 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 738 |
|
| 739 |
def refresh(self, client):
|
| 740 |
# copy user by creating new user object
|
|
|
|
| 11 |
import logging
|
| 12 |
|
| 13 |
from app.flows import FINAL_SUMMARY_STATE, FINAL_SUMMARY_STATE, MICRO_ACTION_STATE, MOTIVATION_INSPIRATION_STATE, OPEN_DISCUSSION_STATE, PROGRESS_REFLECTION_STATE, PROGRESS_SUMMARY_STATE
|
| 14 |
+
from pydantic import BaseModel
|
| 15 |
+
from datetime import datetime
|
| 16 |
+
|
| 17 |
+
class UserDataItem(BaseModel):
|
| 18 |
+
role: str
|
| 19 |
+
content: str
|
| 20 |
+
user_id: str
|
| 21 |
+
status: str
|
| 22 |
+
created_at: str
|
| 23 |
+
updated_at: str
|
| 24 |
+
|
| 25 |
+
class UserDataResponse(BaseModel):
|
| 26 |
+
data: list[UserDataItem]
|
| 27 |
|
| 28 |
logger = logging.getLogger(__name__)
|
| 29 |
|
|
|
|
| 536 |
temperature=0.2
|
| 537 |
)
|
| 538 |
return response.choices[0].message.content
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 539 |
|
| 540 |
+
def _update_user_data(self, data_type, text_input, extra_text=""):
|
| 541 |
data_mapping = {
|
| 542 |
'micro_actions': {
|
| 543 |
'prompt_description': 'micro actions',
|
|
|
|
| 546 |
'endpoint': f'update_{data_type}',
|
| 547 |
},
|
| 548 |
'challenges': {
|
| 549 |
+
'prompt_description': 'challenges',
|
| 550 |
'status': 'ONGOING',
|
| 551 |
'attribute': 'challenges',
|
| 552 |
'endpoint': f'update_{data_type}',
|
|
|
|
| 554 |
'other_focusses': {
|
| 555 |
'prompt_description': 'other focuses',
|
| 556 |
'status': 'ONGOING',
|
| 557 |
+
'attribute': 'other_focusses',
|
| 558 |
'endpoint': f'update_{data_type}',
|
| 559 |
},
|
| 560 |
}
|
|
|
|
| 566 |
mapping = data_mapping[data_type]
|
| 567 |
|
| 568 |
prompt = (
|
| 569 |
+
f"Extract {mapping['prompt_description']} from the following text and return them in a structured format. "
|
| 570 |
+
f"If there are no {mapping['prompt_description']}, return an empty array for that field. "
|
| 571 |
+
f"Each item should include the extracted {mapping['prompt_description'][:-1]} as content.\n\n"
|
|
|
|
|
|
|
| 572 |
f"{extra_text}"
|
| 573 |
f"Text:\n{text_input}"
|
| 574 |
)
|
| 575 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 576 |
try:
|
| 577 |
+
current_time = datetime.now().strftime("%d-%m-%Y %a %H:%M:%S")
|
| 578 |
+
|
| 579 |
+
response = self.client.beta.chat.completions.parse(
|
| 580 |
+
model="gpt-4o",
|
| 581 |
+
messages=[{"role": "user", "content": prompt}],
|
| 582 |
+
response_format=UserDataResponse,
|
| 583 |
+
temperature=0.2
|
| 584 |
+
)
|
| 585 |
+
|
| 586 |
+
data = getattr(response.choices[0].message.parsed, 'data')
|
| 587 |
+
|
| 588 |
+
# Update the common fields for each item
|
| 589 |
+
for item in data:
|
| 590 |
+
item.role = "assistant"
|
| 591 |
+
item.user_id = self.user_id
|
| 592 |
+
item.status = mapping['status']
|
| 593 |
+
item.created_at = current_time
|
| 594 |
+
item.updated_at = current_time
|
| 595 |
+
|
| 596 |
logger.info(f"Updated {data_type}: {data}", extra={"user_id": self.user_id, "endpoint": mapping['endpoint']})
|
| 597 |
+
getattr(self, mapping['attribute']).extend(data)
|
| 598 |
+
|
| 599 |
except Exception as e:
|
| 600 |
logger.error(f"Failed to update {data_type}: {e}", extra={"user_id": self.user_id})
|
| 601 |
|
| 602 |
def update_user_data(self, gg_report):
|
| 603 |
+
self.micro_actions = self._update_user_data('micro_actions', gg_report[0]['answer'])
|
| 604 |
|
| 605 |
extra_text = f"User has new challenge:\n{gg_report[1]['answer']}\n\n"
|
| 606 |
self._update_user_data('challenges', gg_report[2]['answer'], extra_text=extra_text)
|
|
|
|
| 749 |
self.client = None
|
| 750 |
|
| 751 |
def __str__(self):
|
| 752 |
+
return f"""User(user_id={self.user_id}
|
| 753 |
+
micro_actions={self.micro_actions}
|
| 754 |
+
challenge={self.challenges}
|
| 755 |
+
other_focusses={self.other_focusses}
|
| 756 |
+
goals={self.goal}
|
| 757 |
+
done_first_reflection={self.done_first_reflection}
|
| 758 |
+
conversations={self.conversations})
|
| 759 |
+
user_info={self.user_info}"""
|
| 760 |
|
| 761 |
def __repr__(self):
|
| 762 |
+
return f"""User(user_id={self.user_id}
|
| 763 |
+
micro_actions={self.micro_actions}
|
| 764 |
+
challenge={self.challenges}
|
| 765 |
+
other_focusses={self.other_focusses}
|
| 766 |
+
goals={self.goal}
|
| 767 |
+
done_first_reflection={self.done_first_reflection}
|
| 768 |
+
conversations={self.conversations})
|
| 769 |
+
user_info={self.user_info}"""
|
| 770 |
|
| 771 |
def refresh(self, client):
|
| 772 |
# copy user by creating new user object
|
app/utils.py
CHANGED
|
@@ -941,15 +941,15 @@ def get_user_info(user_id):
|
|
| 941 |
logger.error(f"Database error while retrieving user info for {user_id}: {e}", extra={'user_id': user_id, 'endpoint': function_name})
|
| 942 |
return None
|
| 943 |
|
| 944 |
-
def add_growth_guide_session(user_id, session_id, zoom_ai_summary, gg_report):
|
| 945 |
function_name = add_growth_guide_session.__name__
|
| 946 |
logger.info(f"Adding growth guide session for user {user_id} and session {session_id}", extra={'user_id': user_id, 'endpoint': function_name})
|
| 947 |
|
| 948 |
db_params = {
|
| 949 |
'dbname': 'ourcoach',
|
| 950 |
'user': 'ourcoach',
|
| 951 |
-
'password': '
|
| 952 |
-
'host': '
|
| 953 |
'port': '5432'
|
| 954 |
}
|
| 955 |
|
|
@@ -957,19 +957,20 @@ def add_growth_guide_session(user_id, session_id, zoom_ai_summary, gg_report):
|
|
| 957 |
with psycopg2.connect(**db_params) as conn:
|
| 958 |
with conn.cursor() as cursor:
|
| 959 |
query = sql.SQL("""
|
| 960 |
-
INSERT INTO {table} (
|
| 961 |
-
VALUES (%s, %s, %s, %s, %s, %s)
|
| 962 |
-
ON CONFLICT (user_id, session_id)
|
| 963 |
-
DO UPDATE SET zoom_ai_summary = EXCLUDED.zoom_ai_summary, gg_report = EXCLUDED.gg_report, updated_at = EXCLUDED.updated_at
|
| 964 |
""").format(table=sql.Identifier('public', 'user_notes'))
|
| 965 |
current_time = datetime.datetime.now()
|
| 966 |
cursor.execute(query, (
|
| 967 |
-
user_id,
|
| 968 |
session_id,
|
| 969 |
-
|
|
|
|
|
|
|
|
|
|
| 970 |
json.dumps(gg_report),
|
|
|
|
| 971 |
current_time,
|
| 972 |
-
|
| 973 |
))
|
| 974 |
conn.commit()
|
| 975 |
logger.info(f"Growth guide session added successfully for user {user_id} and session {session_id}", extra={'user_id': user_id, 'endpoint': function_name})
|
|
@@ -984,14 +985,14 @@ def get_growth_guide_session(user_id, session_id):
|
|
| 984 |
db_params = {
|
| 985 |
'dbname': 'ourcoach',
|
| 986 |
'user': 'ourcoach',
|
| 987 |
-
'password': '
|
| 988 |
-
'host': '
|
| 989 |
'port': '5432'
|
| 990 |
}
|
| 991 |
try:
|
| 992 |
with psycopg2.connect(**db_params) as conn:
|
| 993 |
with conn.cursor() as cursor:
|
| 994 |
-
query = sql.SQL("SELECT * FROM {table} WHERE user_id = %s AND
|
| 995 |
cursor.execute(query, (user_id, session_id))
|
| 996 |
row = cursor.fetchone()
|
| 997 |
if (row):
|
|
|
|
| 941 |
logger.error(f"Database error while retrieving user info for {user_id}: {e}", extra={'user_id': user_id, 'endpoint': function_name})
|
| 942 |
return None
|
| 943 |
|
| 944 |
+
def add_growth_guide_session(user_id, session_id, coach_id, session_started_at, zoom_ai_summary, gg_report, ourcoach_summary):
|
| 945 |
function_name = add_growth_guide_session.__name__
|
| 946 |
logger.info(f"Adding growth guide session for user {user_id} and session {session_id}", extra={'user_id': user_id, 'endpoint': function_name})
|
| 947 |
|
| 948 |
db_params = {
|
| 949 |
'dbname': 'ourcoach',
|
| 950 |
'user': 'ourcoach',
|
| 951 |
+
'password': 'tfPMEnYFWKGSQqZWVhQo',
|
| 952 |
+
'host': 'production-ourcoach.cx8se8o0iaiy.ap-southeast-1.rds.amazonaws.com',
|
| 953 |
'port': '5432'
|
| 954 |
}
|
| 955 |
|
|
|
|
| 957 |
with psycopg2.connect(**db_params) as conn:
|
| 958 |
with conn.cursor() as cursor:
|
| 959 |
query = sql.SQL("""
|
| 960 |
+
INSERT INTO {table} (booking_id, coach_id, session_started_at, user_id, updated_at, gg_report, ourcoach_summary, created_at, zoom_ai_summary)
|
| 961 |
+
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
|
|
|
|
|
|
|
| 962 |
""").format(table=sql.Identifier('public', 'user_notes'))
|
| 963 |
current_time = datetime.datetime.now()
|
| 964 |
cursor.execute(query, (
|
|
|
|
| 965 |
session_id,
|
| 966 |
+
coach_id,
|
| 967 |
+
session_started_at,
|
| 968 |
+
user_id,
|
| 969 |
+
current_time,
|
| 970 |
json.dumps(gg_report),
|
| 971 |
+
json.dumps(ourcoach_summary),
|
| 972 |
current_time,
|
| 973 |
+
json.dumps(zoom_ai_summary)
|
| 974 |
))
|
| 975 |
conn.commit()
|
| 976 |
logger.info(f"Growth guide session added successfully for user {user_id} and session {session_id}", extra={'user_id': user_id, 'endpoint': function_name})
|
|
|
|
| 985 |
db_params = {
|
| 986 |
'dbname': 'ourcoach',
|
| 987 |
'user': 'ourcoach',
|
| 988 |
+
'password': 'tfPMEnYFWKGSQqZWVhQo',
|
| 989 |
+
'host': 'production-ourcoach.cx8se8o0iaiy.ap-southeast-1.rds.amazonaws.com',
|
| 990 |
'port': '5432'
|
| 991 |
}
|
| 992 |
try:
|
| 993 |
with psycopg2.connect(**db_params) as conn:
|
| 994 |
with conn.cursor() as cursor:
|
| 995 |
+
query = sql.SQL("SELECT * FROM {table} WHERE user_id = %s AND booking_id = %s").format(table=sql.Identifier('public', 'user_notes'))
|
| 996 |
cursor.execute(query, (user_id, session_id))
|
| 997 |
row = cursor.fetchone()
|
| 998 |
if (row):
|
app/zoom_summary.txt
CHANGED
|
@@ -1,71 +1,32 @@
|
|
| 1 |
-
Quick
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
Andrea and Yew discussed Yew's work, health, and personal life, and also discussed the challenges in each area. They also explored Yew's motivation, priorities, and personal growth goals, including becoming a founder, being more consistent in health habits, and improving relationships. The conversation ended with a discussion on the potential effects of focusing on OurCoach on various aspects of his life, how he may be able to push forward with his goals, and the need for Yew Wai to find a balance between his career, health, and relationships.
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
Next steps
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
• Yew Wai to run user testing with Growth Guide sessions for Our Coach in the next 1-2 weeks.
|
| 17 |
-
• Yew Wai to launch the new chat and web dashboard for Our Coach this week.
|
| 18 |
-
• Yew Wai to try scheduling some exercise time, even if just a 10-minute walk.
|
| 19 |
-
|
| 20 |
-
• Yew Wai to be more organised in day-to-day tasks, and to continue meeting up with the team.
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
|
|
|
|
| 26 |
|
|
|
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
Summary
|
| 29 |
|
|
|
|
| 30 |
|
|
|
|
| 31 |
|
|
|
|
| 32 |
|
| 33 |
-
|
| 34 |
-
In the meeting, Andrea and Yew Wai discussed Yew Wai's work and personal life. Yew Wai expressed that his life is not always balanced due to the demands of work, particularly the development of their coaching platform. Yew Wai also mentioned upcoming holiday plans to Phuket with his partner and her family. He looks forward to the completion of the coaching platform and the subsequent return to a more regular routine.
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
Addressing Yew's Personal Habits Challenges
|
| 40 |
-
Andrea and Yew Wai discussed Yew Wai's current challenges, primarily related to discipline in personal habits such as sleep, eating, and exercise. Yew Wai admitted to irregular sleep patterns, inconsistent eating times, and infrequent exercise, which he felt negatively impacted his mood and energy levels. He also revealed a reliance on coffee to compensate for his irregular habits. Yew Wai also shared that he and his fiancé, who lives in Jakarta, often face long-distance challenges.
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
Yew's Motivation and Priorities Discussed
|
| 46 |
-
In the meeting, Andrea and Yew Wai discussed his motivation and priorities. Yew Wai shared that seeing OurCoach come to fruition, and having a career growth are what keeps them going. He also expressed a desire to make a positive impact with the launch of their product as he hopes that the users will have a new-age experience. Yew Wai's priorities were identified as career, health, and relationships. He mentioned that career is currently in the forefront of his mind, and emphasised the importance of building this product and making it valuable to users.
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
Yew's Exercise Routine and Marathon Goal
|
| 52 |
-
Yew discussed his exercise routine, stating that he tries to exercise at least once or twice a week, usually involving a run, gym session, and tennis sessions. He mentioned that he used to be more into long-distance running but now does it less frequently, opting for tennis more often. Yew also shared his goal of running a 42 km marathon by the age of 42, which is still on his mind despite it being far away.
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
Personal Growth and Career Goals
|
| 58 |
-
Yew Wai discussed his personal growth goals for the year, including becoming a founder and improving his relationships. He mentioned the possibility of helping his Indonesian partner, Karina, move to Malaysia by Q1 next year. Yew Wai's motivation for these goals is personal growth and not wanting to feel stale and stagnant. He sees these goals as interconnected, with self-discipline being a key factor in achieving them. He identified his career as the immediate priority.
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
|
| 63 |
-
|
| 64 |
-
In the meeting, Yew and Andrea discussed the potential effects of focusing on their coach on various aspects of Yew Wai's life. Yew Wai suggested that putting a lot of focus on building OurCoach may negatively impact his health and relationships as he may not have as much time to invest in them. However, successfully building OurCoach could also positively increase his confidence because achieving this goal would be a significant accomplishment, as it would fulfill a long-held dream of building his own company.
|
| 65 |
|
|
|
|
| 66 |
|
|
|
|
| 67 |
|
|
|
|
| 68 |
|
| 69 |
-
|
| 70 |
-
In the meeting, Andrea and Yew Wai discussed his progress towards his goals, particularly focusing on building his OurCoach and being more hands-on. Yew expressed his desire to be more organized and meet with the team more often to push development faster. They also discussed the upcoming user testing and the growth guide. Andrea suggested that Yew Wai could benefit from finding a balance between his career, health, and relationships. They agreed to reconnect next week to reflect on his progress.
|
| 71 |
|
|
|
|
|
|
| 1 |
+
Quick Recap
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
+
Farant and the Growth Guide discussed Farant's ongoing efforts to improve his communication skills, specifically addressing his stuttering and anxiety during presentations. They explored his current action plan, the challenges he's facing, and introduced the importance of focusing on his mental well-being to support his primary goal. The conversation also touched on balancing preparation for presentations and managing stress effectively.
|
| 4 |
|
| 5 |
+
Next Steps
|
| 6 |
|
| 7 |
+
Farant to continue practicing presentations regularly, both alone and with a small group of friends over the next 1-2 weeks.
|
| 8 |
+
Implement and refine breathing techniques to manage stuttering and reduce anxiety before speaking.
|
| 9 |
+
Incorporate stress management strategies, such as mindfulness or relaxation exercises, into his daily routine.
|
| 10 |
+
Allocate specific times for preparation to avoid overthinking and excessive focus on details.
|
| 11 |
+
Schedule a follow-up session with the Growth Guide to assess progress and adjust the action plan as needed.
|
| 12 |
Summary
|
| 13 |
|
| 14 |
+
Progress on Communication Skills
|
| 15 |
|
| 16 |
+
In the meeting, Farant shared his dedication to improving his communication skills. He has been practicing his presentations more consistently, both individually and in front of friends, and has started using breathing techniques to help manage his stuttering. These efforts have led to a gradual decrease in his anxiety levels before speaking.
|
| 17 |
|
| 18 |
+
Addressing Stuttering and Anxiety
|
| 19 |
|
| 20 |
+
Farant continues to face challenges with stuttering during presentations, although he reports becoming more comfortable with it over time. His anxiety prior to speaking engagements is slowly diminishing, indicating positive progress. However, he still experiences nervousness, which he is actively working to mitigate through his current practices.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
+
New Challenges in Balancing Preparation
|
|
|
|
| 23 |
|
| 24 |
+
Farant identified a new challenge related to balancing his preparation for presentations. He tends to spend excessive time on details, which contributes to his stress levels. Finding the right balance between thorough preparation and avoiding overthinking is an area he aims to improve.
|
| 25 |
|
| 26 |
+
Focus on Mental Well-Being
|
| 27 |
|
| 28 |
+
Beyond his primary goal of enhancing communication skills, Farant expressed a desire to focus on his mental well-being. He recognizes that managing stress is crucial not only for his personal health but also for achieving his communication objectives. Integrating stress management techniques into his routine is seen as complementary to his main goal.
|
| 29 |
|
| 30 |
+
Decision on Continuing Current Goals
|
|
|
|
| 31 |
|
| 32 |
+
Based on the session, Farant has decided to continue pursuing his current goal of improving communication skills while also incorporating strategies to manage his stress. He believes that addressing both areas simultaneously will lead to more effective and sustainable progress in his presentations and overall well-being.
|