52 lines
2.2 KiB
Python
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()
|