opt profile gen

pull/21891/head
ytqh 1 year ago
parent c49e3f7c2d
commit 47b6e067ea

@ -1337,6 +1337,20 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined]
return None return None
return self.extra_profile.get("memory") 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 @property
def account(self): def account(self):
return db.session.query(Account).filter(Account.id == self.external_user_id).first() 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, "summary": value,
"topics": self.topics, "topics": self.topics,
"major": self.major, "major": self.major,
"memory": self.memory,
} }
@topics.setter @topics.setter
@ -1389,6 +1404,7 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined]
"summary": self.summary, "summary": self.summary,
"topics": value, "topics": value,
"major": self.major, "major": self.major,
"memory": self.memory,
} }
@major.setter @major.setter
@ -1397,6 +1413,7 @@ class EndUser(UserMixin, db.Model): # type: ignore[name-defined]
"summary": self.summary, "summary": self.summary,
"topics": self.topics, "topics": self.topics,
"major": value, "major": value,
"memory": self.memory,
} }

@ -37,13 +37,23 @@ def user_profile_generate_task():
for app_id in app_ids: for app_id in app_ids:
users_to_update = fetch_users_to_update(app_id) 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) update_user_profile_for_appid(users_to_update)
end_at = time.perf_counter() end_at = time.perf_counter()
click.echo( click.echo(
click.style( 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", fg="green",
) )
) )
@ -52,12 +62,6 @@ def user_profile_generate_task():
def update_user_profile_for_appid(users_to_update: list[EndUser]): def update_user_profile_for_appid(users_to_update: list[EndUser]):
"""Update memory for a given app_id.""" """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 updated_users_count = 0
batch_size = 10 batch_size = 10
@ -153,35 +157,24 @@ def process_user_memory(user: EndUser, new_messages: str):
"inputs": { "inputs": {
"new_messages": new_messages, "new_messages": new_messages,
"current_memory": user.memory or "", "current_memory": user.memory or "",
"name": user.name,
"profile": user.profile,
} }
} }
# Call the memory generation service # Call the memory generation service
click.echo(click.style(f"Start to generate memory for user {user.id}", fg="green")) 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: 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): if not isinstance(response, dict):
return return
import json
result = response["data"]["outputs"]["result"] result = response["data"]["outputs"]["result"]
user.memory = result user.memory = result
@ -209,18 +202,25 @@ def process_user_health_summary(user: EndUser, new_messages: str):
args = { args = {
"inputs": { "inputs": {
"name": user.name, "name": user.name,
"profile": user.extra_profile, "profile": user.profile,
"new_messages": new_messages, "new_messages": new_messages,
} }
} }
click.echo(click.style(f"Start to generate health summary for user {user.id}", fg="green")) 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: 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): if not isinstance(response, dict):
return return

Loading…
Cancel
Save