|
import os |
|
import pandas as pd |
|
import google.generativeai as genai |
|
import gradio as gr |
|
from google.api_core import retry |
|
|
|
my_api_key = os.environ.get("GOOGLE-API-KEY") |
|
|
|
genai.configure(api_key=my_api_key) |
|
|
|
MODEL_NAME = 'gemini-1.5-flash-latest' |
|
retry_policy = {"retry": retry.Retry(predicate=retry.if_transient_error, initial=10, multiplier= 1.5, timeout=300)} |
|
|
|
model = genai.GenerativeModel( |
|
MODEL_NAME, |
|
generation_config= genai.GenerationConfig( |
|
temperature= 1.0, |
|
top_p= 1, |
|
max_output_tokens=1000, |
|
) |
|
) |
|
|
|
|
|
data_path = os.path.join("docs", "Nigerian_Foods.csv") |
|
json_path = os.path.join("docs", "food_data.json") |
|
|
|
food_data = pd.read_csv(data_path) |
|
|
|
json_data = food_data.to_json(orient="records", lines=False, indent=4) |
|
|
|
with open(json_path, "w") as json_file: |
|
json_file.write(json_data) |
|
|
|
few_shot_prompt = f""" |
|
You are an interactive recipe assistant. Use the following dataset to recommend recipes: |
|
{json_data} |
|
|
|
Instructions: |
|
1. Provide recipes based on the user's query. |
|
2. If the requested recipe is unavailable, suggest the most similar one. |
|
3. Maintain context across multiple messages. |
|
""" |
|
|
|
history = [] |
|
def recipe_chatbot(messages: str, history: list[str]): |
|
ask = { |
|
"current message" : messages, |
|
"previous message": history[::-1] |
|
} |
|
history.append(messages) |
|
response = model.generate_content([few_shot_prompt,ask], request_options=retry_policy) |
|
return response.text |
|
|
|
bot = gr.ChatInterface( |
|
fn=recipe_chatbot, |
|
type="messages" |
|
) |
|
|
|
bot.launch() |
|
|