UserSyncUI / patch_app.py
AUXteam's picture
Upload folder using huggingface_hub
c574339 verified
import re
with open('app.py', 'r') as f:
content = f.read()
new_func = '''
def generate_personas(business_description, customer_profile, num_personas, api_key=None):
if api_key:
os.environ["BLABLADOR_API_KEY"] = api_key
os.environ["OPENAI_API_KEY"] = api_key
import json
from gradio_client import Client
import openai
client = openai.OpenAI()
dp_client = Client("THzva/deeppersona-experience")
personas = []
for _ in range(int(num_personas)):
# 1. Generate initial parameters for the 200 API call
prompt_1 = f"""
Given the following business description and customer profile:
Business: {business_description}
Customer: {customer_profile}
Generate realistic parameters for a persona that fits this profile. Return ONLY a valid JSON object with these EXACT keys:
"Age" (number), "Gender" (string), "Occupation" (string), "City" (string), "Country" (string), "Personal Values" (string), "Life Attitude" (string), "Life Story" (string), "Interests and Hobbies" (string).
Keep the string fields concise (1-2 sentences).
"""
response_1 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt_1}],
response_format={"type": "json_object"}
)
params_1 = json.loads(response_1.choices[0].message.content)
# 2. Call DeepPersona with 200 attributes
result_200 = dp_client.predict(
age=params_1.get("Age", 30),
gender=params_1.get("Gender", "Female"),
occupation=params_1.get("Occupation", "Professional"),
city=params_1.get("City", "New York"),
country=params_1.get("Country", "USA"),
custom_values=params_1.get("Personal Values", "Hardworking"),
custom_life_attitude=params_1.get("Life Attitude", "Positive"),
life_story=params_1.get("Life Story", "Grew up in the city"),
interests_hobbies=params_1.get("Interests and Hobbies", "Reading"),
attribute_count=200,
api_name="/generate_persona"
)
# 3. Use LLM to extract specific truth/details from 200 output for the 400 call
prompt_2 = f"""
Based on this generated persona output:
{result_200}
Extract and enhance specific details to create an updated set of parameters. Return ONLY a valid JSON object with these EXACT keys:
"Age" (number), "Gender" (string), "Occupation" (string), "City" (string), "Country" (string), "Personal Values" (string), "Life Attitude" (string), "Life Story" (string), "Interests and Hobbies" (string).
"""
response_2 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt_2}],
response_format={"type": "json_object"}
)
params_2 = json.loads(response_2.choices[0].message.content)
# 4. Call DeepPersona with 400 attributes
result_400 = dp_client.predict(
age=params_2.get("Age", 30),
gender=params_2.get("Gender", "Female"),
occupation=params_2.get("Occupation", "Professional"),
city=params_2.get("City", "New York"),
country=params_2.get("Country", "USA"),
custom_values=params_2.get("Personal Values", "Hardworking"),
custom_life_attitude=params_2.get("Life Attitude", "Positive"),
life_story=params_2.get("Life Story", "Grew up in the city"),
interests_hobbies=params_2.get("Interests and Hobbies", "Reading"),
attribute_count=400,
api_name="/generate_persona"
)
# 5. Extract final structured data for _persona output
prompt_3 = f"""
Based on this final generated persona output:
{result_400}
Extract the persona details into a structured format. Return ONLY a valid JSON object with these EXACT keys:
"name" (string, make one up if not found), "age" (number), "nationality" (string), "country_of_residence" (string), "occupation" (string), "residence" (string).
"""
response_3 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt_3}],
response_format={"type": "json_object"}
)
final_persona = json.loads(response_3.choices[0].message.content)
final_persona["full_profile_text"] = result_400
personas.append(final_persona)
return personas
'''
# Find the def generate_personas function block
pattern = r"def generate_personas\(business_description, customer_profile, num_personas, api_key=None\):.*?(?=\ndef start_simulation)"
new_content = re.sub(pattern, new_func.strip(), content, flags=re.DOTALL)
with open('app.py', 'w') as f:
f.write(new_content)
print("Patch applied")