Initial commit: Miku Discord Bot
This commit is contained in:
44
bot/utils/sentiment_analysis.py
Normal file
44
bot/utils/sentiment_analysis.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from utils.llm import query_ollama
|
||||
|
||||
async def analyze_sentiment(messages: list) -> tuple[str, float]:
|
||||
"""
|
||||
Analyze the sentiment of a conversation using Ollama
|
||||
Returns a tuple of (sentiment description, positivity score from 0-1)
|
||||
"""
|
||||
# Combine the last few messages for context (up to 5)
|
||||
messages_to_analyze = messages[-5:] if len(messages) > 5 else messages
|
||||
conversation_text = "\n".join([
|
||||
f"{'Bot' if msg['is_bot_message'] else 'User'}: {msg['content']}"
|
||||
for msg in messages_to_analyze
|
||||
])
|
||||
|
||||
prompt = f"""Analyze the sentiment and tone of this conversation snippet between a user and a bot.
|
||||
Focus on the overall mood, engagement level, and whether the interaction seems positive/neutral/negative.
|
||||
Give a brief 1-2 sentence summary and a positivity score from 0-1 where:
|
||||
0.0-0.3 = Negative/Hostile
|
||||
0.3-0.7 = Neutral/Mixed
|
||||
0.7-1.0 = Positive/Friendly
|
||||
|
||||
Conversation:
|
||||
{conversation_text}
|
||||
|
||||
Format your response exactly like this example:
|
||||
Summary: The conversation is friendly and engaging with good back-and-forth.
|
||||
Score: 0.85
|
||||
|
||||
Response:"""
|
||||
|
||||
try:
|
||||
response = await query_ollama(prompt)
|
||||
if not response or 'Score:' not in response:
|
||||
return "Could not analyze sentiment", 0.5
|
||||
|
||||
# Parse the response
|
||||
lines = response.strip().split('\n')
|
||||
summary = lines[0].replace('Summary:', '').strip()
|
||||
score = float(lines[1].replace('Score:', '').strip())
|
||||
|
||||
return summary, score
|
||||
except Exception as e:
|
||||
print(f"Error in sentiment analysis: {e}")
|
||||
return "Error analyzing sentiment", 0.5
|
||||
Reference in New Issue
Block a user