Spaces:
Build error
Build error
Commit ·
428b349
1
Parent(s): cd6115e
v.1.24
Browse files
app.py
CHANGED
|
@@ -63,12 +63,12 @@ class ProcessControl:
|
|
| 63 |
|
| 64 |
class EventDetector:
|
| 65 |
def __init__(self):
|
|
|
|
| 66 |
try:
|
| 67 |
-
# Initialize sentiment models
|
| 68 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 69 |
logger.info(f"Initializing models on device: {device}")
|
| 70 |
|
| 71 |
-
# Initialize sentiment models
|
| 72 |
self.finbert = pipeline(
|
| 73 |
"sentiment-analysis",
|
| 74 |
model="ProsusAI/finbert",
|
|
@@ -91,7 +91,7 @@ class EventDetector:
|
|
| 91 |
max_length=512
|
| 92 |
)
|
| 93 |
|
| 94 |
-
# Initialize MT5 model
|
| 95 |
self.model_name = "google/mt5-small"
|
| 96 |
self.tokenizer = AutoTokenizer.from_pretrained(
|
| 97 |
self.model_name,
|
|
@@ -101,13 +101,19 @@ class EventDetector:
|
|
| 101 |
|
| 102 |
self.device = device
|
| 103 |
self.initialized = True
|
| 104 |
-
logger.info(
|
| 105 |
|
| 106 |
except Exception as e:
|
| 107 |
logger.error(f"Error in EventDetector initialization: {str(e)}")
|
| 108 |
raise
|
| 109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
def analyze_sentiment(self, text):
|
|
|
|
| 111 |
try:
|
| 112 |
if not text or not isinstance(text, str):
|
| 113 |
return "Neutral"
|
|
@@ -149,6 +155,7 @@ class EventDetector:
|
|
| 149 |
return "Neutral"
|
| 150 |
|
| 151 |
def detect_events(self, text, entity):
|
|
|
|
| 152 |
if not text or not entity:
|
| 153 |
return "Нет", "Invalid input"
|
| 154 |
|
|
@@ -201,7 +208,7 @@ Summary: [2-3 sentence summary]</s>"""
|
|
| 201 |
do_sample=False,
|
| 202 |
pad_token_id=self.tokenizer.pad_token_id,
|
| 203 |
eos_token_id=self.tokenizer.eos_token_id,
|
| 204 |
-
no_repeat_ngram_size=3
|
| 205 |
)
|
| 206 |
|
| 207 |
response = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
|
|
@@ -209,10 +216,8 @@ Summary: [2-3 sentence summary]</s>"""
|
|
| 209 |
# Extract summary
|
| 210 |
if "Summary:" in response:
|
| 211 |
summary = response.split("Summary:")[1].strip()
|
| 212 |
-
# Clean up any remaining prompt artifacts
|
| 213 |
summary = summary.replace('<s>', '').replace('</s>', '').strip()
|
| 214 |
else:
|
| 215 |
-
# Create a structured summary based on event type
|
| 216 |
if detected_event == 'Отчетность':
|
| 217 |
summary = f"Компания {entity} опубликовала финансовые показатели."
|
| 218 |
elif detected_event == 'РЦБ':
|
|
@@ -222,7 +227,6 @@ Summary: [2-3 sentence summary]</s>"""
|
|
| 222 |
|
| 223 |
return detected_event, summary
|
| 224 |
|
| 225 |
-
# If no keywords matched
|
| 226 |
return "Нет", "No significant event detected"
|
| 227 |
|
| 228 |
except Exception as e:
|
|
@@ -380,7 +384,7 @@ def create_interface():
|
|
| 380 |
control = ProcessControl()
|
| 381 |
|
| 382 |
with gr.Blocks(theme=gr.themes.Soft()) as app:
|
| 383 |
-
gr.Markdown("# AI-анализ мониторинга новостей v.1.
|
| 384 |
|
| 385 |
with gr.Row():
|
| 386 |
file_input = gr.File(
|
|
|
|
| 63 |
|
| 64 |
class EventDetector:
|
| 65 |
def __init__(self):
|
| 66 |
+
"""Initialize models with GPU support"""
|
| 67 |
try:
|
| 68 |
+
# Initialize sentiment models
|
| 69 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 70 |
logger.info(f"Initializing models on device: {device}")
|
| 71 |
|
|
|
|
| 72 |
self.finbert = pipeline(
|
| 73 |
"sentiment-analysis",
|
| 74 |
model="ProsusAI/finbert",
|
|
|
|
| 91 |
max_length=512
|
| 92 |
)
|
| 93 |
|
| 94 |
+
# Initialize MT5 model
|
| 95 |
self.model_name = "google/mt5-small"
|
| 96 |
self.tokenizer = AutoTokenizer.from_pretrained(
|
| 97 |
self.model_name,
|
|
|
|
| 101 |
|
| 102 |
self.device = device
|
| 103 |
self.initialized = True
|
| 104 |
+
logger.info("All models initialized successfully")
|
| 105 |
|
| 106 |
except Exception as e:
|
| 107 |
logger.error(f"Error in EventDetector initialization: {str(e)}")
|
| 108 |
raise
|
| 109 |
|
| 110 |
+
@spaces.GPU(duration=30)
|
| 111 |
+
def initialize_models(self):
|
| 112 |
+
"""Keep this method for compatibility, now just returns initialization status"""
|
| 113 |
+
return self.initialized
|
| 114 |
+
|
| 115 |
def analyze_sentiment(self, text):
|
| 116 |
+
"""Rest of the analyze_sentiment method remains the same"""
|
| 117 |
try:
|
| 118 |
if not text or not isinstance(text, str):
|
| 119 |
return "Neutral"
|
|
|
|
| 155 |
return "Neutral"
|
| 156 |
|
| 157 |
def detect_events(self, text, entity):
|
| 158 |
+
"""Rest of the detect_events method remains the same"""
|
| 159 |
if not text or not entity:
|
| 160 |
return "Нет", "Invalid input"
|
| 161 |
|
|
|
|
| 208 |
do_sample=False,
|
| 209 |
pad_token_id=self.tokenizer.pad_token_id,
|
| 210 |
eos_token_id=self.tokenizer.eos_token_id,
|
| 211 |
+
no_repeat_ngram_size=3
|
| 212 |
)
|
| 213 |
|
| 214 |
response = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
|
|
|
|
| 216 |
# Extract summary
|
| 217 |
if "Summary:" in response:
|
| 218 |
summary = response.split("Summary:")[1].strip()
|
|
|
|
| 219 |
summary = summary.replace('<s>', '').replace('</s>', '').strip()
|
| 220 |
else:
|
|
|
|
| 221 |
if detected_event == 'Отчетность':
|
| 222 |
summary = f"Компания {entity} опубликовала финансовые показатели."
|
| 223 |
elif detected_event == 'РЦБ':
|
|
|
|
| 227 |
|
| 228 |
return detected_event, summary
|
| 229 |
|
|
|
|
| 230 |
return "Нет", "No significant event detected"
|
| 231 |
|
| 232 |
except Exception as e:
|
|
|
|
| 384 |
control = ProcessControl()
|
| 385 |
|
| 386 |
with gr.Blocks(theme=gr.themes.Soft()) as app:
|
| 387 |
+
gr.Markdown("# AI-анализ мониторинга новостей v.1.24")
|
| 388 |
|
| 389 |
with gr.Row():
|
| 390 |
file_input = gr.File(
|