AiDeveloper1 commited on
Commit
9b73d16
·
verified ·
1 Parent(s): 457c97d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -102
app.py CHANGED
@@ -1,102 +1,102 @@
1
- from flask import Flask, render_template, request, jsonify
2
- from googletrans import Translator
3
- import io
4
- import asyncio
5
- from dotenv import load_dotenv
6
- import os
7
- import logging
8
- from chatbot import process_uploaded_file, index_documents, rag_chatbot
9
-
10
- # Set up logging
11
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
12
- logger = logging.getLogger(__name__)
13
-
14
- # Load environment variables
15
- load_dotenv()
16
- app = Flask(__name__)
17
-
18
- LANGUAGE_MAP = {
19
- "English (US)": "en",
20
- "Hindi (India)": "hi",
21
- "Spanish (Spain)": "es",
22
- "French (France)": "fr",
23
- "German (Germany)": "de",
24
- "Arabic (Saudi Arabia)": "ar"
25
- }
26
-
27
- @app.route('/')
28
- def index():
29
- return render_template("index.html")
30
-
31
- @app.route('/api/upload_document', methods=['POST'])
32
- def upload_document():
33
- try:
34
- if 'file' not in request.files:
35
- return jsonify({"error": "No file uploaded"}), 400
36
-
37
- file = request.files['file']
38
- if file.filename == '':
39
- return jsonify({"error": "No file selected"}), 400
40
-
41
- # Process file without saving locally
42
- file_stream = io.BytesIO(file.read())
43
- documents = process_uploaded_file(file_stream, file.filename)
44
-
45
- # Index documents in Pinecone
46
- vector_store = index_documents(documents)
47
-
48
- return jsonify({"message": f"Successfully processed and indexed {len(documents)} chunks from {file.filename}"})
49
-
50
- except Exception as e:
51
- logger.error(f"Error in upload_document: {str(e)}")
52
- return jsonify({"error": str(e)}), 500
53
-
54
- @app.route('/api/process_text', methods=['POST'])
55
- def process_text():
56
- # Get JSON payload
57
- data = request.get_json()
58
- try:
59
- original_text = data['text']
60
- language_name = data['language']
61
- except (KeyError, TypeError):
62
- return jsonify({"error": "Missing 'text' or 'language' in JSON payload"}), 400
63
-
64
- # Map language name to language code
65
- if language_name not in LANGUAGE_MAP:
66
- return jsonify({"error": f"Unsupported language: {language_name}"}), 400
67
- original_lang_code = LANGUAGE_MAP[language_name]
68
-
69
- logger.info(f"Original Text: {original_text}")
70
- logger.info(f"Original Language: {language_name} ({original_lang_code})")
71
-
72
- # Define an async function for translation
73
- async def translate_async(text, dest_lang):
74
- translator = Translator()
75
- translated = translator.translate(text, dest=dest_lang)
76
- return translated.text
77
-
78
- # Translate to English
79
- if original_lang_code != "en":
80
- translated_text = asyncio.run(translate_async(original_text, dest_lang="en"))
81
- else:
82
- translated_text = original_text
83
-
84
- logger.info(f"Translated to English: {translated_text}")
85
-
86
- # Process with RAG
87
- response = rag_chatbot(translated_text)
88
- logger.info(f"English Response: {response}")
89
-
90
- # Translate response back to original language
91
- if original_lang_code != "en":
92
- final_response = asyncio.run(translate_async(response, dest_lang=original_lang_code))
93
- else:
94
- final_response = response
95
-
96
- logger.info(f"Final Response (in original language): {final_response}")
97
-
98
- # Return the final response
99
- return jsonify({"response": final_response, "language": language_name})
100
-
101
- if __name__ == '__main__':
102
- app.run(host='0.0.0.0', port=5000)
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ from googletrans import Translator
3
+ import io
4
+ import asyncio
5
+ from dotenv import load_dotenv
6
+ import os
7
+ import logging
8
+ from chatbot import process_uploaded_file, index_documents, rag_chatbot
9
+
10
+ # Set up logging
11
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
12
+ logger = logging.getLogger(__name__)
13
+
14
+ # Load environment variables
15
+ load_dotenv()
16
+ app = Flask(__name__)
17
+
18
+ LANGUAGE_MAP = {
19
+ "English (US)": "en",
20
+ "Hindi (India)": "hi",
21
+ "Spanish (Spain)": "es",
22
+ "French (France)": "fr",
23
+ "German (Germany)": "de",
24
+ "Arabic (Saudi Arabia)": "ar"
25
+ }
26
+
27
+ @app.route('/')
28
+ def index():
29
+ return render_template("index.html")
30
+
31
+ @app.route('/api/upload_document', methods=['POST'])
32
+ def upload_document():
33
+ try:
34
+ if 'file' not in request.files:
35
+ return jsonify({"error": "No file uploaded"}), 400
36
+
37
+ file = request.files['file']
38
+ if file.filename == '':
39
+ return jsonify({"error": "No file selected"}), 400
40
+
41
+ # Process file without saving locally
42
+ file_stream = io.BytesIO(file.read())
43
+ documents = process_uploaded_file(file_stream, file.filename)
44
+
45
+ # Index documents in Pinecone
46
+ vector_store = index_documents(documents)
47
+
48
+ return jsonify({"message": f"Successfully processed and indexed {len(documents)} chunks from {file.filename}"})
49
+
50
+ except Exception as e:
51
+ logger.error(f"Error in upload_document: {str(e)}")
52
+ return jsonify({"error": str(e)}), 500
53
+
54
+ @app.route('/api/process_text', methods=['POST'])
55
+ def process_text():
56
+ # Get JSON payload
57
+ data = request.get_json()
58
+ try:
59
+ original_text = data['text']
60
+ language_name = data['language']
61
+ except (KeyError, TypeError):
62
+ return jsonify({"error": "Missing 'text' or 'language' in JSON payload"}), 400
63
+
64
+ # Map language name to language code
65
+ if language_name not in LANGUAGE_MAP:
66
+ return jsonify({"error": f"Unsupported language: {language_name}"}), 400
67
+ original_lang_code = LANGUAGE_MAP[language_name]
68
+
69
+ logger.info(f"Original Text: {original_text}")
70
+ logger.info(f"Original Language: {language_name} ({original_lang_code})")
71
+
72
+ # Define an async function for translation
73
+ async def translate_async(text, dest_lang):
74
+ translator = Translator()
75
+ translated = translator.translate(text, dest=dest_lang)
76
+ return translated.text
77
+
78
+ # Translate to English
79
+ if original_lang_code != "en":
80
+ translated_text = asyncio.run(translate_async(original_text, dest_lang="en"))
81
+ else:
82
+ translated_text = original_text
83
+
84
+ logger.info(f"Translated to English: {translated_text}")
85
+
86
+ # Process with RAG
87
+ response = rag_chatbot(translated_text)
88
+ logger.info(f"English Response: {response}")
89
+
90
+ # Translate response back to original language
91
+ if original_lang_code != "en":
92
+ final_response = asyncio.run(translate_async(response, dest_lang=original_lang_code))
93
+ else:
94
+ final_response = response
95
+
96
+ logger.info(f"Final Response (in original language): {final_response}")
97
+
98
+ # Return the final response
99
+ return jsonify({"response": final_response, "language": language_name})
100
+
101
+ if __name__ == '__main__':
102
+ app.run(host='0.0.0.0', port=7860)