from flask import Flask, render_template, request, send_from_directory, jsonify from datetime import datetime import requests from langchain_community.llms import HuggingFaceHub from langchain.prompts import PromptTemplate 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 spacy from bs4 import BeautifulSoup nltk.download('punkt') nltk.download('wordnet') def download_spacy_model(): import spacy 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__) template = "Message: {message}\n\nSentiment Analysis: {sentiment}\n\nConversation History: {history}\n\nDate and Time: {date_time}\n\nBitcoin Price: ${bitcoin_price}\n\nBitcoin Data: {database_tag}\n\nResponse: {response}" prompt = PromptTemplate(template=template, input_variables=["message", "sentiment", "history", "date_time", "bitcoin_price", "database_tag", "response"]) conversation_history = [] MAX_HISTORY_LENGTH = 55 def update_conversation_history(message): if len(conversation_history) >= MAX_HISTORY_LENGTH: conversation_history.pop(0) conversation_history.append(message) def get_bitcoin_price(): 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'] current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") return bitcoin_price, current_time else: return 'Error fetching data', None @app.route('/') def index(): 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 ps = PorterStemmer() stemmed_tokens = [ps.stem(token) for token in tokens] lemmatizer = WordNetLemmatizer() lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens] bitcoin_price, current_time = get_bitcoin_price() conversation_history.append("User: " + user_input) 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="Placeholder", date_time=current_time, bitcoin_price=bitcoin_price, response="") response = "Placeholder response" # Update with actual response generation logic response_message = "Bot: " + response update_conversation_history(response_message) return jsonify({'response':response}) @app.route('/clear_history') def clear_history(): global conversation_history conversation_history = [] return 'Conversation history cleared' @app.route('/assets/') def send_static(path): return send_from_directory('assets', path) 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)