diff --git a/api/models/model.py b/api/models/model.py index b3417bc1e4..643a2dea2d 100644 --- a/api/models/model.py +++ b/api/models/model.py @@ -1337,6 +1337,20 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined] return None return self.extra_profile.get("memory") + @property + def profile(self): + if self.extra_profile is None: + return None + + return f""" + 专业:{self.major} + 心理健康评级:{self.health_status} + 话题标签:{self.topics} + + 总结分析与建议: + {self.summary} + """ + @property def account(self): return db.session.query(Account).filter(Account.id == self.external_user_id).first() @@ -1381,6 +1395,7 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined] "summary": value, "topics": self.topics, "major": self.major, + "memory": self.memory, } @topics.setter @@ -1389,6 +1404,7 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined] "summary": self.summary, "topics": value, "major": self.major, + "memory": self.memory, } @major.setter @@ -1397,6 +1413,7 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined] "summary": self.summary, "topics": self.topics, "major": value, + "memory": self.memory, } diff --git a/api/schedule/user_profile_generate_task.py b/api/schedule/user_profile_generate_task.py index e466cb5fc6..f8293f621e 100644 --- a/api/schedule/user_profile_generate_task.py +++ b/api/schedule/user_profile_generate_task.py @@ -37,13 +37,23 @@ def user_profile_generate_task(): for app_id in app_ids: users_to_update = fetch_users_to_update(app_id) + + if users_to_update is None or len(users_to_update) == 0: + click.echo(click.style(f"No users to update. for app_id {app_id}", fg="green")) + continue + + click.echo( + click.style( + f"Found {len(users_to_update)} users profile and memory updates. in app_id {app_id}", fg="green" + ) + ) update_user_profile_for_appid(users_to_update) end_at = time.perf_counter() click.echo( click.style( - f"Updated memory for app_id {app_ids} users memory. Latency: {end_at - start_at}", + f"Updated profile and memory for app_id {app_ids} users. Latency: {end_at - start_at}", fg="green", ) ) @@ -52,12 +62,6 @@ def user_profile_generate_task(): def update_user_profile_for_appid(users_to_update: list[EndUser]): """Update memory for a given app_id.""" - if users_to_update is None or len(users_to_update) == 0: - click.echo(click.style("No users to update.", fg="green")) - return - - click.echo(click.style(f"Found {len(users_to_update)} users who need memory updates.", fg="green")) - updated_users_count = 0 batch_size = 10 @@ -153,35 +157,24 @@ def process_user_memory(user: EndUser, new_messages: str): "inputs": { "new_messages": new_messages, "current_memory": user.memory or "", + "name": user.name, + "profile": user.profile, } } # Call the memory generation service click.echo(click.style(f"Start to generate memory for user {user.id}", fg="green")) - response = AppGenerateService.generate( - app_model=memory_app_model, user=user, args=args, invoke_from=InvokeFrom.SCHEDULER, streaming=False - ) - - # Save the updated memory to the user - if ( - response - and isinstance(response, dict) - and "data" in response - and "outputs" in response["data"] - and "result" in response["data"]["outputs"] - ): - user.memory = response["data"]["outputs"]["result"] - click.echo(click.style(f"Updated memory for user {user.id}", fg="green")) - else: - click.echo(click.style(f"Failed to update memory for user {user.id}, invalid response format", fg="yellow")) try: + response = AppGenerateService.generate( + app_model=memory_app_model, user=user, args=args, invoke_from=InvokeFrom.SCHEDULER, streaming=False + ) + + click.echo(response) if not isinstance(response, dict): return - import json - result = response["data"]["outputs"]["result"] user.memory = result @@ -209,18 +202,25 @@ def process_user_health_summary(user: EndUser, new_messages: str): args = { "inputs": { "name": user.name, - "profile": user.extra_profile, + "profile": user.profile, "new_messages": new_messages, } } click.echo(click.style(f"Start to generate health summary for user {user.id}", fg="green")) - response = AppGenerateService.generate( - app_model=health_summary_app_model, user=user, args=args, invoke_from=InvokeFrom.SCHEDULER, streaming=False - ) try: + response = AppGenerateService.generate( + app_model=health_summary_app_model, + user=user, + args=args, + invoke_from=InvokeFrom.SCHEDULER, + streaming=False, + ) + + click.echo(response) + if not isinstance(response, dict): return