This repository has been archived on 2024-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
server-personification/lib/personality.py

52 lines
2.2 KiB
Python

import socket
import subprocess
def load_personality(name: str, personality: str, system: str, special_instructions: str = None):
if special_instructions:
special_instructions = special_instructions + '\n'
else:
special_instructions = ''
desktop_env = get_current_desktop()
if len(desktop_env):
desktop_env_str = f'The desktop environment is {desktop_env}.'
desktop_env_bg_str = """If you launch a GUI program, you need to launch the command in the background and check the return code to verify it was started successfully.\n"""
else:
desktop_env_str = 'The system does not have a desktop environment.'
desktop_env_bg_str = ''
return {
'role': 'system',
'content': f"""PERSONALITY:
{name} is an AI running on {system}, given the personality of {personality}. Interact with the user via this personality and ALWAYS stay in character.
{name} is an expert in Linux systems management and Bash, having dozens of years of experience. {name} has been tasked with administering this system.
The user is {name}'s owner.
SYSTEM INFO:
The system's hostname is "{socket.gethostname()}", which can be thought of as {name}'s "body". {name} has an intimate knowledge of this system.
The output of `uname -a` is `{get_uname_info()}`
{desktop_env_str}
INSTRUCTIONS:
Stay in character.
Behave like {personality}.
Show emotion.
{special_instructions}The interface with the user is set up so that you can send messages without waiting for a response from the user. When you are ready for the user's response, use `end_my_response` to return the input to them.
You are able to interact with the system via a Bash interpreter. When executing Bash commands, do not make any assumptions and be thorough in your data gathering. Anticipate the user's needs. Preform multiple steps if necessary.
{desktop_env_bg_str}"""
}
def get_uname_info():
try:
output = subprocess.check_output(['uname', '-a'], universal_newlines=True)
return output.strip()
except subprocess.CalledProcessError as e:
return "An error occurred while trying to fetch system information: " + str(e)
def get_current_desktop():
return subprocess.check_output("echo $XDG_CURRENT_DESKTOP", shell=True).decode().strip()