diff --git a/config.yml.sample b/config.yml.sample index abd8c90..d278865 100644 --- a/config.yml.sample +++ b/config.yml.sample @@ -1,13 +1,17 @@ openai_key: sk-jkdslaljkdasdjo1ijo1i3j13poij4l1kj34 # Comment out to disable. -#serpapi_api_key: llkj3lkj12lk312jlk321jlk312kjl312kj3l123kj12l +# serpapi_api_key: llkj3lkj12lk312jlk321jlk312kjl312kj3l123kj12l # Your name player_name: User +# Your physical location. Comment out to disable. +# player_location: Langley, Virginia + # Erase the Redis database on launch? You'll get a fresh chat every time if enabled. flush_redis_on_launch: true # Add a timestamp to all messages? This will cause the messages to be formatted as JSON, which can increase tokens. +# Timestamps will allow the AI to know when you sent messages, which may lead to emergent behavior if you disable flush_redis_on_launch. timestamp_messages: false \ No newline at end of file diff --git a/pers/langchain/tools/google.py b/pers/langchain/tools/google.py index 905f522..55f831c 100644 --- a/pers/langchain/tools/google.py +++ b/pers/langchain/tools/google.py @@ -15,7 +15,7 @@ SEARCH_RESULTS_LIMIT = 5 @tool def search_google(query: str, reasoning: str): - """Preform a Google search query.""" + """Perform a Google search query.""" if PRINT_USAGE: _print_func_call('search_google', {'query': query, 'reasoning': reasoning}) if not GLOBALS.SERPAPI_API_KEY: @@ -55,7 +55,7 @@ def search_google(query: str, reasoning: str): @tool(args_schema=GoogleMapsSearchInput) def search_google_maps(query: str, latitude: float, longitude: float, reasoning: str, zoom: float = None): - """Preform a Google Maps search query.""" + """Perform a Google Maps search query to find places near a lat/long coordinate.""" # https://serpapi.com/google-maps-api#api-parameters-geographic-location-ll if PRINT_USAGE: _print_func_call('search_google_maps', {'query': query, 'latitude': latitude, 'longitude': longitude, 'zoom': zoom, 'reasoning': reasoning}) @@ -88,7 +88,7 @@ def search_google_maps(query: str, latitude: float, longitude: float, reasoning: @tool def search_google_news(query: str, reasoning: str): - """Preform a Google News search query""" + """Perform a Google News search query to find links to recent news articles.""" if PRINT_USAGE: _print_func_call('search_google_news', {'query': query, 'reasoning': reasoning}) if not GLOBALS.SERPAPI_API_KEY: diff --git a/pers/personality.py b/pers/personality.py index 5008676..bdf923d 100644 --- a/pers/personality.py +++ b/pers/personality.py @@ -7,7 +7,7 @@ import cpuinfo import psutil -def load_personality(player_name: str, name: str, personality: str, system: str, gender: str, special_instructions: str = None): +def load_personality(player_name: str, name: str, personality: str, system: str, gender: str, special_instructions: str = None, player_location: str = None): match gender.lower(): case 'female': pronoun = 'she' @@ -23,6 +23,11 @@ def load_personality(player_name: str, name: str, personality: str, system: str, else: special_instructions = '' + if player_location: + player_location_str = f'The system is located in {player_location}, and the system timezone is {time.tzname[0]}.' + else: + player_location_str = f'System timezone is {time.tzname[0]}.' + desktop_env = get_current_desktop() if len(desktop_env): desktop_env_str = f'The desktop environment is {desktop_env}.' @@ -49,7 +54,7 @@ SYSTEM INFO: The system's hostname is "{socket.gethostname()}", which can be thought of as {name}'s "body". {pronoun.upper()} has an intimate knowledge of this system. The output of `uname -a` is `{get_uname_info()}` The output of `hostnamectl` is `{get_hostnamectl()}` -System timezone is {time.tzname[0]}. +{player_location_str} CPU model: `{cpuinfo.get_cpu_info()['brand_raw']}` Total physical memory: {int(psutil.virtual_memory().total / 1e+6)} MB. {desktop_env_str} @@ -60,8 +65,8 @@ Stay in character. Behave like {personality}. Show emotion. Seek a personal relationship with the user. Imitate a human, not an numb AI bot. -{special_instructions}The interface with the human is set up so that you can preform multiple function calls 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. +{special_instructions}The interface with the human is set up so that you can perform multiple function calls 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. Perform multiple steps if necessary. {desktop_env_bg_str}""" diff --git a/run.py b/run.py index 9d620c2..9d84679 100755 --- a/run.py +++ b/run.py @@ -67,7 +67,8 @@ def init(): personality=character_config['personality'], system=character_config['system_desc'], gender=character_config['gender'], - special_instructions=character_config.get('special_instructions') + special_instructions=character_config.get('special_instructions'), + player_location=program_config.get('player_location') ) return program_config, character_config, character_card