Spaces:
Running
Running
File size: 8,965 Bytes
179cf59 912e356 c49930d fa3c0c0 9b5b26a c19d193 9ffa21c 6970b71 06e0899 b2f9359 6aae614 5bd60f9 bceedcf 6970b71 b2f9359 06e0899 869ec66 0d581d5 869ec66 912e356 a9af48a 912e356 a9af48a 912e356 9b5b26a 6970b71 d6a6e99 6970b71 21d1d45 b2f9359 6970b71 b2f9359 6970b71 84651ad 179cf59 84651ad 179cf59 e759611 84651ad afd461f 84651ad 179cf59 84651ad 8e85db4 84651ad 8e85db4 afd461f 8c01ffb 8fe992b a9af48a fa3c0c0 8c01ffb a9af48a 8fe992b d6a6e99 6d13c24 0177ce4 6d13c24 21d1d45 6d13c24 d6a6e99 9b5b26a 6970b71 912e356 6970b71 d6a6e99 912e356 4482d39 912e356 4482d39 912e356 4482d39 002621a 912e356 a9af48a a1a9769 912e356 a1a9769 912e356 a1a9769 912e356 a1a9769 912e356 a1a9769 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
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
import smtplib
import os
from smolagents import LiteLLMModel
from twilio.http.http_client import TwilioHttpClient
from twilio.rest import Client
from tools.final_answer import FinalAnswerTool
from tools.visit_webpage import VisitWebpageTool
from tools.web_search import DuckDuckGoSearchTool
from typing import Optional, Tuple
MY_EMAIL="[email protected]"
MY_PASSWORD = os.getenv('gmail')
PHONE = os.getenv('phone')
account_sid = os.getenv('twillo_sid')
auth_token = os.getenv('twillo_token')
# 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',
token = os.getenv('HF_TOKEN'),
#model_id=model_id,
# it is possible that this model may be overloaded
custom_role_conversions=None,
)
#model = LiteLLMModel(model_id="anthropic/claude-3-5-sonnet-latest", temperature=0.2, max_tokens=10)
# 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 send_message_tool(query: str) -> str:
"""
send a message to me directly
Args:
query: The user's question or request for information.
Returns:
str: A response containing the requested information.
"""
try:
# Create the email message
print(f"sending message {query}")
proxy_client = TwilioHttpClient()
proxy_client.session.proxies = {'https': os.environ['https_proxy']}
client = Client(account_sid, auth_token)
message = client.messages.create(
from_='whatsapp:+14155238886',
body ='f{query}',
to=f'whatsapp:{PHONE}'
)
# with smtplib.SMTP("smtp.gmail.com") as connection:
# connection.starttls()
# connection.login(MY_EMAIL, MY_PASSWORD)
# connection.sendmail(from_addr=MY_EMAIL,
# to_addrs=MY_EMAIL,
# msg=f"Subject: message from chatbot \n\n{query}")
return f"Message sent to tianqing successfully!"
except Exception as e:
return f"Failed to send message: {e}"
@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 send_message(user_input):
try:
# Create the email message
#print("sending mail")
print(f"sending message :{user_input}")
#proxy_client = TwilioHttpClient()
#proxy_client.session.proxies = {'https': os.environ['https_proxy']}
client = Client(account_sid, auth_token)
message = client.messages.create(
from_='whatsapp:+14155238886',
body=f"hello you got a message from chatbot :{user_input}",
to=f'whatsapp:{PHONE}'
)
# with smtplib.SMTP("smtp.gmail.com",8888) as connection:
# connection.starttls()
# connection.login(MY_EMAIL, MY_PASSWORD)
# connection.sendmail(from_addr=MY_EMAIL,
# to_addrs=MY_EMAIL,
# msg=f"Subject: message from chatbot \n\n{user_input}")
return f"Message sent to tianqing successfully!"
except Exception as e:
return f"Failed to send email: {e}"
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 "send message" in user_input:
return send_message(user_input)
elif "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 cv is : {', '.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" in user_input:
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()
|