from flask import Flask, render_template, request, send_from_directory from datetime import datetime from langchain_community.llms import HuggingFaceHub from langchain.prompts import PromptTemplate import requests import json import nltk from textblob import TextBlob from nltk.tokenize import word_tokenize from nltk.stem import PorterStemmer from nltk.stem import WordNetLemmatizer import tensorflow as tf from tensorflow import keras import spacy from bs4 import BeautifulSoup nltk.download('punkt') nltk.download('wordnet') def download_spacy_model(): import spacy # Import spacy within the function scope try: spacy.load("en_core_web_sm") except OSError: import spacy.cli spacy.cli.download("en_core_web_sm") download_spacy_model() nlp = spacy.load("en_core_web_sm") app = Flask(__name__) # Load the JSON data from the file with open('ai_chatbot_data.json', 'r') as file: json_data = json.load(file) template = "Message: {message}\n\nSentiment Analysis: {sentiment}\n\nConversation Now Between you and user: {history}\n\nDate and Time: {date_time}\n\nBitcoin Price: ${bitcoin_price}\n\nBitcoin history from 1-jan-2024 to today the tidy is date-open-high-low-close-adj close-volum: {database_tag}\n\nYour system: {json_data}.\n\nResponse:" prompt = PromptTemplate(template=template, input_variables=["message", "sentiment", "history", "date_time", "bitcoin_price", "database_tag", "json_data"]) conversation_history = [] MAX_HISTORY_LENGTH = 55 url = "https://dooratre-info.hf.space/" response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') div_content = soup.find('div', {'id': '45'}) if div_content: print(div_content) else: print("No div with id=45 found on the page.") database_tag=div_content def update_conversation_history(message): if len(conversation_history) >= MAX_HISTORY_LENGTH: conversation_history.pop(0) conversation_history.append(message) def get_bitcoin_price(): current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") url = 'https://api.coindesk.com/v1/bpi/currentprice.json' response = requests.get(url) if response.status_code == 200: data = response.json() bitcoin_price = data['bpi']['USD']['rate'] return bitcoin_price, current_time else: return 'Error fetching data', current_time @app.route('/assets/') def send_static(path): return send_from_directory('assets', path) @app.route('/') def index(): global conversation_history return render_template('index.html', conversation=conversation_history) @app.route('/submit', methods=['POST']) def submit(): user_input = request.json.get('user_input') doc = nlp(user_input) tokens = [token.text for token in doc] sentiment = TextBlob(user_input).sentiment # Add Spacy NLP processing here ps = PorterStemmer() stemmed_tokens = [ps.stem(token) for token in tokens] lemmatizer = WordNetLemmatizer() lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens] sentiment = TextBlob(user_input).sentiment bitcoin_price, current_time = get_bitcoin_price() conversation_history.append("User: " + user_input) # NLTK processing for conversation history history_tokens = word_tokenize("
".join(conversation_history)) history_stemmed_tokens = [ps.stem(token) for token in history_tokens] history_lemmatized_tokens = [lemmatizer.lemmatize(token) for token in history_tokens] model_input = prompt.format(message=user_input, sentiment=sentiment, history="
".join(conversation_history), database_tag=div_content, date_time=current_time, bitcoin_price=bitcoin_price, json_data=json_data,history_tokens=history_tokens,history_stemmed_tokens=history_stemmed_tokens,history_lemmatized_tokens=history_lemmatized_tokens) response = llm(model_input, context="
".join(conversation_history)) bot_response = response.split('Response:')[1].strip() bot_response = bot_response.strip().replace('\n', '
') # Update the conversation history with bot's response update_conversation_history("You " + bot_response) conversation_html = '
'.join(conversation_history) return bot_response @app.route('/clear_history') def clear_history(): global conversation_history conversation_history = [] return 'Conversation history cleared' with open('i.txt', 'r') as file: data = file.read() if __name__ == "__main__": repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1" huggingfacehub_api_token = "hf" + data llm = HuggingFaceHub(huggingfacehub_api_token=huggingfacehub_api_token, repo_id=repo_id, model_kwargs={ "temperature": 0.5, "max_new_tokens": 256, "top_p": 0.5, "repetition_penalty": 1.2, "num_beams": 3, "length_penalty": 1.2, "no_repeat_ngram_size": 2, "early_stopping": True, "num_return_sequences": 1, "use_cache": True, "task": "predictions", "data_source": "financial_markets", "historical_data_fetch": True, "real-time_data_integration": True, "feature_engineering": ["technical_indicators", "sentiment_analysis", "volume_analysis"], "machine_learning_models": ["LSTM", "Random Forest", "ARIMA", "Gradient Boosting"], "prediction_horizon": "short-term", "evaluation_metrics": ["accuracy", "MSE", "MAE", "RMSE"], "model_fine-tuning": True, "interpretability_explanation": True, "ensemble_methods": ["voting", "stacking"], "hyperparameter_optimization": True, "cross-validation": True, "online_learning": True, } ) app.run(host="0.0.0.0", port=7860)