home_page_chat / app.py
tiantian-paris's picture
update info
4482d39
raw
history blame
6.24 kB
import json
import gradio as gr
from smolagents import CodeAgent
import json
import random
from smolagents import TransformersModel
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
import numpy as np
from tools.final_answer import FinalAnswerTool
from tools.visit_webpage import VisitWebpageTool
from tools.web_search import DuckDuckGoSearchTool
from typing import Optional, Tuple
model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud'
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
# model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
model_id=model_id,
# it is possible that this model may be overloaded
custom_role_conversions=None,
)
# Import tool from Hub
# image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
#with open("prompts.yaml", 'r') as stream:
# prompt_templates = yaml.safe_load(stream)
#final_answer = FinalAnswerTool()
visit_webpage = VisitWebpageTool()
web_search = DuckDuckGoSearchTool()
@tool
def provide_my_information(query: str) -> str:
"""
Provide information about me (Tianqing LIU)based on the user's query.
Args:
query: The user's question or request for information.
Returns:
str: A response containing the requested information.
"""
# Convert the query to lowercase for case-insensitive matching
query = query.lower()
my_info = None
with open("info/info.json", 'r') as file:
my_info = json.load(file)
# Check for specific keywords in the query and return the corresponding information
if "who" in query or "about" in query or "introduce" in query or "presentation" in query:
return f" {my_info['introduction']}."
if "name" in query:
return f"My name is {my_info['name']}."
elif "location" in query:
return f"I am located in {my_info['location']}."
elif "occupation" in query or "job" in query or "work" in query:
return f"I work as a {my_info['occupation']}."
elif "education" in query or "educational" in query:
return f"I have a {my_info['education']}."
elif "skills" in query or "what can you do" in query:
return f"My skills include: {', '.join(my_info['skills'])}."
elif "hobbies" in query or "interests" in query:
return f"My hobbies are: {', '.join(my_info['hobbies'])}."
elif "contact" in query or "email" in query or "linkedin" in query or "github" in query or "cv" in query or "resume" in query:
contact_info = my_info["contact"]
return (
f"You can contact me via email at {contact_info['email']}, "
f"connect with me on LinkedIn at {contact_info['linkedin']}, "
f"or check out my GitHub profile at {contact_info['github']}."
f"or check out my website at {contact_info['website']}."
)
else:
return "I'm sorry, I don't have information on that. Please ask about my name, location, occupation, education, skills, hobbies, or contact details."
agent = CodeAgent(
model=model,
tools=[provide_my_information], ## add your tools here (don't remove final answer)
max_steps=1,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None
#prompt_templates=prompt_templates
)
def chatbot_response_json(user_input):
my_info = None
user_input = user_input.lower()
with open("info/info.json", 'r') as file:
my_info = json.load(file)
if "who" in user_input or "about" in user_input or "introduce" in user_input or "presentation" in user_input:
return f" {my_info['introduction']}."
elif "name" in user_input:
return f"My name is {my_info['name']}."
elif "hello" in user_input:
return f"Hello! I'm here to assist you. Feel free to ask me about my background, experience, education, or anything else you'd like to know!"
elif "bye" in user_input or "bye" in user_input:
return f"Bye."
elif "location" in user_input:
return f"I am located in {my_info['location']}."
elif "phone" in user_input or "number" in user_input:
return f"you can send me a message directly here. ex: send message : your message"
elif "experiences" in user_input or "career" in user_input or "experience" in user_input:
return f"{my_info['career']}."
elif "occupation" in user_input or "job" in user_input or "work" in user_input:
return f"I work as a {my_info['occupation']}."
elif "education" in user_input or "educational" in user_input:
return f"I have a {my_info['education']}."
elif "skills" in user_input or "what can you do" in user_input:
return f"My skills include: {', '.join(my_info['skills'])}."
elif "hobbies" in user_input or "interests" in user_input:
return f"My hobbies are: {', '.join(my_info['hobbies'])}."
elif "cv" in user_input or "resume" in user_input:
return f"My cvs are: {', '.join(my_info['cv'])}."
elif "contact" in user_input or "email" in user_input or "e-mail" in user_input or "linkedin" in user_input or "github":
contact_info = my_info["contact"]
return (
f"You can contact me via email at {contact_info['email']}, "
f"connect with me on LinkedIn at {contact_info['linkedin']}, "
f"or check out my GitHub profile at {contact_info['github']}."
f"or check out my website at {contact_info['website']}."
)
else:
return agent.run(user_input)
def chatbot_response(user_input, history):
"""
Get a response from the chatbot
"""
request = user_input
history = history or []
response = chatbot_response_json(request) # Call the chatbot logic
#history.append((user_input, response))
yield response
# Create the Gradio interface
#demo = gr.ChatInterface(fn=chatbot_response, title="My Personal Chatbot", description="Ask me anything about myself!")
demo = gr.ChatInterface(
chatbot_response,
type="messages",
multimodal=False,
title="Ask me anything about.....",
)
demo.launch()
if __name__ == "__main__":
demo.launch()