-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
101 lines (80 loc) · 3.12 KB
/
app.py
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
from flask import Flask, request, render_template, Response
from markupsafe import Markup
import markdown2
import os
from config import configure_ai # Import the AI model configuration
import google.generativeai as genai
import requests
from threading import Thread # Add this import at the top
import logging # For error logging
# Initialize Flask app
app = Flask(__name__)
app.secret_key = os.environ.get('SECRET_KEY', 'dev-secret-key-123') # Update this
# Initialize AI model
model = configure_ai()
# Telegram Bot Setup
TELEGRAM_TOKEN = os.environ['TELEGRAM_BOT_TOKEN']
BASE_URL = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}"
def send_message(chat_id, text):
url = f"{BASE_URL}/sendMessage"
payload = {
"chat_id": chat_id,
"text": text,
"parse_mode": "Markdown"
}
requests.post(url, json=payload)
def process_telegram_message(message):
chat_id = message['chat']['id']
doubt = message.get('text', '')
# Generate explanation
explanation = model.generate_content(f"Explain {doubt} in simple terms with examples").text
# Generate practice questions
questions = model.generate_content(f"Generate 3 practice questions about {doubt} with answers").text
response = f"*Explanation*:\n{explanation}\n\n*Practice Questions*:\n{questions}"
send_message(chat_id, response)
def setup_telegram_webhook(app):
@app.route('/telegram-webhook', methods=['POST'])
def telegram_webhook():
update = request.json
if 'message' in update:
Thread(target=process_telegram_message, args=(update['message'],)).start()
return '', 200
# Set webhook URL
webhook_url = f"{os.environ['RENDER_EXTERNAL_URL']}/telegram-webhook"
requests.get(f"{BASE_URL}/setWebhook?url={webhook_url}")
# Call to set up the Telegram webhook after the AI model is initialized
setup_telegram_webhook(app)
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Markdown filter for rendering
@app.template_filter('markdown')
def markdown_filter(text):
return Markup(markdown2.markdown(text))
@app.route('/')
def index():
return render_template('index.html')
@app.route('/resolve_doubt', methods=['POST'])
def resolve_doubt():
doubt = request.form['doubt']
# Generate explanation
explanation = model.generate_content(f"Explain {doubt} in simple terms with examples").text
# Generate practice questions
questions = model.generate_content(f"Generate 3 practice questions about {doubt} with answers").text
return render_template('index.html',
response=explanation,
practice_questions=questions)
@app.route('/stream')
def stream():
def generate():
user_query = request.args.get('q')
for chunk in generate_response(user_query):
yield f"data: {chunk}\n\n"
return Response(generate(), mimetype='text/event-stream')
# Render Deployment Setup (web server)
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)