memoryotherone / app.py
artecnosomatic's picture
Fix syntax error: remove unmatched closing brace
171e775
#!/usr/bin/env python3
"""
Hugging Face Spaces compatible app for MemoryAI.
This is the main entry point for the Spaces deployment.
"""
import os
from flask import Flask, render_template, request, jsonify
from src.main import MemoryAI
# Load environment variables (with fallback if dotenv not available)
try:
from dotenv import load_dotenv
load_dotenv()
except ImportError:
print("⚠️ python-dotenv not available, using environment variables directly")
# Set default values if .env not loaded
if not os.getenv("MODEL_NAME"):
os.environ["MODEL_NAME"] = "microsoft/DialoGPT-small"
# Initialize Flask app
app = Flask(__name__)
# Initialize MemoryAI with better default model for Spaces
if not os.getenv("MODEL_NAME"):
os.environ["MODEL_NAME"] = "microsoft/DialoGPT-small"
# Global MemoryAI instance
ai = MemoryAI()
ai.load_memories()
@app.route('/')
def home():
"""Render the main chat interface."""
return render_template('spaces_chat.html')
@app.route('/api/memories', methods=['GET'])
def get_memories():
"""Get recent memories as JSON."""
recent_memories = ai.get_recent_memories(10)
return jsonify({
'memories': recent_memories,
'total_memories': len(ai.memories)
})
@app.route('/api/clear', methods=['POST'])
def clear_memories():
"""Clear all memories."""
ai.clear_memories()
return jsonify({'status': 'success', 'message': 'All memories cleared'})
@app.route('/api/chat', methods=['POST'])
def chat():
"""Get AI response to user input."""
data = request.json
user_input = data.get('message', '')
conversation_history = data.get('history', [])
if not user_input.strip():
return jsonify({'error': 'Empty message'}), 400
# Generate AI response with conversation history
response = ai.generate_response(user_input, conversation_history=conversation_history)
return jsonify({
'response': response,
'memory_count': len(ai.memories),
'conversation_stats': ai.get_conversation_stats() if hasattr(ai, 'get_conversation_stats') else {}
})
@app.route('/api/summary', methods=['GET'])
def get_summary():
"""Get conversation summary."""
summary = ai.get_conversation_summary()
return jsonify({'summary': summary})
@app.route('/api/similar', methods=['POST'])
def find_similar():
"""Find similar memories."""
data = request.json
query = data.get('query', '')
top_k = data.get('top_k', 3)
if not query.strip():
return jsonify({'error': 'Empty query'}), 400
similar = ai.find_similar_memories(query, top_k)
return jsonify({
'similar_memories': [{'text': text, 'similarity': float(score)} for text, score in similar],
'query': query
})
@app.route('/api/reset', methods=['POST'])
def reset_conversation():
"""Reset conversation state."""
ai.reset_conversation()
return jsonify({'status': 'success', 'message': 'Conversation reset'})
@app.route('/api/save', methods=['POST'])
def save_memories():
"""Save memories to file."""
ai.save_memories()
return jsonify({'status': 'success', 'message': 'Memories saved'})
if __name__ == '__main__':
# Hugging Face Spaces will run this with their own server
# For local testing, you can use:
app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))