File size: 6,180 Bytes
6e3d57b 3747525 6e3d57b 305d870 6e3d57b 5492f08 6e3d57b 485895c 6e3d57b 89b759b | 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 | """
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
CORVO AI - Complete Teaching Platform
Main Application Entry Point
Run: python app.py
Open: http://localhost:5000
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
"""
import os
from flask import Flask, redirect, url_for, session, flash, render_template, send_from_directory
from flask_socketio import SocketIO
from config import SECRET_KEY, DEBUG, HOST, PORT, REQUIRED_DIRS
# โโโ Create Flask app โโโ
app = Flask(__name__)
app.secret_key = SECRET_KEY
socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading')
# โโโ Create required directories โโโ
for d in REQUIRED_DIRS:
os.makedirs(d, exist_ok=True)
# โโโ Initialize databases โโโ
from database.users import init_users_db
from database.cards import init_cards_db
from database.chat_history import init_chat_history_db
init_users_db()
init_cards_db()
init_chat_history_db()
# โโโ Initialize AI engines โโโ
from chat.agent import AIAgent
from board.engine import BoardEngine
agent = AIAgent()
board_engine = BoardEngine()
# โโโ Register blueprints โโโ
# Auth
from auth.routes import auth_bp, init_auth_socketio
init_auth_socketio(socketio)
app.register_blueprint(auth_bp)
# Chat
from chat.routes import chat_bp, init_chat_agent
init_chat_agent(agent)
app.register_blueprint(chat_bp)
# Board
from board.routes import board_bp, init_board_engine
init_board_engine(board_engine)
app.register_blueprint(board_bp)
# Exam
from exam.routes import exam_bp
app.register_blueprint(exam_bp)
# Media
from media.routes import media_bp, init_media_agent
init_media_agent(agent)
app.register_blueprint(media_bp)
# Market
from market.routes import market_bp
app.register_blueprint(market_bp)
# WebSocket
from websocket.events import register_socketio_events
register_socketio_events(socketio)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ROOT ROUTES
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
from auth.helpers import is_session_valid
from database.users import load_users_db, get_user
from subjects.definitions import SUBJECTS, is_board_enabled
@app.route('/')
def index():
if is_session_valid():
return redirect(url_for('dashboard'))
return redirect(url_for('auth.signup'))
@app.route('/dashboard')
def dashboard():
if not is_session_valid():
session.clear()
flash('ุงูุชูุช ุงูุฌูุณุฉุ ูุฑุฌู ุชุณุฌูู ุงูุฏุฎูู ู
ุฑุฉ ุฃุฎุฑู.', 'error')
return redirect(url_for('auth.login'))
username = session['username']
users_db = load_users_db()
user_data = users_db.get(username, {})
student_type = user_data.get('student_type', 'ุนูู
ู')
all_subjects = SUBJECTS.get(student_type, [])
purchased_subjects = user_data.get('purchased_subjects', ['islamic'])
my_subjects = []
for s in all_subjects:
if s['id'] in purchased_subjects:
subject_info = dict(s)
subject_info['board_enabled'] = is_board_enabled(s['id'])
my_subjects.append(subject_info)
available_subjects = [s for s in all_subjects if s['id'] not in purchased_subjects]
return render_template('dashboard.html',
username=username,
user_data=user_data,
my_subjects=my_subjects,
available_subjects=available_subjects,
balance=user_data.get('balance', 0))
@app.route('/static/<path:filename>')
def serve_static(filename):
return send_from_directory('static', filename)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# MAIN
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
if __name__ == '__main__':
print("\n" + "โ" * 60)
print(" ๐ CORVO AI - Complete Teaching Platform")
print("โ" * 60)
print()
print(" ๐ Architecture:")
print(" โโโ auth/ โ Login, signup, sessions")
print(" โโโ chat/ โ Text AI chat (multi-subject)")
print(" โโโ board/ โ Interactive whiteboard (multi-subject)")
print(" โโโ exam/ โ MCQ exam generation")
print(" โโโ media/ โ Voice & image processing")
print(" โโโ market/ โ Subject purchasing & cards")
print(" โโโ websocket/ โ Real-time session management")
print(" โโโ database/ โ JSON file persistence")
print(" โโโ subjects/ โ Subject definitions & loading")
print()
print(" ๐ง FEATURES:")
print(" โ
Multi-subject support (chat + board)")
print(" โ
Per-user per-subject chat history")
print(" โ
Interactive whiteboard with TTS")
print(" โ
Board supports ANY subject dynamically")
print(" โ
<page>N</page> โ per-subject book page images")
print(" โ
<svg>keyword</svg> โ Icons8 hand-drawn icons")
print(" โ
MCQ exam generation per subject/chapter")
print(" โ
Voice input & image analysis")
print(" โ
Card-based balance & subject purchasing")
print()
print(f" ๐ Open: http://localhost:{PORT}")
print("โ" * 60 + "\n")
socketio.run(app, debug=DEBUG, host="0.0.0.0", port=7860, allow_unsafe_werkzeug=True) |