From c115f656a48ebad1d40006c786ff92b809943292 Mon Sep 17 00:00:00 2001 From: projectmoon Date: Mon, 5 Aug 2024 14:38:55 +0200 Subject: [PATCH] OSM: better accuracy in multi-turn conversations --- CHANGELOG.md | 5 +++++ osm.py | 30 ++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a6efa8..f4ec638 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # OpenStreetMap Tool +**0.2.5:** + - Better accuracy in turn by turn conversations: model encouraged to + specify the name of the city and country when searching, so it's + less likely to report results from a different country. + **0.2.4:** - Actually make use of the limit parameter when searching Nominatim. diff --git a/osm.py b/osm.py index 8c9781c..fde7871 100644 --- a/osm.py +++ b/osm.py @@ -2,7 +2,7 @@ title: OpenStreetMap Tool author: projectmoon author_url: https://git.agnos.is/projectmoon/open-webui-filters -version: 0.2.4 +version: 0.2.5 license: AGPL-3.0+ required_open_webui_version: 0.3.9 """ @@ -22,6 +22,14 @@ NO_RESULTS = ("No results found. Tell the user you found no results. " "Do not make up answers or hallucinate. Only say you " "found no results.") +NO_CONFUSION = ("**IMPORTANT!:** Check that the results match the location " + "the user is talking about, by analyzing the conversation history. " + "Sometimes there are places with the same " + "names, but in different cities or countries. If the results are for " + "a different city or country than the user is interested in, say so: " + "tell the user that the results are for the wrong place, and tell them " + "to be more specific in their query.") + def way_has_info(way): """ Determine if an OSM way entry is useful to us. This means it @@ -268,10 +276,12 @@ class OsmSearcher: f' - Example: You can find it on [OpenStreetMap]({example_link})' "\n\nAnd so on.\n\n" "Only use relevant results. If there are no relevant results, " - "say so. Do not make up answers or hallucinate." + "say so. Do not make up answers or hallucinate. " + f"\n\n{NO_CONFUSION}\n\n" "The primary results are below. " "Remember that the CLOSEST result is first, and you should use " - "that result first." + "that result first. " + "Prioritize OSM **nodes** over **ways** and **relations**." "\n\n----------\n\n" f"{str(things_nearby)}" f"{extra_info}" @@ -340,7 +350,7 @@ class Tools: OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of nearby grocery stores or supermarkets, if found. """ searcher = OsmSearcher(self.valves) @@ -352,7 +362,7 @@ class Tools: Finds bakeries on OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of nearby bakeries, if found. """ searcher = OsmSearcher(self.valves) @@ -365,7 +375,7 @@ class Tools: OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of nearby restaurants, eateries, etc, if found. """ tags = [ @@ -388,7 +398,7 @@ class Tools: activities on OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of swimming poools or places, if found. """ tags = [ @@ -407,7 +417,7 @@ class Tools: activities on OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of recreational places, if found. """ tags = [ @@ -429,7 +439,7 @@ class Tools: OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of nearby places of worship, if found. """ tags = ["amenity=place_of_worship"] @@ -443,7 +453,7 @@ class Tools: OpenStreetMap near a given place or address. The location of the address or place is reverse geo-coded, then nearby results are fetched from OpenStreetMap. - :param place: The name of a place or an address, which will be sent to Nominatim. + :param place: The name of a place or an address. City and country must be specified, if known. :return: A list of nearby accommodation, if found. """ tags = [