AforativeBot / app.py
measmonysuon's picture
Update app.py
3fb5a70 verified
raw
history blame
4.34 kB
import telebot
import os
import requests
import google.generativeai as genai
import tempfile
import logging
import re
from flask import Flask, request
from requests.exceptions import RequestException, ConnectionError
from telebot.apihelper import ApiTelegramException
import time
# Replace with your actual API keys and bot token
GOOGLE_API_KEY = 'AIzaSyAYXUMnwmR4nUGDCs97FJJsafcQAPAAuzE'
BOT_TOKEN = '7484321656:AAFaswxTqaSHu_s4jd_pk2Q2OJJWYcWHwAM'
# Initialize the Telegram bot
bot = telebot.TeleBot(BOT_TOKEN)
# Configure logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Configure Google Generative AI
genai.configure(api_key=GOOGLE_API_KEY)
# Create the model
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config=generation_config,
system_instruction="Please respond to user input"
)
chat_session = model.start_chat(
history=[
{"role": "user", "parts": ["hi\n"]},
{"role": "model", "parts": ["Hello! πŸ‘‹ How can I help you today? 😊 \n"]},
{"role": "user", "parts": ["I am looking for photo booth service?"]},
{"role": "model", "parts": ["That's great! πŸŽ‰ I can definitely help you with information about Aforative Media's photo booth services. \n\nTo give you the most relevant information, could you tell me a little more about what you're looking for? ..."]},
{"role": "user", "parts": ["How much for photo booth services?"]},
{"role": "model", "parts": ["You're smart to ask about pricing upfront! πŸ˜‰ \n\nAforative Media's Mr. & Ms. Booth photo booth services start at **USD 390 for a minimum of 2 hours**. ..."]},
{"role": "user", "parts": ["How about videography service?"]},
{"role": "model", "parts": ["You're thinking about capturing the memories on film too? Excellent choice! Videography adds a whole other dimension to remembering special events. \n\nAforative Media offers excellent videography services, and just like their photo booths, their videography packages are competitively priced and flexible. ..."]},
]
)
# Initialize Flask app
app = Flask(__name__)
# Define the webhook route
@app.route('/' + BOT_TOKEN, methods=['POST'])
def webhook():
try:
json_str = request.get_data(as_text=True)
update = telebot.types.Update.de_json(json_str)
handle_message(update)
except ConnectionError as e:
logger.error(f"Network-related error occurred: {e}")
except ApiTelegramException as e:
logger.error(f"Telegram API error occurred: {e}")
except Exception as e:
logger.error(f"Unexpected error occurred: {e}")
return 'ok', 200
# Function to handle incoming messages
def handle_message(update):
message = update.message
try:
prompt = f"Respond to the user: {message.text}"
response = chat_session.send_message(prompt) # Generate response using text and prompt
response_text = response.text
# Determine whether to reply in private or group chat with Markdown formatting
if message.chat.type == 'private':
bot.send_message(message.chat.id, response_text, parse_mode='Markdown')
else:
bot.send_message(message.chat.id, response_text, parse_mode='Markdown')
logger.info(f"Response sent to chat_id {message.chat.id}")
except Exception as e:
logger.error(f"Error during GenAI processing: {e}")
error_message = "Sorry, I can't answer this query right now but I will improve from time to time."
if message.chat.type == 'private':
bot.send_message(message.chat.id, error_message, parse_mode='Markdown')
else:
bot.send_message(message.chat.id, error_message, parse_mode='Markdown')
logger.error(f"Error message sent to chat_id {message.chat.id}")
# Function to set the webhook with Telegram
def set_webhook():
webhook_url = 'https://your-huggingface-space-url/' + BOT_TOKEN
bot.set_webhook(url=webhook_url)
if __name__ == "__main__":
set_webhook()
app.run(host='0.0.0.0', port=5000)