NitinBot001 commited on
Commit
59ef98a
·
verified ·
1 Parent(s): 3d5331d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +128 -6
app.py CHANGED
@@ -2,6 +2,7 @@ from flask import Flask, request, jsonify, render_template
2
  import os
3
  from flask_cors import CORS
4
  from openai import OpenAI
 
5
 
6
  # Load API key and base URL from environment variables
7
  OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") or os.getenv("GEMINI_API_KEY")
@@ -41,12 +42,69 @@ Response Rules:
41
  app = Flask(__name__, template_folder="templates", static_folder="static")
42
  CORS(app)
43
 
44
-
45
- def translate_text(text, target_lang):
 
 
 
 
 
 
 
 
 
 
 
46
  try:
47
- return text
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  except Exception as e:
49
- return f"Translation error: {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  @app.route("/", methods=["GET"])
52
  def home():
@@ -62,9 +120,27 @@ def chat():
62
  if not user_message:
63
  return jsonify({"error": "Message is required"}), 400
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  messages = [
66
  {"role": "system", "content": SYSTEM_INSTRUCTION},
67
- {"role": "user", "content": f"Context Data:\n{CONTEXT_DATA}\n\nUser Query: {user_message}"}
68
  ]
69
 
70
  # Call OpenAI (or OpenAI-compatible) chat API
@@ -75,13 +151,59 @@ def chat():
75
  )
76
  ai_response = response.choices[0].message.content.strip()
77
 
 
78
  if target_lang.lower() != "en":
79
  ai_response = translate_text(ai_response, target_lang)
80
 
81
  return jsonify({"response": ai_response})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  except Exception as e:
83
  return jsonify({"error": str(e)}), 500
84
 
85
-
86
  if __name__ == '__main__':
 
 
 
87
  app.run(debug=True, host='0.0.0.0', port=7860, threaded=True)
 
2
  import os
3
  from flask_cors import CORS
4
  from openai import OpenAI
5
+ from translate import Translator
6
 
7
  # Load API key and base URL from environment variables
8
  OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") or os.getenv("GEMINI_API_KEY")
 
42
  app = Flask(__name__, template_folder="templates", static_folder="static")
43
  CORS(app)
44
 
45
+ # Translation function with auto language detection
46
+ def translate_text(text, target_lang, source_lang='auto'):
47
+ """
48
+ Translate text to desired language using Microsoft Translator
49
+
50
+ Args:
51
+ text (str): Text to translate
52
+ target_lang (str): Target language code (e.g., 'es', 'fr', 'de', 'hi', 'zh')
53
+ source_lang (str): Source language code (default: 'auto' for auto-detection)
54
+
55
+ Returns:
56
+ str: Translated text or original text if translation fails
57
+ """
58
  try:
59
+ # Skip translation if target language is English and text appears to be in English
60
+ if target_lang.lower() == 'en':
61
+ return text
62
+
63
+ # Create translator instance
64
+ translator = Translator(to_lang=target_lang, from_lang=source_lang)
65
+ translated = translator.translate(text)
66
+
67
+ # Return translated text if successful
68
+ if translated and translated.strip():
69
+ return translated
70
+ else:
71
+ return text # Return original if translation is empty
72
+
73
  except Exception as e:
74
+ print(f"Translation error: {str(e)}")
75
+ return text # Return original text if translation fails
76
+
77
+ # Language code mapping for common languages
78
+ LANGUAGE_CODES = {
79
+ 'english': 'en',
80
+ 'spanish': 'es',
81
+ 'french': 'fr',
82
+ 'german': 'de',
83
+ 'italian': 'it',
84
+ 'portuguese': 'pt',
85
+ 'russian': 'ru',
86
+ 'chinese': 'zh',
87
+ 'japanese': 'ja',
88
+ 'korean': 'ko',
89
+ 'arabic': 'ar',
90
+ 'hindi': 'hi',
91
+ 'dutch': 'nl',
92
+ 'swedish': 'sv',
93
+ 'norwegian': 'no',
94
+ 'danish': 'da',
95
+ 'finnish': 'fi',
96
+ 'polish': 'pl',
97
+ 'czech': 'cs',
98
+ 'hungarian': 'hu',
99
+ 'romanian': 'ro',
100
+ 'turkish': 'tr',
101
+ 'greek': 'el',
102
+ 'hebrew': 'he',
103
+ 'thai': 'th',
104
+ 'vietnamese': 'vi',
105
+ 'indonesian': 'id',
106
+ 'malay': 'ms'
107
+ }
108
 
109
  @app.route("/", methods=["GET"])
110
  def home():
 
120
  if not user_message:
121
  return jsonify({"error": "Message is required"}), 400
122
 
123
+ # Normalize language code (handle full language names)
124
+ target_lang = target_lang.lower()
125
+ if target_lang in LANGUAGE_CODES:
126
+ target_lang = LANGUAGE_CODES[target_lang]
127
+
128
+ # Translate user message to English for processing if it's not in English
129
+ processed_message = user_message
130
+ if target_lang != "en":
131
+ try:
132
+ # Try to translate user message to English for better AI understanding
133
+ english_translator = Translator(to_lang='en', from_lang='auto')
134
+ processed_message = english_translator.translate(user_message)
135
+ if not processed_message or not processed_message.strip():
136
+ processed_message = user_message # Fallback to original
137
+ except Exception as e:
138
+ print(f"User message translation error: {str(e)}")
139
+ processed_message = user_message # Use original message
140
+
141
  messages = [
142
  {"role": "system", "content": SYSTEM_INSTRUCTION},
143
+ {"role": "user", "content": f"Context Data:\n{CONTEXT_DATA}\n\nUser Query: {processed_message}"}
144
  ]
145
 
146
  # Call OpenAI (or OpenAI-compatible) chat API
 
151
  )
152
  ai_response = response.choices[0].message.content.strip()
153
 
154
+ # Translate AI response to target language if not English
155
  if target_lang.lower() != "en":
156
  ai_response = translate_text(ai_response, target_lang)
157
 
158
  return jsonify({"response": ai_response})
159
+
160
+ except Exception as e:
161
+ error_message = f"Error: {str(e)}"
162
+ # Try to translate error message if target language is specified
163
+ if 'target_lang' in locals() and target_lang.lower() != "en":
164
+ try:
165
+ error_message = translate_text(error_message, target_lang)
166
+ except:
167
+ pass # Use original error message if translation fails
168
+
169
+ return jsonify({"error": error_message}), 500
170
+
171
+ @app.route("/languages", methods=["GET"])
172
+ def get_languages():
173
+ """Endpoint to get available language codes"""
174
+ return jsonify({"languages": LANGUAGE_CODES})
175
+
176
+ @app.route("/translate", methods=["POST"])
177
+ def translate_endpoint():
178
+ """Standalone translation endpoint"""
179
+ try:
180
+ data = request.get_json()
181
+ text = data.get("text")
182
+ target_lang = data.get("target_lang", "en")
183
+ source_lang = data.get("source_lang", "auto")
184
+
185
+ if not text:
186
+ return jsonify({"error": "Text is required"}), 400
187
+
188
+ # Normalize language code
189
+ target_lang = target_lang.lower()
190
+ if target_lang in LANGUAGE_CODES:
191
+ target_lang = LANGUAGE_CODES[target_lang]
192
+
193
+ translated = translate_text(text, target_lang, source_lang)
194
+
195
+ return jsonify({
196
+ "original_text": text,
197
+ "translated_text": translated,
198
+ "source_lang": source_lang,
199
+ "target_lang": target_lang
200
+ })
201
+
202
  except Exception as e:
203
  return jsonify({"error": str(e)}), 500
204
 
 
205
  if __name__ == '__main__':
206
+ print("Starting Flask app with translation support...")
207
+ print("Available language codes:", list(LANGUAGE_CODES.keys()))
208
+ print("Install dependencies: pip install translate")
209
  app.run(debug=True, host='0.0.0.0', port=7860, threaded=True)