Reality123b commited on
Commit
e49806f
·
verified ·
1 Parent(s): 1af0ee8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -127
app.py CHANGED
@@ -27,145 +27,113 @@ text_client = InferenceClient(
27
  API_URL = "https://api-inference.huggingface.co/models/SG161222/RealVisXL_V4.0"
28
  headers = {"Authorization": f"Bearer {HF_TOKEN}"}
29
 
30
- def detect_language_script(text: str) -> tuple[str, str]:
31
- """Detect language and script of the input text.
32
- Returns (language_code, script_type)"""
33
  try:
34
- # Use confidence threshold to avoid false detections
35
- lang_detect = langdetect.detect_langs(text)
36
- if lang_detect[0].prob > 0.8:
37
- # Only accept high confidence detections
38
- lang = lang_detect[0].lang
39
- else:
40
- lang = 'en' # Default to English if unsure
41
-
42
- script = None
43
- try:
44
- script = detect_script(text)
45
- except:
46
- pass
47
- return lang, script
48
  except:
49
- return 'en', None
 
50
 
51
- def is_romanized_indic(text: str) -> bool:
52
- """Check if text appears to be romanized Indic language.
53
- More strict pattern matching."""
54
- # Common Bengali romanized patterns with word boundaries
55
- bengali_patterns = [
56
- r'\b(ami|tumi|apni)\b', # Common pronouns
57
- r'\b(ache|achen|thako|thaken)\b', # Common verbs
58
- r'\b(kemon|bhalo|kharap)\b', # Common adjectives
59
- r'\b(ki|kothay|keno)\b' # Common question words
 
 
 
 
 
 
 
 
 
 
 
60
  ]
61
 
62
- # Require multiple matches to confirm it's actually Bengali
63
- text_lower = text.lower()
64
- matches = sum(1 for pattern in bengali_patterns if re.search(pattern, text_lower))
65
- return matches >= 2 # Require at least 2 matches to consider it Bengali
66
 
67
- def translate_text(text: str, target_lang='en') -> tuple[str, str, bool]:
68
- """Translate text to target language, with more conservative translation logic."""
69
- # Skip translation for very short inputs or basic greetings
70
- if len(text.split()) <= 2 or text.lower() in ['hello', 'hi', 'hey']:
71
- return text, 'en', False
72
 
73
- original_lang, script = detect_language_script(text)
74
- is_transliterated = False
75
-
76
- # Only process if confident it's non-English
77
- if original_lang != 'en' and len(text.split()) > 2:
78
- try:
79
- translator = GoogleTranslator(source='auto', target=target_lang)
80
- translated = translator.translate(text)
81
- return translated, original_lang, is_transliterated
82
- except Exception as e:
83
- print(f"Translation error: {e}")
84
- return text, 'en', False
85
 
86
- # Check for romanized Indic text only if it's a longer input
87
- if original_lang == 'en' and len(text.split()) > 2 and is_romanized_indic(text):
88
- text = romanized_to_bengali(text)
89
- return translate_text(text, target_lang) # Recursive call with Bengali script
90
 
91
- return text, 'en', False
92
-
93
- def check_custom_responses(message: str) -> str:
94
- """Check for specific patterns and return custom responses."""
95
- message_lower = message.lower()
96
- custom_responses = {
97
- "what is ur name?": "xylaria",
98
- "what is your name?": "xylaria",
99
- "what's your name?": "xylaria",
100
- "whats your name": "xylaria",
101
- "how many 'r' is in strawberry?": "3",
102
- "who is your developer?": "sk md saad amin",
103
- "how many r is in strawberry": "3",
104
- "who is ur dev": "sk md saad amin",
105
- "who is ur developer": "sk md saad amin",
106
- }
107
- for pattern, response in custom_responses.items():
108
- if pattern in message_lower:
109
- return response
110
- return None
111
-
112
- def is_image_request(message: str) -> bool:
113
- """Detect if the message is requesting image generation."""
114
- image_triggers = [
115
- "generate an image",
116
- "create an image",
117
- "draw",
118
- "make a picture",
119
- "generate a picture",
120
- "create a picture",
121
- "generate art",
122
- "create art",
123
- "make art",
124
- "visualize",
125
- "show me",
126
- ]
127
- message_lower = message.lower()
128
- return any(trigger in message_lower for trigger in image_triggers)
129
-
130
- def generate_image(prompt):
131
- """Generate image using HuggingFace inference API"""
132
  try:
133
- response = requests.post(API_URL, headers=headers, json={"inputs": prompt})
134
- image = Image.open(io.BytesIO(response.content))
135
- return image
136
- except Exception as e:
137
- print(f"Image generation error: {e}")
138
- return None
139
 
140
- def romanized_to_bengali(text: str) -> str:
141
- """Convert romanized Bengali text to Bengali script."""
142
- bengali_mappings = {
143
- 'ami': 'আমি',
144
- 'tumi': 'তুমি',
145
- 'apni': 'আপনি',
146
- 'kemon': 'কেমন',
147
- 'achen': 'আছেন',
148
- 'acchen': 'আছেন',
149
- 'bhalo': 'ভালো',
150
- 'achi': 'আছি',
151
- 'ki': 'কি',
152
- 'kothay': 'কোথায়',
153
- 'keno': 'কেন',
154
- }
155
-
156
- text_lower = text.lower()
157
- for roman, bengali in bengali_mappings.items():
158
- text_lower = re.sub(r'\b' + roman + r'\b', bengali, text_lower)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
 
160
- if text_lower == text.lower():
161
- try:
162
- return transliterate(text, sanscript.ITRANS, sanscript.BENGALI)
163
- except:
164
- return text
165
-
166
- return text_lower
167
-
168
-
169
 
170
  def create_chat_interface():
171
  # Custom CSS for better styling with Inter font and animations
 
27
  API_URL = "https://api-inference.huggingface.co/models/SG161222/RealVisXL_V4.0"
28
  headers = {"Authorization": f"Bearer {HF_TOKEN}"}
29
 
30
+ def detect_language(text):
31
+ """Detect the language of input text"""
 
32
  try:
33
+ return langdetect.detect(text)
34
+ except:
35
+ return 'en'
36
+
37
+ def detect_and_transliterate(text):
38
+ """Detect script and transliterate if needed"""
39
+ try:
40
+ script = detect_script(text)
41
+ if script:
42
+ # Transliterate to Latin script if the text is in another script
43
+ return transliterate(text, script, sanscript.IAST)
 
 
 
44
  except:
45
+ pass
46
+ return text
47
 
48
+ def translate_to_english(text):
49
+ """Translate text to English if not already in English"""
50
+ try:
51
+ lang = detect_language(text)
52
+ if lang != 'en':
53
+ translator = GoogleTranslator(source=lang, target='en')
54
+ return translator.translate(text)
55
+ except:
56
+ pass
57
+ return text
58
+
59
+ def check_for_image_generation(message):
60
+ """Check if message contains image generation commands"""
61
+ image_triggers = [
62
+ r"generate (?:an? )?image",
63
+ r"create (?:an? )?image",
64
+ r"draw",
65
+ r"show me",
66
+ r"visualize",
67
+ r"make (?:an? )?picture"
68
  ]
69
 
70
+ for trigger in image_triggers:
71
+ if re.search(trigger, message.lower()):
72
+ return True
73
+ return False
74
 
75
+ def user_message(message, history):
76
+ """Handle user messages"""
77
+ if message is None or message == "":
78
+ return "", history
 
79
 
80
+ # Add user message to history
81
+ history = history + [(message, None)]
82
+ return "", history
83
+
84
+ def bot_response(history, system_msg, max_tokens, temperature, top_p):
85
+ """Generate bot response"""
86
+ if not history:
87
+ return history, None
 
 
 
 
88
 
89
+ last_user_message = history[-1][0]
 
 
 
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  try:
92
+ # Process the message for language and script
93
+ processed_message = detect_and_transliterate(last_user_message)
94
+ translated_message = translate_to_english(processed_message)
 
 
 
95
 
96
+ # Check for image generation request
97
+ if check_for_image_generation(translated_message):
98
+ # Generate image based on the message
99
+ image = generate_image(translated_message)
100
+ # Update history with a confirmation message
101
+ history[-1] = (history[-1][0], "I've generated an image based on your request.")
102
+ return history, image
103
+
104
+ # Prepare chat messages for the model
105
+ messages = [
106
+ {"role": "system", "content": system_msg},
107
+ ]
108
+
109
+ # Add conversation history
110
+ for msg in history[:-1]: # Exclude the last message pair
111
+ if msg[0]: # User message
112
+ messages.append({"role": "user", "content": msg[0]})
113
+ if msg[1]: # Assistant message
114
+ messages.append({"role": "assistant", "content": msg[1]})
115
+
116
+ # Add the last user message
117
+ messages.append({"role": "user", "content": translated_message})
118
+
119
+ # Get model response
120
+ response = text_client.text_generation(
121
+ prompt=str(messages),
122
+ max_new_tokens=max_tokens,
123
+ temperature=temperature,
124
+ top_p=top_p,
125
+ repetition_penalty=1.1,
126
+ )
127
+
128
+ # Update history with bot response
129
+ history[-1] = (history[-1][0], response)
130
+
131
+ except Exception as e:
132
+ # Handle errors gracefully
133
+ error_message = f"I apologize, but I encountered an error: {str(e)}"
134
+ history[-1] = (history[-1][0], error_message)
135
 
136
+ return history, None
 
 
 
 
 
 
 
 
137
 
138
  def create_chat_interface():
139
  # Custom CSS for better styling with Inter font and animations