flask / app.py
Dooratre's picture
Update app.py
229fc16 verified
raw
history blame
5.16 kB
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'
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)