| import gradio as gr |
| import openai |
| import os |
| import pandas as pd |
|
|
|
|
| openai.api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
| def generate_itinerary(prompt): |
| system_prompt = ( |
| "You are a helpful travel assistant. Given a short travel request, " |
| "generate a detailed day-by-day itinerary in a clear format.\n\n" |
| "Requirements:\n" |
| "- Break down the trip by days (Day 1, Day 2, etc.)\n" |
| "- Include morning, afternoon, and evening suggestions\n" |
| "- Be specific but concise\n" |
| "- Focus on the traveler's stated interests\n" |
| ) |
|
|
| user_prompt = f"Prompt: {prompt}\nItinerary:\n" |
|
|
| try: |
| response = openai.chat.completions.create( |
| model="gpt-4", |
| messages=[ |
| {"role": "system", "content": system_prompt}, |
| {"role": "user", "content": user_prompt} |
| ], |
| temperature=0.7, |
| max_tokens=700, |
| ) |
| content = response.choices[0].message.content.strip() |
| |
| return content.replace("\n", "<br>") |
| except Exception as e: |
| return f"Error: {e}" |
|
|
|
|
| def batch_generate_itineraries(multi_prompt): |
| lines = [line.strip() for line in multi_prompt.splitlines() if line.strip()] |
| results = [] |
| for req in lines: |
| itinerary = generate_itinerary(req) |
| results.append((req, itinerary)) |
| return results |
|
|
|
|
| iface = gr.Interface( |
| fn=batch_generate_itineraries, |
| inputs=gr.Textbox( |
| lines=10, |
| placeholder="Enter one travel request per line\nExample:\n3-day trip to Rome focused on history and food", |
| label="Multiple Travel Requests" |
| ), |
| outputs=gr.Dataframe( |
| headers=["Request", "Generated Itinerary"], |
| datatype=["str", "html"], |
| label="Itineraries Table" |
| ), |
| title="🧳 Batch Travel Itinerary Generator", |
| description="Paste multiple travel requests (one per line). Get structured GPT-4 itineraries in a table." |
| ) |
|
|
| if __name__ == "__main__": |
| iface.launch() |