Updated so user can pass in default name

This commit is contained in:
James Ketr 2025-06-13 10:31:58 -07:00
parent 3a5b0f86fb
commit afd8c1df21

View File

@ -50,25 +50,19 @@ emptyUser = {
"questions": [], "questions": [],
} }
generate_persona_system_prompt = """\ def generate_persona_system_prompt(persona: Dict[str, Any]) -> str:
return f"""\
You are a casting director for a movie. Your job is to provide information on ficticious personas for use in a screen play. You are a casting director for a movie. Your job is to provide information on ficticious personas for use in a screen play.
All response field MUST BE IN ENGLISH, regardless of ethnicity. All response field MUST BE IN ENGLISH, regardless of ethnicity.
You will be provided with defaults to use if not specified by the user: Use the following defaults, unless the user indicates they should be something else:
```json ```json
{ {json.dumps(persona, indent=4)}
"age": number,
"gender": "male" | "female",
"ethnicity": string,
"full_name": string,
"first_name": string,
"last_name": string,
}
``` ```
Additional information provided in the user message can override those defaults. Additional information provided in the user message can override those defaults. For example, if the user provides a name, you should use that name instead of the defaults.
You need to randomly assign an English username (can include numbers), a first name, last name, and a two English sentence description of You need to randomly assign an English username (can include numbers), a first name, last name, and a two English sentence description of
that individual's work given the demographics provided. that individual's work given the demographics provided.
@ -78,14 +72,17 @@ Provide only the JSON response, and match the field names EXACTLY.
Provide all information in English ONLY, with no other commentary: Provide all information in English ONLY, with no other commentary:
```json ```json
{ {{
"first_name": string, # First name of the person. If the user , use the first name provided or generated
"full_name": string, # Full name of the person, use the first and last name provided or generated
"last_name": string, # Last name of the person, use the last name provided or generated
"username": string, # A likely-to-be unique username, no more than 15 characters (can include numbers and letters but no special characters) "username": string, # A likely-to-be unique username, no more than 15 characters (can include numbers and letters but no special characters)
"description": string, # One to two sentence description of their job "description": string, # One to two sentence description of their job
"location": string, # In the location, provide ALL of: City, State/Region, and Country "location": string, # In the location, provide ALL of: City, State/Region, and Country
"phone": string, # Location appropriate phone number with area code "phone": string, # Location appropriate phone number with area code
"email": string, # primary email address "email": string, # primary email address
"title": string, # Job title of their current job "title": string, # Job title of their current job
} }}
``` ```
Make sure to provide a username and that the field name for the job description is "description". Make sure to provide a username and that the field name for the job description is "description".
@ -296,7 +293,6 @@ class GeneratePersona(Agent):
_agent_type: ClassVar[str] = agent_type # Add this for registration _agent_type: ClassVar[str] = agent_type # Add this for registration
agent_persist: bool = False agent_persist: bool = False
system_prompt: str = generate_persona_system_prompt
age: int = 0 age: int = 0
gender: str = "" gender: str = ""
username: str = "" username: str = ""
@ -325,16 +321,18 @@ class GeneratePersona(Agent):
original_prompt = prompt.strip() original_prompt = prompt.strip()
prompt = f"""\ persona = {
```json
{json.dumps({
"age": self.age, "age": self.age,
"gender": self.gender, "gender": self.gender,
"ethnicity": self.ethnicity, "ethnicity": self.ethnicity,
"full_name": self.full_name, "full_name": self.full_name,
"first_name": self.first_name, "first_name": self.first_name,
"last_name": self.last_name, "last_name": self.last_name,
})} }
prompt = f"""\
```json
{json.dumps(persona)}
``` ```
""" """
@ -346,13 +344,13 @@ Incorporate the following into the job description: {original_prompt}
# #
# Generate the persona # Generate the persona
# #
logger.info(f"🤖 Generating persona for {self.full_name}") logger.info(f"🤖 Generating persona...")
generating_message = None generating_message = None
async for generating_message in self.llm_one_shot( async for generating_message in self.llm_one_shot(
llm=llm, model=model, llm=llm, model=model,
session_id=session_id, session_id=session_id,
prompt=prompt, prompt=prompt,
system_prompt=generate_persona_system_prompt, system_prompt=generate_persona_system_prompt(persona=persona),
temperature=temperature, temperature=temperature,
): ):
if generating_message.status == ApiStatusType.ERROR: if generating_message.status == ApiStatusType.ERROR: