import os # Set cache dirs (must match Dockerfile env vars) os.environ['HOME'] = '/app' os.environ['HF_HOME'] = '/app/.hf_cache' os.environ['LANGTOOL_HOME'] = '/app/.ltool_cache' os.environ['XDG_CACHE_HOME'] = '/app/.cache' from flask import Flask, request, jsonify from paragraph_checker import ParagraphCorrector from grammar_chatbot import GrammarChatbot import logging app = Flask(__name__) # Initialize services paragraph_service = ParagraphCorrector() chatbot_service = GrammarChatbot() # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @app.route('/', methods=['GET']) def home(): return '''

📝 Convomate Module

Use POST /correct_text or /chat endpoints.

GET /health for health check.

''' @app.route('/correct_text', methods=['POST']) def handle_paragraph(): """Endpoint for conservative paragraph correction""" data = request.get_json() text = data.get('paragraph', '').strip() if not text: return jsonify({"error": "No paragraph provided"}), 400 try: corrected = paragraph_service.conservative_correction(text) return jsonify({ "original_text": text, "grammar_corrected": corrected }) except Exception as e: logger.error(f"Paragraph correction error: {str(e)}") return jsonify({ "error": "Paragraph processing failed", "details": str(e) }), 500 @app.route('/chat', methods=['POST', 'GET']) # Added GET method for testing def handle_chat(): """Endpoint for fluent conversational correction""" if request.method == 'POST': data = request.get_json() user_input = data.get('message', '').strip() else: # GET method for testing user_input = request.args.get('message', '').strip() if not user_input: return jsonify({"error": "No message provided"}), 400 try: response = chatbot_service.generate_response(user_input) return jsonify({ "original_text": response["original_text"], "corrected_text": response["corrected_text"], "is_corrected": response["is_corrected"], "compliment": response["compliment"], "next_question": response["next_question"], "end_conversation": response["end_conversation"] }) except Exception as e: logger.error(f"Chatbot error: {str(e)}") return jsonify({ "error": "Chat processing failed", "details": str(e) }), 500 @app.route('/start', methods=['GET']) def start_conversation(): try: response = chatbot_service.start_conversation() return jsonify(response) except Exception as e: logger.error(f"Start conversation error: {str(e)}") return jsonify({ "error": "Failed to start conversation", "details": str(e) }), 500 @app.route('/health', methods=['GET', 'POST']) # Added POST method for testing def health_check(): return jsonify({ "status": "healthy", "services": ["paragraph", "chat"], "details": { "paragraph_service": "active", "chatbot_service": "active" } }) if __name__ == '__main__': logger.info("Starting grammar services...") port = int(os.environ.get("PORT", 8080)) # Default fallback port app.run(host='0.0.0.0', port=port, debug=True)