Spaces:
Sleeping
Sleeping
| import google.generativeai as genai | |
| import re | |
| import json | |
| import os | |
| GEMINI_API_KEY = os.getenv("GEMINI_API_KEY") | |
| genai.configure(api_key=GEMINI_API_KEY) | |
| # model = genai.GenerativeModel('gemini-1.5-pro') # Or 'gemini-pro' | |
| model = genai.GenerativeModel('gemini-2.0-flash') | |
| def get_travel_info(user_input): | |
| """Uses Gemini AI to extract travel intent, origin, destination, and other travel details from user input.""" | |
| prompt = f""" | |
| You are a travel assistant. Your job is to extract the travel intent, origin (from where), destination (to where), and departure date from a user's query. | |
| If the origin is not mentioned, return null. | |
| If the intent is not related to travel, return the intent and location in JSON format ONLY, like this: | |
| If either the intent, the origin, the destination, the departure_date, duration, budget, or num_people is not found, return null for that field. | |
| ```json | |
| {{ | |
| "intent": "the extracted intent", | |
| "from": "the extracted origin", | |
| "to": "the extracted destination", | |
| "departure_date": "the extracted departure date", | |
| "duration": "the extracted duration", | |
| "budget": "the extracted budget", | |
| "num_people": "the extracted number of people" | |
| }} | |
| ``` | |
| User Query: I want to plan a trip from Los Angeles to Paris for 5 days with a budget of $2000 for 2 people, leaving on March 15th. | |
| ```json | |
| {{ | |
| "intent": "plan a trip", | |
| "from": "Los Angeles", | |
| "to": "Paris", | |
| "departure_date": "March 15th", | |
| "duration": "5 days", | |
| "budget": "$2000", | |
| "num_people": "2" | |
| }} | |
| ``` | |
| User Query: Find a hotel in New York City for 3 nights with a budget of $1500 for 1 person, leaving on April 10th. | |
| ```json | |
| {{ | |
| "intent": "Find a hotel", | |
| "from": null, | |
| "to": "New York City", | |
| "departure_date": "April 10th", | |
| "duration": "3 nights", | |
| "budget": "$1500", | |
| "num_people": "1" | |
| }} | |
| ``` | |
| User Query: What is the weather like today? | |
| ```json | |
| {{ | |
| "intent": null, | |
| "from": null, | |
| "to": null, | |
| "departure_date": null, | |
| "duration": null, | |
| "budget": null, | |
| "num_people": null | |
| }} | |
| ``` | |
| User Query: {user_input} | |
| """ | |
| response = model.generate_content(prompt) | |
| response_text = response.text | |
| # print(f"Raw Gemini Response: {response_text}") # Debugging | |
| try: | |
| # Use regular expression to find the JSON string within the response | |
| match = re.search(r"\{.*?\}", response_text, re.DOTALL) | |
| if match: | |
| json_string = match.group(0).strip() | |
| data = json.loads(json_string) | |
| intent = data.get("intent") | |
| from_location = data.get("from") | |
| to_location = data.get("to") | |
| departure_date = data.get("departure_date") | |
| duration = data.get("duration") | |
| budget = data.get("budget") | |
| num_people = data.get("num_people") | |
| return { | |
| "intent": intent, | |
| "from": from_location, | |
| "to": to_location, | |
| "departure_date": departure_date, | |
| "duration": duration, | |
| "budget": budget, | |
| "num_people": num_people | |
| } | |
| else: | |
| print("Error: No JSON found in Gemini response.") | |
| return None | |
| except json.JSONDecodeError: | |
| print("Error: Could not decode JSON after extraction.") | |
| return None | |
| except Exception as e: | |
| print(f"An unexpected error occurred: {e}") | |
| return None | |
| def get_travel_recommendations(intent, from_location, to_location, departure_date, duration, budget, num_people): | |
| """Uses Gemini AI to provide travel recommendations based on intent, origin, and destination.""" | |
| prompt = f""" | |
| You are a travel assistant. Based on the given intent, origin (from where), destination (to where), duration, budget, and number of people, provide helpful travel recommendations in Markdown format. | |
| - Provide some common websites for booking flights as well as the like to the web. | |
| - List at least 2 of the cheapest flight options. | |
| - Provide at least 10 recommended attractions. | |
| - Provide at least 5 accommodations. | |
| - Provide at least 10 activities. | |
| - Provide at least 10 food recommendations. | |
| - Keep in mind the budget and number of people when suggesting accommodations and activities. | |
| - Use NTD as the currency | |
| Intent: {intent} | |
| From: {from_location} | |
| To: {to_location} | |
| Departure Date: {departure_date} | |
| Duration: {duration} | |
| Budget: {budget} | |
| Number of People: {num_people} | |
| Your response should look like this: | |
| # π Travel Guide: {to_location} | |
| ## π€οΈ Weather: | |
| - Weather details for {to_location} | |
| ## βοΈ Flights from {from_location} to {to_location}: | |
| - | |
| - | |
| ## π³ Mobile Payment: | |
| - | |
| - | |
| ## π Local Transportations: | |
| - | |
| - | |
| ## π¨ Accommodations: | |
| - | |
| - | |
| ## π° Attractions: | |
| - | |
| - | |
| ## π Activities: | |
| - | |
| - | |
| ## π½οΈ Foods to Try: | |
| - | |
| - | |
| ## π‘ Tips for Planning: | |
| - | |
| - | |
| """ | |
| response = model.generate_content(prompt) | |
| return response.text | |