Shageenderan Sapai commited on
Commit
07ee2bb
·
1 Parent(s): 74312f0

Fixed post gg integration

Browse files
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 format them into a JSON array. "
561
- f"If there are no {mapping['prompt_description']}, return an empty array. "
562
- f"Each item should include 'role' as 'assistant', 'content' as the extracted {mapping['prompt_description'][:-1]}, "
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
- data = json.loads(response.choices[0].message.content)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
577
  logger.info(f"Updated {data_type}: {data}", extra={"user_id": self.user_id, "endpoint": mapping['endpoint']})
578
- getattr(self, mapping['attribute']).extend(data.get(data_type, []))
 
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}, user_info={self.user_info}, micro_actions={self.micro_actions}, done_first_reflection={self.done_first_reflection}, conversations={self.conversations})"
 
 
 
 
 
 
 
733
 
734
  def __repr__(self):
735
- return (f"User(user_id={self.user_id}, user_info={self.user_info}, micro_actions={self.micro_actions}, "
736
- f"done_first_reflection={self.done_first_reflection}, "
737
- f"conversations={self.conversations})")
 
 
 
 
 
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': 'hvcTL3kN3pOG5KteT17T',
952
- 'host': 'staging-ourcoach.cx8se8o0iaiy.ap-southeast-1.rds.amazonaws.com',
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} (user_id, session_id, zoom_ai_summary, gg_report, created_at, updated_at)
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
- json.dumps(zoom_ai_summary),
 
 
 
970
  json.dumps(gg_report),
 
971
  current_time,
972
- current_time
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': 'hvcTL3kN3pOG5KteT17T',
988
- 'host': 'staging-ourcoach.cx8se8o0iaiy.ap-southeast-1.rds.amazonaws.com',
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 session_id = %s").format(table=sql.Identifier('public', 'user_notes'))
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 recap
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
- Work and Personal Life Balance
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
- Coach's Impact on Yew's Life Goals
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
- Yew's Progress and Development Plans
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.