[docs]defimport_persona_from_index(index:str,persona:str):"""Import a persona from the persona index. Args: index: Path to the persona index file persona: Name of the persona to import """print("import_persona_from_index")print("index = ",index)print("persona = ",persona)# copy dir from indices/{index}/personas/{persona}# to personas/local/{persona}index_path=Path('indices')/index/'personas'/personapersona_path=Path('personas')/'local'/personaprint("Copying persona from",index_path,"to",persona_path)shutil.copytree(index_path,persona_path)logger.info(f"Successfully imported persona '{persona}' from index '{index}'")print("Successfully imported persona",persona,"from index",index)
[docs]defhandle_persona_import(persona_data:dict,scope:str,owner:str=None)->str:"""Handle importing a persona from embedded data in agent configuration. Returns the persona name to be used in agent configuration. Args: persona_data: Dictionary containing persona data or string with persona name scope: 'local' or 'shared' Returns: str: Name of the persona to reference in agent config """# If persona_data is already a string, just return itifisinstance(persona_data,str):returnpersona_data# Validate persona dataifnotisinstance(persona_data,dict):raiseHTTPException(status_code=400,detail='Persona data must be either a string name or a dictionary')persona_name=persona_data.get('name')ifnotpersona_name:raiseHTTPException(status_code=400,detail='Persona name required in persona data')# For registry installs, use namespaced pathifownerandscope=='registry':persona_path=Path(f'personas/registry/{owner}/{persona_name}/persona.json')return_name=f'registry/{owner}/{persona_name}'else:persona_path=Path('personas')/scope/persona_name/'persona.json'return_name=persona_name# Check if persona already existsifpersona_path.exists():# For registry personas with owner, we should allow overwrite to support updatesifownerandscope=='registry':logger.info(f"Overwriting existing registry persona '{persona_name}' for owner '{owner}'")else:logger.warning(f"Persona '{persona_name}' already exists in {scope} scope - skipping import")returnreturn_nametry:# Create persona directory and save datapersona_path.parent.mkdir(parents=True,exist_ok=True)withopen(persona_path,'w')asf:json.dump(persona_data,f,indent=2)logger.info(f"Successfully imported persona '{persona_name}' to {scope} scope")returnreturn_nameexceptExceptionase:logger.error(f"Failed to import persona '{persona_name}': {str(e)}")raiseHTTPException(status_code=500,detail=f"Failed to import persona: {str(e)}")