help@rskworld.in +91 93305 39277
RSK World
  • Home
  • Development
    • Web Development
    • Mobile Apps
    • Software
    • Games
    • Project
  • Technologies
    • Data Science
    • AI Development
    • Cloud Development
    • Blockchain
    • Cyber Security
    • Dev Tools
    • Testing Tools
  • Blog
  • About
  • Contact

Theme Settings

Color Scheme
Display Options
Font Size
100%
Back to Project
RSK World
multi-language-chatbot
RSK World
multi-language-chatbot
Multi-language Chatbot - Python + Flask + OpenAI API + NLP + Translation + Language Detection + Cultural Adaptation
multi-language-chatbot
  • __pycache__
  • instance
  • languages
  • logs
  • modules
  • static
  • templates
  • tests
  • .env.example1.1 KB
  • .gitignore2 KB
  • GITHUB_RELEASE_TEMPLATE.md3.3 KB
  • LICENSE1.2 KB
  • README.md9.3 KB
  • RELEASE_NOTES.md6.4 KB
  • app.py18.5 KB
  • config.py4.2 KB
  • manifest.ini2.5 KB
  • requirements.txt1.6 KB
  • run.py2.9 KB
  • setup.py3.1 KB
test_analysis.pyanalytics.py.gitignoredemo-readme.mdapp.pyrun.py
.gitignore
Raw Download
Find: Go to:
# Multi-language Chatbot Git Ignore
# Author: RSK World (https://rskworld.in)
# Founder: Molla Samser
# Designer & Tester: Rima Khatun
# Contact: help@rskworld.in, +91 93305 39277
# Year: 2026

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Project specific
logs/
*.log
chatbot.db
instance/
.pytest_cache/

# API Keys and secrets
config.json
secrets.json
*.pem
*.key

# Temporary files
tmp/
temp/
*.tmp
*.temp

# Backup files
*.bak
*.backup

# Cache
.cache/
cache/

# Docker
.dockerignore

# Node.js (if using for frontend)
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Compiled files
*.pyc
*.pyo
*.pyd

# Virtual environments
bin/
include/
lib/
lib64/
share/
pyvenv.cfg

# Local development
local/
dev/
development/
186 lines•2 KB
text
app.py
Raw Download
Find: Go to:
#!/usr/bin/env python3
"""
Multi-language Chatbot Application
Author: RSK World (https://rskworld.in)
Founder: Molla Samser
Designer & Tester: Rima Khatun
Contact: help@rskworld.in, +91 93305 39277
Year: 2026
Description: Advanced multi-language chatbot with automatic translation and cultural adaptation
"""

from flask import Flask, render_template, request, jsonify, session
from flask_cors import CORS
import openai
import googletrans
from langdetect import detect
import json
import os
import tempfile
import base64
from datetime import datetime
import logging

from modules.language_detector import LanguageDetector
from modules.translator import Translator
from modules.cultural_adapter import CulturalAdapter
from modules.chatbot_core import ChatbotCore
from modules.voice_processor import VoiceProcessor
from modules.sentiment_analyzer import SentimentAnalyzer
from modules.conversation_memory import ConversationMemory
from modules.document_analyzer import DocumentAnalyzer
from modules.collaboration_manager import CollaborationManager
from modules.analytics_engine import AnalyticsEngine
from modules.personality_engine import PersonalityEngine
from modules.multimodal_processor import MultiModalProcessor

app = Flask(__name__)
app.secret_key = 'multi-language-chatbot-rsk-world-2026'
CORS(app)

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class MultiLanguageChatbot:
    def __init__(self):
        self.language_detector = LanguageDetector()
        self.translator = Translator()
        self.cultural_adapter = CulturalAdapter()
        self.chatbot_core = ChatbotCore()
        
        # Advanced features
        self.voice_processor = VoiceProcessor()
        self.sentiment_analyzer = SentimentAnalyzer()
        self.conversation_memory = ConversationMemory()
        self.document_analyzer = DocumentAnalyzer()
        self.collaboration_manager = CollaborationManager()
        self.analytics_engine = AnalyticsEngine()
        self.personality_engine = PersonalityEngine()
        self.multimodal_processor = MultiModalProcessor()
        
        # Supported languages
        self.supported_languages = {
            'en': 'English',
            'hi': 'हिन्दी (Hindi)',
            'bn': 'বাংলা (Bengali)',
            'es': 'Español (Spanish)',
            'fr': 'Français (French)',
            'de': 'Deutsch (German)',
            'zh': '中文 (Chinese)',
            'ja': '日本語 (Japanese)',
            'ar': 'العربية (Arabic)',
            'pt': 'Português (Portuguese)',
            'ru': 'Русский (Russian)',
            'it': 'Italiano (Italian)'
        }
        
    def process_message(self, message, user_language=None):
        """Process incoming message and generate response"""
        try:
            # Detect language if not provided
            if not user_language:
                detected_lang = self.language_detector.detect(message)
                user_language = detected_lang if detected_lang in self.supported_languages else 'en'
            else:
                # If user_language is provided, still detect for analytics
                detected_lang = self.language_detector.detect(message)
                if detected_lang not in self.supported_languages:
                    detected_lang = user_language
            
            # Store user language in session
            session['user_language'] = user_language
            
            # Translate to English for processing if needed
            if user_language != 'en':
                message_en = self.translator.translate(message, 'en', user_language)
            else:
                message_en = message
            
            # Generate response in English
            response_en = self.chatbot_core.generate_response(message_en)
            
            # Apply cultural adaptation
            response_en = self.cultural_adapter.adapt(response_en, user_language)
            
            # Translate response back to user language
            if user_language != 'en':
                response = self.translator.translate(response_en, user_language, 'en')
            else:
                response = response_en
            
            # Track analytics
            self.analytics_engine.track_user_event(
                user_id='default',
                event_type='message',
                event_data={'message_length': len(message)},
                language=detected_lang
            )
            
            # Store in conversation memory
            self.conversation_memory.add_message(
                user_id='default',
                role='user',
                content=message,
                language=detected_lang,
                sentiment=None
            )
            
            return {
                'response': response,
                'detected_language': user_language,
                'language_name': self.supported_languages.get(user_language, 'English'),
                'confidence': self.language_detector.get_confidence()
            }
            
        except Exception as e:
            logger.error(f"Error processing message: {str(e)}")
            return {
                'response': f"Sorry, I encountered an error. Please try again. (Error: {str(e)})",
                'detected_language': 'en',
                'language_name': 'English',
                'confidence': 0.0
            }

chatbot = MultiLanguageChatbot()

@app.route('/')
def index():
    """Main chat interface"""
    return render_template('index.html', 
                         supported_languages=chatbot.supported_languages,
                         current_year=datetime.now().year)

@app.route('/chat', methods=['POST'])
def chat():
    """Handle chat messages"""
    try:
        data = request.get_json()
        message = data.get('message', '').strip()
        user_language = data.get('language', None)
        
        if not message:
            return jsonify({'error': 'Message cannot be empty'}), 400
        
        response = chatbot.process_message(message, user_language)
        return jsonify(response)
        
    except Exception as e:
        logger.error(f"Chat endpoint error: {str(e)}")
        return jsonify({'error': 'Internal server error'}), 500

@app.route('/detect_language', methods=['POST'])
def detect_language():
    """Detect language of given text"""
    try:
        data = request.get_json()
        text = data.get('text', '').strip()
        
        if not text:
            return jsonify({'error': 'Text cannot be empty'}), 400
        
        detected_lang = chatbot.language_detector.detect(text)
        confidence = chatbot.language_detector.get_confidence()
        
        return jsonify({
            'language': detected_lang,
            'language_name': chatbot.supported_languages.get(detected_lang, 'Unknown'),
            'confidence': confidence
        })
        
    except Exception as e:
        logger.error(f"Language detection error: {str(e)}")
        return jsonify({'error': 'Language detection failed'}), 500

@app.route('/translate', methods=['POST'])
def translate_text():
    """Translate text between languages"""
    try:
        data = request.get_json()
        text = data.get('text', '').strip()
        target_lang = data.get('target_language', 'en')
        source_lang = data.get('source_language', 'auto')
        
        if not text:
            return jsonify({'error': 'Text cannot be empty'}), 400
        
        translated_text = chatbot.translator.translate(text, target_lang, source_lang)
        
        return jsonify({
            'translated_text': translated_text,
            'source_language': source_lang,
            'target_language': target_lang
        })
        
    except Exception as e:
        logger.error(f"Translation error: {str(e)}")
        return jsonify({'error': 'Translation failed'}), 500

@app.route('/languages')
def get_supported_languages():
    """Get list of supported languages"""
    return jsonify(chatbot.supported_languages)

@app.route('/health')
def health_check():
    """Health check endpoint"""
    return jsonify({
        'status': 'healthy',
        'timestamp': datetime.now().isoformat(),
        'version': '2.0.0',
        'features': [
            'voice_processing',
            'sentiment_analysis',
            'conversation_memory',
            'document_analysis',
            'collaboration',
            'analytics',
            'personality_customization',
            'multimodal_input'
        ]
    })

# Advanced Feature Endpoints

@app.route('/voice/speech-to-text', methods=['POST'])
def speech_to_text():
    """Convert speech to text"""
    try:
        if 'audio' not in request.files:
            return jsonify({'error': 'No audio file provided'}), 400
        
        audio_file = request.files['audio']
        language = request.form.get('language', 'en')
        
        # Save audio temporarily
        with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as temp_file:
            audio_file.save(temp_file.name)
            
            # Process audio
            text = chatbot.voice_processor.recognize_speech_from_file(temp_file.name, language)
            
            # Clean up
            os.unlink(temp_file.name)
        
        if text:
            return jsonify({
                'text': text,
                'language': language,
                'confidence': 0.85
            })
        else:
            return jsonify({'error': 'Could not recognize speech'}), 400
            
    except Exception as e:
        logger.error(f"Speech to text error: {str(e)}")
        return jsonify({'error': 'Speech recognition failed'}), 500

@app.route('/voice/text-to-speech', methods=['POST'])
def text_to_speech():
    """Convert text to speech"""
    try:
        data = request.get_json()
        text = data.get('text', '').strip()
        language = data.get('language', 'en')
        
        if not text:
            return jsonify({'error': 'Text cannot be empty'}), 400
        
        # Generate speech
        audio_bytes = chatbot.voice_processor.text_to_speech(text, language)
        
        if audio_bytes:
            audio_base64 = base64.b64encode(audio_bytes).decode('utf-8')
            return jsonify({
                'audio': audio_base64,
                'format': 'wav',
                'language': language
            })
        else:
            return jsonify({'error': 'Speech generation failed'}), 500
            
    except Exception as e:
        logger.error(f"Text to speech error: {str(e)}")
        return jsonify({'error': 'Speech generation failed'}), 500

@app.route('/sentiment/analyze', methods=['POST'])
def analyze_sentiment():
    """Analyze sentiment of text"""
    try:
        data = request.get_json()
        text = data.get('text', '').strip()
        language = data.get('language', 'en')
        
        if not text:
            return jsonify({'error': 'Text cannot be empty'}), 400
        
        # Analyze sentiment
        sentiment_result = chatbot.sentiment_analyzer.analyze_sentiment(text, language)
        emotion_result = chatbot.sentiment_analyzer.detect_emotions(text, language)
        
        return jsonify({
            'sentiment': sentiment_result,
            'emotions': emotion_result,
            'text': text,
            'language': language
        })
        
    except Exception as e:
        logger.error(f"Sentiment analysis error: {str(e)}")
        return jsonify({'error': 'Sentiment analysis failed'}), 500

@app.route('/memory/conversation', methods=['GET'])
def get_conversation_memory():
    """Get conversation history"""
    try:
        user_id = request.args.get('user_id', 'default')
        limit = int(request.args.get('limit', 20))
        
        history = chatbot.conversation_memory.get_conversation_history(user_id, limit)
        
        return jsonify({
            'user_id': user_id,
            'history': history,
            'count': len(history)
        })
        
    except Exception as e:
        logger.error(f"Conversation memory error: {str(e)}")
        return jsonify({'error': 'Failed to get conversation history'}), 500

@app.route('/document/analyze', methods=['POST'])
def analyze_document():
    """Analyze uploaded document"""
    try:
        if 'file' not in request.files:
            return jsonify({'error': 'No file provided'}), 400
        
        file = request.files['file']
        user_id = request.form.get('user_id', 'default')
        
        if file.filename == '':
            return jsonify({'error': 'No file selected'}), 400
        
        # Check if file format is supported
        if not chatbot.document_analyzer.is_supported_format(file.filename):
            return jsonify({'error': 'Unsupported file format'}), 400
        
        # Read file bytes
        file_bytes = file.read()
        
        # Analyze document
        result = chatbot.document_analyzer.analyze_document_from_bytes(
            file_bytes, file.filename, user_id
        )
        
        return jsonify(result)
        
    except Exception as e:
        logger.error(f"Document analysis error: {str(e)}")
        return jsonify({'error': 'Document analysis failed'}), 500

@app.route('/collaboration/rooms', methods=['GET'])
def get_collaboration_rooms():
    """Get available collaboration rooms"""
    try:
        rooms = chatbot.collaboration_manager.get_public_rooms()
        return jsonify({'rooms': rooms})
        
    except Exception as e:
        logger.error(f"Collaboration rooms error: {str(e)}")
        return jsonify({'error': 'Failed to get rooms'}), 500

@app.route('/collaboration/room/create', methods=['POST'])
def create_collaboration_room():
    """Create new collaboration room"""
    try:
        data = request.get_json()
        name = data.get('name', '').strip()
        creator_id = data.get('creator_id', 'default')
        description = data.get('description', '')
        is_public = data.get('is_public', True)
        
        if not name:
            return jsonify({'error': 'Room name cannot be empty'}), 400
        
        result = chatbot.collaboration_manager.create_room(
            name, creator_id, description, is_public
        )
        
        return jsonify(result)
        
    except Exception as e:
        logger.error(f"Create room error: {str(e)}")
        return jsonify({'error': 'Failed to create room'}), 500

@app.route('/analytics/dashboard', methods=['GET'])
def get_analytics_dashboard():
    """Get analytics dashboard data"""
    try:
        days = int(request.args.get('days', 7))
        
        # Get various analytics
        user_analytics = chatbot.analytics_engine.get_user_analytics(days=days)
        conversation_analytics = chatbot.analytics_engine.get_conversation_analytics(days=days)
        system_analytics = chatbot.analytics_engine.get_system_analytics(days=days)
        real_time_metrics = chatbot.analytics_engine.get_real_time_metrics()
        
        return jsonify({
            'user_analytics': user_analytics,
            'conversation_analytics': conversation_analytics,
            'system_analytics': system_analytics,
            'real_time_metrics': real_time_metrics,
            'period_days': days
        })
        
    except Exception as e:
        logger.error(f"Analytics dashboard error: {str(e)}")
        return jsonify({'error': 'Failed to get analytics'}), 500

@app.route('/personality/profiles', methods=['GET'])
def get_personality_profiles():
    """Get available personality profiles"""
    try:
        profiles = chatbot.personality_engine.get_available_profiles()
        current_profile = chatbot.personality_engine.get_current_profile()
        
        return jsonify({
            'available_profiles': profiles,
            'current_profile': current_profile
        })
        
    except Exception as e:
        logger.error(f"Personality profiles error: {str(e)}")
        return jsonify({'error': 'Failed to get profiles'}), 500

@app.route('/personality/set', methods=['POST'])
def set_personality_profile():
    """Set personality profile"""
    try:
        data = request.get_json()
        profile_id = data.get('profile_id')
        user_id = data.get('user_id', 'default')
        
        if not profile_id:
            return jsonify({'error': 'Profile ID is required'}), 400
        
        result = chatbot.personality_engine.set_personality_profile(profile_id, user_id)
        
        return jsonify(result)
        
    except Exception as e:
        logger.error(f"Set personality error: {str(e)}")
        return jsonify({'error': 'Failed to set personality'}), 500

@app.route('/multimodal/process', methods=['POST'])
def process_multimodal_input():
    """Process multi-modal input"""
    try:
        data = request.get_json()
        input_type = data.get('type')
        content = data.get('content')
        metadata = data.get('metadata', {})
        user_id = data.get('user_id', 'default')
        
        if not input_type or not content:
            return jsonify({'error': 'Input type and content are required'}), 400
        
        # Validate input
        validation = chatbot.multimodal_processor.validate_input(data)
        if not validation['is_valid']:
            return jsonify({
                'error': 'Invalid input',
                'details': validation['errors']
            }), 400
        
        # Process input
        result = chatbot.multimodal_processor.process_input(data, user_id)
        
        return jsonify(result)
        
    except Exception as e:
        logger.error(f"Multi-modal processing error: {str(e)}")
        return jsonify({'error': 'Multi-modal processing failed'}), 500

if __name__ == '__main__':
    # Load configuration
    from config import get_config
    
    config_class = get_config()
    app.config.from_object(config_class)
    config_class.init_app(app)
    
    # Load environment variables
    openai.api_key = os.getenv('OPENAI_API_KEY') or config_class.OPENAI_API_KEY
    
    if not openai.api_key:
        logger.warning("OpenAI API key not found. Please set OPENAI_API_KEY environment variable.")
    
    app.run(debug=config_class.DEBUG, host=config_class.HOST, port=config_class.PORT)
519 lines•18.5 KB
python
run.py
Raw Download
Find: Go to:
#!/usr/bin/env python3
"""
Multi-language Chatbot Runner
Author: RSK World (https://rskworld.in)
Founder: Molla Samser
Designer & Tester: Rima Khatun
Contact: help@rskworld.in, +91 93305 39277
Year: 2026
Description: Application runner for multi-language chatbot
"""

import os
import sys
from app import app
from config import get_config

def create_app():
    """Create and configure the Flask application"""
    config_class = get_config()
    app.config.from_object(config_class)
    
    # Initialize app with configuration
    config_class.init_app(app)
    
    return app

def main():
    """Main entry point"""
    # Ensure we're in the right directory
    script_dir = os.path.dirname(os.path.abspath(__file__))
    os.chdir(script_dir)
    
    # Create necessary directories
    os.makedirs('logs', exist_ok=True)
    os.makedirs('instance', exist_ok=True)
    
    # Get configuration
    config_class = get_config()
    
    print("=" * 60)
    print("Multi-language Chatbot")
    print("Powered by RSK World (https://rskworld.in)")
    print("Founder: Molla Samser")
    print("Designer & Tester: Rima Khatun")
    print("Contact: help@rskworld.in, +91 93305 39277")
    print("=" * 60)
    print(f"Environment: {os.getenv('FLASK_ENV', 'development')}")
    print(f"Debug Mode: {app.debug}")
    print(f"Host: {config_class.HOST}")
    print(f"Port: {config_class.PORT}")
    print(f"Supported Languages: {', '.join(config_class.SUPPORTED_LANGUAGES)}")
    print("=" * 60)
    
    # Check for required API keys
    if not config_class.OPENAI_API_KEY:
        print("⚠️  WARNING: OpenAI API key not configured!")
        print("   Set OPENAI_API_KEY environment variable for AI responses.")
        print("   The bot will work with rule-based responses only.")
    
    if not config_class.GOOGLE_TRANSLATE_API_KEY:
        print("⚠️  WARNING: Google Translate API key not configured!")
        print("   Set GOOGLE_TRANSLATE_API_KEY environment variable for better translations.")
        print("   Using free Google Translate service (may have limitations).")
    
    print("🚀 Starting Multi-language Chatbot...")
    print(f"📱 Open your browser and visit: http://{config_class.HOST}:{config_class.PORT}")
    print("🌍 Supports multiple languages with automatic detection!")
    print("🔄 Press Ctrl+C to stop the server")
    print("=" * 60)
    
    try:
        app.run(
            host=config_class.HOST,
            port=config_class.PORT,
            debug=config_class.DEBUG
        )
    except KeyboardInterrupt:
        print("\n👋 Shutting down Multi-language Chatbot...")
        print("Thank you for using RSK World's Multi-language Chatbot!")
        sys.exit(0)
    except Exception as e:
        print(f"❌ Error starting server: {e}")
        sys.exit(1)

if __name__ == '__main__':
    main()
87 lines•2.9 KB
python
🚀 Support RSK World

Subscribe to our YouTube channel for latest tutorials & updates!



Click subscribe & support our work ❤️

About RSK World

Founded by Molla Samser, with Designer & Tester Rima Khatun, RSK World is your one-stop destination for free programming resources, source code, and development tools.

Founder: Molla Samser
Designer & Tester: Rima Khatun

Development

  • Game Development
  • Web Development
  • Mobile Development
  • AI Development
  • Development Tools

Legal

  • Terms & Conditions
  • Privacy Policy
  • Disclaimer

Contact Info

Nutanhat, Mongolkote
Purba Burdwan, West Bengal
India, 713147

+91 93305 39277

hello@rskworld.in
support@rskworld.in

© 2026 RSK World. All rights reserved.

Content used for educational purposes only. View Disclaimer