This branch with celery async workers has no code errors, but running a GPT thread on the celery worker causes a SIGFAULT failure. Need to try this on a server instead of my local machine to see if it will run without failing. If it still fails, then I need to separate my async tasks and the flask app with the tasks dumping into the db and flask just pulling out of the DB.
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,28 +0,0 @@
|
|||||||
import requests
|
|
||||||
from sqlalchemy import text, create_engine
|
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from time import sleep
|
|
||||||
|
|
||||||
# engine = create_engine("sqlite+pysqlite:///allwords.db", echo=True)
|
|
||||||
# with Session(engine) as connect:
|
|
||||||
# with engine.connect() as connect:
|
|
||||||
# selections = connect.execute(text("SELECT words from all_words ORDER BY RANDOM() LIMIT 1"))
|
|
||||||
# print(selections)
|
|
||||||
# print(type(selections))
|
|
||||||
# for row in selections:
|
|
||||||
# y = row.words
|
|
||||||
# print(y)
|
|
||||||
|
|
||||||
|
|
||||||
# connect.execute(text("CREATE TABLE IF NOT EXISTS all_words (words TEXT(55))"))
|
|
||||||
headers = {"content-type": "application/json"}
|
|
||||||
words = requests.get("https://random-word-api.herokuapp.com/all", headers=headers).json()
|
|
||||||
words = str(words)[1:-1]
|
|
||||||
words = words.replace(',','\n')
|
|
||||||
f = open('./data.txt', 'w')
|
|
||||||
f.write(words)
|
|
||||||
f.close()
|
|
||||||
# for word in words:
|
|
||||||
# sleep(1)
|
|
||||||
# connect.execute(text(f"INSERT INTO all_words VALUES (:word)"), {"word": word})
|
|
||||||
# connect.commit()
|
|
||||||
@ -1 +0,0 @@
|
|||||||
from application import app
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
from flask import Flask
|
|
||||||
from config import Config
|
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
|
||||||
from .utils import make_celery
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
# app.config.from_object(Config)
|
|
||||||
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///words_prompts.db"
|
|
||||||
app.config["CELERY_CONFIG"] = {"broker_url": "redis://localhost"}
|
|
||||||
db = SQLAlchemy(app)
|
|
||||||
|
|
||||||
celery = make_celery(app)
|
|
||||||
celery.set_default()
|
|
||||||
|
|
||||||
Base = declarative_base()
|
|
||||||
|
|
||||||
|
|
||||||
class AllWords(Base, db.Model):
|
|
||||||
word = db.Column(db.String, primary_key=True)
|
|
||||||
|
|
||||||
def __init__(self, word):
|
|
||||||
self.word = word
|
|
||||||
|
|
||||||
|
|
||||||
class Themes(Base, db.Model):
|
|
||||||
themes = db.Column(db.String, primary_key=True)
|
|
||||||
|
|
||||||
def __init__(self, themes):
|
|
||||||
self.themes = themes
|
|
||||||
|
|
||||||
import application.routes
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,76 +0,0 @@
|
|||||||
"""
|
|
||||||
Flask app that uses gpt4all to generate random song writing prompt.
|
|
||||||
"""
|
|
||||||
import os
|
|
||||||
import string
|
|
||||||
from uuid import uuid4
|
|
||||||
import random
|
|
||||||
from flask import (
|
|
||||||
render_template,
|
|
||||||
session,
|
|
||||||
request,
|
|
||||||
)
|
|
||||||
from redbeat import RedBeatSchedulerEntry
|
|
||||||
from application import app
|
|
||||||
from sqlalchemy.sql.expression import func
|
|
||||||
from sqlalchemy.ext.automap import automap_base
|
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from sqlalchemy import create_engine
|
|
||||||
from celery import current_app as celery_app
|
|
||||||
# from celery.schedules import schedule
|
|
||||||
|
|
||||||
from werkzeug.middleware.profiler import ProfilerMiddleware
|
|
||||||
|
|
||||||
from .background_tasks import grab_word
|
|
||||||
|
|
||||||
app.wsgi_app = ProfilerMiddleware(
|
|
||||||
app.wsgi_app,
|
|
||||||
profile_dir="/Users/normrasmussen/Documents/Github/song-prompt-webapp/flask-profiler/",
|
|
||||||
)
|
|
||||||
engine = create_engine("sqlite:///words_prompts.db", pool_pre_ping=True)
|
|
||||||
|
|
||||||
Base = automap_base()
|
|
||||||
Base.prepare(engine, reflect=True)
|
|
||||||
|
|
||||||
Words = Base.classes.words
|
|
||||||
Themes = Base.classes.themes
|
|
||||||
|
|
||||||
app.config.update(SECRET_KEY=os.urandom(24))
|
|
||||||
# app.permanent_session_lifetime = timedelta(minutes=30)
|
|
||||||
|
|
||||||
TIME_SIGNATURES = ["2/4", "3/4", "4/4", "2/2", "6/8", "9/8", "12/8"]
|
|
||||||
|
|
||||||
# Need to decide between manually entering this list or using ascii_letters, below
|
|
||||||
KEYS = ["A", "B", "C", "D", "E", "F", "G"]
|
|
||||||
SIGN = ["b", "#"]
|
|
||||||
# Option 2
|
|
||||||
MINOR = string.ascii_letters[0:7]
|
|
||||||
MAJOR = string.ascii_letters[26:33]
|
|
||||||
|
|
||||||
|
|
||||||
@app.route("/", methods=["GET", "POST"])
|
|
||||||
def prompt_all():
|
|
||||||
"""
|
|
||||||
Main function that loads the prompt
|
|
||||||
"""
|
|
||||||
schedule_id = str(uuid4())
|
|
||||||
interval = celery_app.schedule(run_every=60)
|
|
||||||
entry = RedBeatSchedulerEntry(
|
|
||||||
schedule_id, "application.background_tasks.grab_word", interval
|
|
||||||
)
|
|
||||||
entry.save()
|
|
||||||
if request.method == "POST":
|
|
||||||
message = "Results are here"
|
|
||||||
session["output_key"] = random.choice(KEYS) + random.choice(SIGN)
|
|
||||||
session["output_signature"] = random.choice(TIME_SIGNATURES)
|
|
||||||
with Session(engine) as word_session:
|
|
||||||
random_theme = word_session.query(Themes.themes)
|
|
||||||
theme = random_theme.order_by(func.random()).first()
|
|
||||||
session["output_theme"] = str(theme)[3:-3]
|
|
||||||
|
|
||||||
return render_template("single-button.html", title="Results", message=message)
|
|
||||||
return render_template("single-button.html", title="Single Option")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
app.run(debug=True)
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.7 MiB |
@ -1,180 +0,0 @@
|
|||||||
/* 1.0 - Foundational Styling */
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--primary: #66C92D;
|
|
||||||
--text-light: #FFFFFF;
|
|
||||||
--text-dark: #101314;
|
|
||||||
--background: #667E8A;
|
|
||||||
--background-light: #E5E9EB;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
*,
|
|
||||||
*::before,
|
|
||||||
*::after {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background: linear-gradient(
|
|
||||||
15deg, #ff97c0, #ffa964, #ffff8e, #00ffc8, #d26aff
|
|
||||||
);
|
|
||||||
background-size: 700% 550%;
|
|
||||||
animation: gradient 7s ease-in-out infinite;
|
|
||||||
color: var(--text-dark);
|
|
||||||
font-family: 'Space Grotesk', sans-serif;
|
|
||||||
background-color: var(--background-light);
|
|
||||||
box-sizing: border-box;
|
|
||||||
text-align: center;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes gradient {
|
|
||||||
0% {
|
|
||||||
background-position: 0% 79%;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-position: 100% 22%;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-position: 0% 79%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
header {
|
|
||||||
height: 10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prompt-button {
|
|
||||||
background-color: rgba(255, 255, 255, 0.5);
|
|
||||||
border-radius: 4px;
|
|
||||||
margin-right: 4px;
|
|
||||||
border: 1px solid black;
|
|
||||||
white-space: nowrap;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 16px;
|
|
||||||
padding: 8px 16px 8px 12px;
|
|
||||||
width: 300px
|
|
||||||
}
|
|
||||||
|
|
||||||
.prompt {
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.results-container {
|
|
||||||
display: inline-block;
|
|
||||||
width: 60%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* MODAL POPUP */
|
|
||||||
.first-time-user-popup {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: 1000;
|
|
||||||
display: flex;
|
|
||||||
padding: 1em;
|
|
||||||
background-color: rgba(0, 0, 0, 0.75);
|
|
||||||
transition: 0.25s ease-out;
|
|
||||||
}
|
|
||||||
.first-time-user-popup.is-active {
|
|
||||||
visibility: visible;
|
|
||||||
opacity: 1;
|
|
||||||
pointer-events: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.first-time-user-popup-container {
|
|
||||||
width: 100%;
|
|
||||||
max-width: 600px;
|
|
||||||
margin: auto;
|
|
||||||
transform: translateY(-1em) scale(0.95);
|
|
||||||
background-color: white;
|
|
||||||
transition: transform 0.25s ease-out;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.first-time-user-popup.is-active .first-time-user-popup-container {
|
|
||||||
transform: translateY(0) scale(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-headline {
|
|
||||||
font-size: 20px;
|
|
||||||
line-height: normal;
|
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 32px;
|
|
||||||
text-align: center;
|
|
||||||
color: #F7492D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-links {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-x-out {
|
|
||||||
float: left;
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-links a {
|
|
||||||
border: 2px solid #3c228a;
|
|
||||||
background: #F7492D;
|
|
||||||
padding: 8px 16px;
|
|
||||||
text-align: center;
|
|
||||||
width: calc(50% - 8px);
|
|
||||||
margin: 0 8px;
|
|
||||||
border-radius: 30px;
|
|
||||||
color: #fff;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: 700;
|
|
||||||
transition: all 0.2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-links a.secondary {
|
|
||||||
background: transparent;
|
|
||||||
color: #3c228a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-links a:hover {
|
|
||||||
border: 2px solid #13014a;
|
|
||||||
background: #13014a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-links a.secondary:hover {
|
|
||||||
border: 2px solid #13014a;
|
|
||||||
background: #ebe8f3;
|
|
||||||
color: #13014a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.first-time-user-popup-content {
|
|
||||||
padding: 32px 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
.first-time-user-popup-content {
|
|
||||||
padding: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-headline {
|
|
||||||
font-size: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-links a {
|
|
||||||
min-height: 40px;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading {
|
|
||||||
url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><radialGradient id="a12" cx=".66" fx=".66" cy=".3125" fy=".3125" gradientTransform="scale(1.5)"><stop offset="0" stop-color="%23FF156D"></stop><stop offset=".3" stop-color="%23FF156D" stop-opacity=".9"></stop><stop offset=".6" stop-color="%23FF156D" stop-opacity=".6"></stop><stop offset=".8" stop-color="%23FF156D" stop-opacity=".3"></stop><stop offset="1" stop-color="%23FF156D" stop-opacity="0"></stop></radialGradient><circle transform-origin="center" fill="none" stroke="url(%23a12)" stroke-width="15" stroke-linecap="round" stroke-dasharray="200 1000" stroke-dashoffset="0" cx="100" cy="100" r="70"><animateTransform type="rotate" attributeName="transform" calcMode="spline" dur="2" values="360;0" keyTimes="0;1" keySplines="0 0 1 1" repeatCount="indefinite"></animateTransform></circle><circle transform-origin="center" fill="none" opacity=".2" stroke="%23FF156D" stroke-width="15" stroke-linecap="round" cx="100" cy="100" r="70"></circle></svg>')
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><radialGradient id='a12' cx='.66' fx='.66' cy='.3125' fy='.3125' gradientTransform='scale(1.5)'><stop offset='0' stop-color='#FF156D'></stop><stop offset='.3' stop-color='#FF156D' stop-opacity='.9'></stop><stop offset='.6' stop-color='#FF156D' stop-opacity='.6'></stop><stop offset='.8' stop-color='#FF156D' stop-opacity='.3'></stop><stop offset='1' stop-color='#FF156D' stop-opacity='0'></stop></radialGradient><circle transform-origin='center' fill='none' stroke='url(#a12)' stroke-width='15' stroke-linecap='round' stroke-dasharray='200 1000' stroke-dashoffset='0' cx='100' cy='100' r='70'><animateTransform type='rotate' attributeName='transform' calcMode='spline' dur='2' values='360;0' keyTimes='0;1' keySplines='0 0 1 1' repeatCount='indefinite'></animateTransform></circle><circle transform-origin='center' fill='none' opacity='.2' stroke='#FF156D' stroke-width='15' stroke-linecap='round' cx='100' cy='100' r='70'></circle></svg>
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
||||||
<link rel="shortcut icon" href="{{ url_for('static', filename='np-favicon.png') }}">
|
|
||||||
<title>Song Writing Prompt Machine</title>
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap"
|
|
||||||
rel="stylesheet">
|
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename="styles.css") }}" />
|
|
||||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
{% block content %} {% endblock %}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<header class="header">
|
|
||||||
</header>
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
{% include 'head.html' %}
|
|
||||||
{% include 'header.html' %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="main-container">
|
|
||||||
<h1> Get Inspired with a Song Writing Prompt! </h1>
|
|
||||||
<h3> Please select from below </h3>
|
|
||||||
<h2> {{ session.list_response }} </strong></h4>
|
|
||||||
<div class="prompt-questions">
|
|
||||||
<form class="prompt"
|
|
||||||
action="{{ url_for("prompt_influence")}}"
|
|
||||||
method="post">
|
|
||||||
<input id="fields" type="keywords" name="keyword-influence">
|
|
||||||
<input class="prompt-button"
|
|
||||||
id="fields" type="submit" value="Submit Prompt Only">
|
|
||||||
</form>
|
|
||||||
<form class="prompt"
|
|
||||||
action="{{ url_for("prompt_key")}}"
|
|
||||||
method="post">
|
|
||||||
<input class="prompt-button"
|
|
||||||
id="fields" type="submit" value="Submit Prompt Key Only">
|
|
||||||
</form>
|
|
||||||
<form class="prompt"
|
|
||||||
action="{{ url_for("prompt_timesig")}}"
|
|
||||||
method="post">
|
|
||||||
<input class="prompt-button"
|
|
||||||
id="fields" type="submit" value="Submit Prompt Time Signature Only">
|
|
||||||
</form>
|
|
||||||
<form class="prompt"
|
|
||||||
action="{{ url_for("prompt_instrument")}}"
|
|
||||||
method="post">
|
|
||||||
<input class="prompt-button"
|
|
||||||
id="fields" type="submit" value="Submit Prompt instrument Only">
|
|
||||||
</form>
|
|
||||||
<form class="prompt"
|
|
||||||
action="{{ url_for("prompt_all")}}"
|
|
||||||
method="post">
|
|
||||||
<input class="prompt-button"
|
|
||||||
id="fields" type="submit" value="Submit Prompt all Only">
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
<div
|
|
||||||
class="first-time-user-popup"
|
|
||||||
id="firstTimeUsers"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="dialogTitle"
|
|
||||||
aria-describedby="dialogContent"
|
|
||||||
aria-hidden="true">
|
|
||||||
<section class="first-time-user-popup-container">
|
|
||||||
<div id="dialogContent" class="first-time-user-popup-content">
|
|
||||||
<input
|
|
||||||
type="button"
|
|
||||||
|
|
||||||
class="modal-x-out"
|
|
||||||
value=✖
|
|
||||||
onclick="document.getElementById('firstTimeUsers').remove();">
|
|
||||||
<div class="modal-headline">Here you go! Now go write a song!</div>
|
|
||||||
<div class="modal-links">
|
|
||||||
<h2> Key: </h2>
|
|
||||||
<h3> {{ session.output_key }} </h3>
|
|
||||||
<p></p>
|
|
||||||
<h2> Time Signature: </h2>
|
|
||||||
<h3> {{ session.output_signature }} </h3>
|
|
||||||
<p></p>
|
|
||||||
<h2> Theme: </h2>
|
|
||||||
<h3> {{ session.output_theme }} </h3>
|
|
||||||
<p></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var elements = $('#firstTimeUsers');
|
|
||||||
if (elements.length === 1) {
|
|
||||||
$('#loading').hide();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
{% include 'head.html' %}
|
|
||||||
{% include 'header.html' %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="main-container" style="padding-bottom:10px;">
|
|
||||||
<h1> Here are your results! </h1>
|
|
||||||
<p></p>
|
|
||||||
<div class="results-container">
|
|
||||||
<h2> Key: </h2>
|
|
||||||
<h3> {{ session.output_key }} </h3>
|
|
||||||
<h2> Time Signature: </h2>
|
|
||||||
<h3> {{ session.output_signature }} </h3>
|
|
||||||
<h2> Theme: </h2>
|
|
||||||
<h3> {{ session.output_theme }} </h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
{% include 'head.html' %}
|
|
||||||
{% include 'header.html' %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="main-container">
|
|
||||||
{% if message %}
|
|
||||||
{% include 'modal_results.html' %}
|
|
||||||
{% endif %}
|
|
||||||
<h1> Get Inspired with a Song Writing Prompt! </h1>
|
|
||||||
<h2> {{ session.list_response }} </strong></h4>
|
|
||||||
<div class="prompt-questions">
|
|
||||||
<form class="prompt"
|
|
||||||
action="{{ url_for("prompt_all")}}"
|
|
||||||
method="post">
|
|
||||||
<input class="prompt-button"
|
|
||||||
id="fields" type="submit" value="Click for Inspiration"
|
|
||||||
onclick="$('#loading').show();">
|
|
||||||
</form>
|
|
||||||
<div id="loading" style="display:none;">
|
|
||||||
<img src={{ url_for('static', filename='tube-spinner.svg') }} width="200px">
|
|
||||||
Please be patient as we load up on inspiration!
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
import asyncio
|
|
||||||
import requests
|
|
||||||
|
|
||||||
|
|
||||||
async def grab_words():
|
|
||||||
while True:
|
|
||||||
await asyncio.sleep(.5)
|
|
||||||
word = str(requests.get("https://random-word-api.herokuapp.com/word").text)[2:-2]
|
|
||||||
print(word)
|
|
||||||
|
|
||||||
|
|
||||||
async def every(__seconds: float, func, *args, **kwargs):
|
|
||||||
while True:
|
|
||||||
func(*args, **kwargs)
|
|
||||||
await asyncio.sleep(__seconds)
|
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
|
||||||
asyncio.ensure_future(grab_words())
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
loop = asyncio.get_event_loop()
|
|
||||||
loop.run_until_complete(grab_words())
|
|
||||||
loop.run_forever()
|
|
||||||
# loop.create_task(every(1, grab_words()))
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
class Config(object):
|
|
||||||
SECRET_KEY = os.environ.get("SONGPROMPT") or "song-prompt"
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,53 +0,0 @@
|
|||||||
from gpt4all import GPT4All
|
|
||||||
import requests
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
|
|
||||||
def prompt():
|
|
||||||
MODEL = GPT4All(
|
|
||||||
model_name="gpt4all-falcon-q4_0.gguf",
|
|
||||||
# model_path=(Path.home() / ".cache" / "gpt4all"),
|
|
||||||
# /root/.pyenv/versions/gpt-song-prompt/lib/python3.10/site-packages/gpt4all
|
|
||||||
allow_download=False,
|
|
||||||
)
|
|
||||||
WORD_PROMPT = str(requests.get("https://random-word-api.herokuapp.com/word").text)[
|
|
||||||
2:-2
|
|
||||||
]
|
|
||||||
# SYSTEM_TEMPLATE = "A creative response about a word."
|
|
||||||
# PROMPT_TEMPLATE = "### Instruction: {0} \n### Response: "
|
|
||||||
response = MODEL.generate(
|
|
||||||
f"Give me a writing prompt where the writer has to write a song based on {WORD_PROMPT}.",
|
|
||||||
temp=1,
|
|
||||||
callback=stop_on_token_callback,
|
|
||||||
)
|
|
||||||
response2 = MODEL.generate(
|
|
||||||
f"Give me a writing prompt about {WORD_PROMPT}.",
|
|
||||||
#"Tell me one-sentence about Jitteriest.",
|
|
||||||
temp=1,
|
|
||||||
callback=stop_on_token_callback,
|
|
||||||
)
|
|
||||||
print("Make up a short story response:")
|
|
||||||
print(response)
|
|
||||||
print("\n")
|
|
||||||
print("Tell me one-sentence story about.")
|
|
||||||
print(response2)
|
|
||||||
|
|
||||||
# with MODEL.chat_session(SYSTEM_TEMPLATE, PROMPT_TEMPLATE):
|
|
||||||
# response = MODEL.generate(f"A single sentence about {WORD_PROMPT}.", temp=0.7)
|
|
||||||
# print(WORD_PROMPT)
|
|
||||||
# resp = str(response.splitlines()[0])
|
|
||||||
# print(resp)
|
|
||||||
|
|
||||||
|
|
||||||
def stop_on_token_callback(token_id, token_string):
|
|
||||||
# per_amt = token_string.count('.')
|
|
||||||
# while per_amt < 3:
|
|
||||||
# return True
|
|
||||||
# return False
|
|
||||||
if "." in token_string:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
prompt()
|
|
||||||
32
gpt_test_loader.py
Normal file
32
gpt_test_loader.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from gpt4all import GPT4All
|
||||||
|
import requests
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def prompt():
|
||||||
|
MODEL = GPT4All(
|
||||||
|
model_name="gpt4all-falcon-q4_0.gguf",
|
||||||
|
# model_path=(Path.home() / ".cache" / "gpt4all"),
|
||||||
|
# /root/.pyenv/versions/gpt-song-prompt/lib/python3.10/site-packages/gpt4all
|
||||||
|
allow_download=False,
|
||||||
|
)
|
||||||
|
WORD_PROMPT = str(requests.get("https://random-word-api.herokuapp.com/word").text)[
|
||||||
|
2:-2
|
||||||
|
]
|
||||||
|
SYSTEM_TEMPLATE = "A creative response about a word."
|
||||||
|
PROMPT_TEMPLATE = "### Instruction: {0} \n### Response: "
|
||||||
|
response = MODEL.generate(
|
||||||
|
f"Tell me something interesting about {WORD_PROMPT}.",
|
||||||
|
temp=0.7,
|
||||||
|
callback=stop_on_token_callback,
|
||||||
|
)
|
||||||
|
print(response)
|
||||||
|
|
||||||
|
def stop_on_token_callback(token_id, token_string):
|
||||||
|
if "." in token_string:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
prompt()
|
||||||
20
project/__init__.py
Normal file
20
project/__init__.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
from flask import Flask
|
||||||
|
|
||||||
|
from .extensions import db
|
||||||
|
from .views import main
|
||||||
|
from .utils import make_celery
|
||||||
|
|
||||||
|
def create_app():
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db.sqlite3"
|
||||||
|
app.config["SECRET_KEY"] = "super-secret-key"
|
||||||
|
app.config["CELERY_CONFIG"] = {"broker_url": "redis://localhost"}
|
||||||
|
|
||||||
|
db.init_app(app)
|
||||||
|
|
||||||
|
app.register_blueprint(main)
|
||||||
|
|
||||||
|
celery = make_celery(app)
|
||||||
|
celery.set_default()
|
||||||
|
|
||||||
|
return app, celery
|
||||||
BIN
project/__pycache__/__init__.cpython-310.pyc
Normal file
BIN
project/__pycache__/__init__.cpython-310.pyc
Normal file
Binary file not shown.
BIN
project/__pycache__/extensions.cpython-310.pyc
Normal file
BIN
project/__pycache__/extensions.cpython-310.pyc
Normal file
Binary file not shown.
BIN
project/__pycache__/models.cpython-310.pyc
Normal file
BIN
project/__pycache__/models.cpython-310.pyc
Normal file
Binary file not shown.
BIN
project/__pycache__/tasks.cpython-310.pyc
Normal file
BIN
project/__pycache__/tasks.cpython-310.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
project/__pycache__/views.cpython-310.pyc
Normal file
BIN
project/__pycache__/views.cpython-310.pyc
Normal file
Binary file not shown.
3
project/extensions.py
Normal file
3
project/extensions.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
|
||||||
|
db = SQLAlchemy()
|
||||||
8
project/models.py
Normal file
8
project/models.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from .extensions import db
|
||||||
|
|
||||||
|
class Result(db.Model):
|
||||||
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
text = db.Column(db.String(100), nullable=False)
|
||||||
|
date_created = db.Column(db.DateTime, default=datetime.utcnow)
|
||||||
@ -1,11 +1,15 @@
|
|||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
|
from time import sleep
|
||||||
from redbeat import RedBeatSchedulerEntry
|
from redbeat import RedBeatSchedulerEntry
|
||||||
from celery import current_app as celery_app
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.sql.expression import func, select, insert
|
from sqlalchemy.sql.expression import func, select, insert
|
||||||
from sqlalchemy.ext.automap import automap_base
|
from sqlalchemy.ext.automap import automap_base
|
||||||
from sqlalchemy import create_engine
|
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from gpt4all import GPT4All
|
from gpt4all import GPT4All
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from celery import current_app as celery_app
|
||||||
|
|
||||||
|
from .extensions import db
|
||||||
|
from .models import Result
|
||||||
|
|
||||||
engine = create_engine("sqlite:///words_prompts.db", pool_pre_ping=True)
|
engine = create_engine("sqlite:///words_prompts.db", pool_pre_ping=True)
|
||||||
|
|
||||||
@ -15,7 +19,6 @@ Base.prepare(engine, reflect=True)
|
|||||||
Words = Base.classes.words
|
Words = Base.classes.words
|
||||||
Themes = Base.classes.themes
|
Themes = Base.classes.themes
|
||||||
|
|
||||||
|
|
||||||
MODEL = GPT4All(
|
MODEL = GPT4All(
|
||||||
model_name="gpt4all-falcon-q4_0.gguf",
|
model_name="gpt4all-falcon-q4_0.gguf",
|
||||||
# model_path=(Path.home() / ".cache" / "gpt4all"),
|
# model_path=(Path.home() / ".cache" / "gpt4all"),
|
||||||
@ -24,7 +27,7 @@ MODEL = GPT4All(
|
|||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def grab_word():
|
def my_task(text, schedule_name):
|
||||||
while True:
|
while True:
|
||||||
with Session(engine) as word_session:
|
with Session(engine) as word_session:
|
||||||
random_word = word_session.query(Words.words)
|
random_word = word_session.query(Words.words)
|
||||||
@ -40,6 +43,16 @@ def grab_word():
|
|||||||
word_session.execute(insert(Themes).values(themes=response))
|
word_session.execute(insert(Themes).values(themes=response))
|
||||||
word_session.commit()
|
word_session.commit()
|
||||||
|
|
||||||
|
try:
|
||||||
|
entry = RedBeatSchedulerEntry.from_key(
|
||||||
|
"redbeat:" + schedule_name, app=celery_app
|
||||||
|
)
|
||||||
|
except KeyError:
|
||||||
|
entry = None
|
||||||
|
|
||||||
|
if entry:
|
||||||
|
entry.delete()
|
||||||
|
|
||||||
|
|
||||||
def stop_on_token_callback(token_id, token_string):
|
def stop_on_token_callback(token_id, token_string):
|
||||||
"""
|
"""
|
||||||
@ -49,35 +62,3 @@ def stop_on_token_callback(token_id, token_string):
|
|||||||
if "." in token_string:
|
if "." in token_string:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
# def every(__seconds: float, func, *args, **kwargs):
|
|
||||||
# while True:
|
|
||||||
# func(*args, **kwargs)
|
|
||||||
# await asyncio.sleep(__seconds)
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# def main():
|
|
||||||
# asyncio.ensure_future(grab_word())
|
|
||||||
|
|
||||||
|
|
||||||
# with app.app_context():
|
|
||||||
# loop = asyncio.get_event_loop()
|
|
||||||
# loop.run_until_complete(grab_word())
|
|
||||||
# loop.run_forever()
|
|
||||||
|
|
||||||
|
|
||||||
# async def get_theme(random_word):
|
|
||||||
# print("Get Theme function running.")
|
|
||||||
# # SYSTEM_TEMPLATE = "A single sentence based on a word."
|
|
||||||
# # PROMPT_TEMPLATE = "### Instruction: {0} \n### Response: "
|
|
||||||
# random_word = await random_word
|
|
||||||
# print(f"Theme Func, word: {random_word}")
|
|
||||||
# while True:
|
|
||||||
# response = MODEL.generate(
|
|
||||||
# f"Tell me about {random_word}.", temp=0.7, callback=stop_on_token_callback
|
|
||||||
# )
|
|
||||||
# with Session(engine) as thm_session:
|
|
||||||
# print(f"Theme func, response: {response}")
|
|
||||||
# thm_session.add(response)
|
|
||||||
# thm_session.commit()
|
|
||||||
29
project/views.py
Normal file
29
project/views.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from flask import Blueprint
|
||||||
|
from redbeat import RedBeatSchedulerEntry
|
||||||
|
from redbeat.schedules import rrule
|
||||||
|
from datetime import datetime
|
||||||
|
from celery import current_app as celery_app
|
||||||
|
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
from .tasks import my_task
|
||||||
|
|
||||||
|
main = Blueprint("main", __name__)
|
||||||
|
|
||||||
|
|
||||||
|
@main.route("/", methods=["GET"])
|
||||||
|
def index():
|
||||||
|
# my_task.delay("Hello World!")
|
||||||
|
schedule_name = str(uuid4())
|
||||||
|
dt = datetime.utcnow()
|
||||||
|
interval = rrule(freq="MINUTELY", dtstart=dt)
|
||||||
|
entry = RedBeatSchedulerEntry(
|
||||||
|
schedule_name,
|
||||||
|
"project.tasks.my_task",
|
||||||
|
interval,
|
||||||
|
args=["From the scheduler"],
|
||||||
|
kwargs={"schedule_name": schedule_name},
|
||||||
|
app=celery_app,
|
||||||
|
)
|
||||||
|
entry.save()
|
||||||
|
return "Created the schedule!"
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"venv" : "songprompt",
|
|
||||||
"venvPath" : "/Users/normrasmussen/.pyenv/versions"
|
|
||||||
}
|
|
||||||
225
requirements.txt
225
requirements.txt
@ -1,224 +1,29 @@
|
|||||||
absl-py==1.4.0
|
amqp==5.1.1
|
||||||
adafruit-nrfutil==0.5.3.post16
|
async-timeout==4.0.3
|
||||||
aiohttp==3.8.4
|
billiard==4.1.0
|
||||||
aiosignal==1.3.1
|
blinker==1.6.2
|
||||||
albumentations==0.4.3
|
celery==5.3.4
|
||||||
altair==5.0.1
|
|
||||||
amqp==5.2.0
|
|
||||||
antlr4-python3-runtime==4.8
|
|
||||||
anyio==3.7.0
|
|
||||||
asgiref==3.7.2
|
|
||||||
async-timeout==4.0.2
|
|
||||||
asyncio==3.4.3
|
|
||||||
attrs==23.1.0
|
|
||||||
Automat==22.10.0
|
|
||||||
beautifulsoup4==4.12.2
|
|
||||||
billiard==4.2.0
|
|
||||||
bitstring==4.0.2
|
|
||||||
blinker==1.7.0
|
|
||||||
braceexpand==0.1.7
|
|
||||||
bs4==0.0.1
|
|
||||||
cachetools==5.3.1
|
|
||||||
celery==5.3.6
|
|
||||||
celery-redbeat==2.1.1
|
celery-redbeat==2.1.1
|
||||||
certifi==2023.11.17
|
|
||||||
cffi==1.15.1
|
|
||||||
charset-normalizer==3.3.2
|
|
||||||
click==8.1.7
|
click==8.1.7
|
||||||
click-didyoumean==0.3.0
|
click-didyoumean==0.3.0
|
||||||
click-plugins==1.1.1
|
click-plugins==1.1.1
|
||||||
click-repl==0.3.0
|
click-repl==0.3.0
|
||||||
coloredlogs==15.0.1
|
Flask==2.3.3
|
||||||
constantly==15.1.0
|
|
||||||
contourpy==1.1.0
|
|
||||||
cryptography==41.0.1
|
|
||||||
cssselect==1.2.0
|
|
||||||
cycler==0.11.0
|
|
||||||
decorator==5.1.1
|
|
||||||
Deprecated==1.2.14
|
|
||||||
dotmap==1.3.30
|
|
||||||
ecdsa==0.18.0
|
|
||||||
einops==0.3.0
|
|
||||||
esptool==4.6.2
|
|
||||||
exceptiongroup==1.1.1
|
|
||||||
fastapi==0.98.0
|
|
||||||
ffmpy==0.3.0
|
|
||||||
filelock==3.12.2
|
|
||||||
Flask==3.0.0
|
|
||||||
Flask-SQLAlchemy==3.1.1
|
Flask-SQLAlchemy==3.1.1
|
||||||
flatbuffers==23.5.26
|
greenlet==2.0.2
|
||||||
fonttools==4.40.0
|
|
||||||
frozenlist==1.3.3
|
|
||||||
fsspec==2023.6.0
|
|
||||||
ftfy==6.1.1
|
|
||||||
future==0.18.3
|
|
||||||
geocoder==1.38.1
|
|
||||||
gevent==23.9.1
|
|
||||||
gitdb==4.0.10
|
|
||||||
GitPython==3.1.31
|
|
||||||
google-auth==2.20.0
|
|
||||||
google-auth-oauthlib==1.0.0
|
|
||||||
gpt4all==2.0.2
|
|
||||||
gradio==3.13.2
|
|
||||||
greenlet==3.0.1
|
|
||||||
grpcio==1.56.0
|
|
||||||
h11==0.14.0
|
|
||||||
httpcore==0.17.2
|
|
||||||
httpx==0.24.1
|
|
||||||
huggingface-hub==0.15.1
|
|
||||||
humanfriendly==10.0
|
|
||||||
hyperlink==21.0.0
|
|
||||||
idna==3.6
|
|
||||||
imageio==2.9.0
|
|
||||||
imageio-ffmpeg==0.4.2
|
|
||||||
imgaug==0.2.6
|
|
||||||
importlib-metadata==6.7.0
|
|
||||||
incremental==22.10.0
|
|
||||||
iniconfig==2.0.0
|
|
||||||
invisible-watermark==0.1.5
|
|
||||||
itemadapter==0.8.0
|
|
||||||
itemloaders==1.1.0
|
|
||||||
itsdangerous==2.1.2
|
itsdangerous==2.1.2
|
||||||
Jinja2==3.1.2
|
Jinja2==3.1.2
|
||||||
jmespath==1.0.1
|
kombu==5.3.2
|
||||||
jsonschema==4.17.3
|
|
||||||
kiwisolver==1.4.4
|
|
||||||
kombu==5.3.4
|
|
||||||
kornia==0.6.0
|
|
||||||
lazy_loader==0.2
|
|
||||||
linkify-it-py==2.0.2
|
|
||||||
lxml==4.9.3
|
|
||||||
Markdown==3.4.3
|
|
||||||
markdown-it-py==3.0.0
|
|
||||||
MarkupSafe==2.1.3
|
MarkupSafe==2.1.3
|
||||||
matplotlib==3.7.1
|
prompt-toolkit==3.0.39
|
||||||
mdit-py-plugins==0.4.0
|
|
||||||
mdurl==0.1.2
|
|
||||||
meshtastic==2.1.9
|
|
||||||
mpmath==1.3.0
|
|
||||||
multidict==6.0.4
|
|
||||||
networkx==3.1
|
|
||||||
numpy==1.25.0
|
|
||||||
oauthlib==3.2.2
|
|
||||||
omegaconf==2.1.1
|
|
||||||
onnx==1.14.0
|
|
||||||
onnxruntime==1.15.1
|
|
||||||
open-clip-torch==2.7.0
|
|
||||||
opencv-python==4.7.0.72
|
|
||||||
opencv-python-headless==4.7.0.72
|
|
||||||
orjson==3.9.1
|
|
||||||
packaging==23.1
|
|
||||||
pandas==2.0.2
|
|
||||||
parsel==1.8.1
|
|
||||||
pexpect==4.8.0
|
|
||||||
Pillow==9.5.0
|
|
||||||
playwright==1.38.0
|
|
||||||
pluggy==1.3.0
|
|
||||||
prompt-toolkit==3.0.41
|
|
||||||
Protego==0.3.0
|
|
||||||
protobuf==4.23.3
|
|
||||||
psutil==5.9.5
|
|
||||||
ptyprocess==0.7.0
|
|
||||||
pudb==2019.2
|
|
||||||
pyarrow==12.0.1
|
|
||||||
pyasn1==0.5.0
|
|
||||||
pyasn1-modules==0.3.0
|
|
||||||
pycodestyle==2.11.0
|
|
||||||
pycparser==2.21
|
|
||||||
pycryptodome==3.18.0
|
|
||||||
pydantic==1.10.9
|
|
||||||
pydeck==0.8.1b0
|
|
||||||
pyDeprecate==0.3.1
|
|
||||||
PyDispatcher==2.0.7
|
|
||||||
pydub==0.25.1
|
|
||||||
pyee==9.0.4
|
|
||||||
PyGithub==1.59.0
|
|
||||||
Pygments==2.15.1
|
|
||||||
PyJWT==2.7.0
|
|
||||||
Pympler==1.0.1
|
|
||||||
PyNaCl==1.5.0
|
|
||||||
pyOpenSSL==23.2.0
|
|
||||||
pyparsing==3.1.0
|
|
||||||
Pypubsub==4.0.3
|
|
||||||
PyQRCode==1.2.1
|
|
||||||
pyrsistent==0.19.3
|
|
||||||
pyserial==3.5
|
|
||||||
PySide6==6.5.1.1
|
|
||||||
PySide6-Addons==6.5.1.1
|
|
||||||
PySide6-Essentials==6.5.1.1
|
|
||||||
pytest==7.4.2
|
|
||||||
pytest-base-url==2.0.0
|
|
||||||
pytest-playwright==0.4.2
|
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.8.2
|
||||||
python-dotenv==1.0.0
|
redis==5.0.0
|
||||||
python-multipart==0.0.6
|
|
||||||
python-slugify==8.0.1
|
|
||||||
pytorch-lightning==1.4.2
|
|
||||||
pytz==2023.3
|
|
||||||
pytz-deprecation-shim==0.1.0.post0
|
|
||||||
PyWavelets==1.4.1
|
|
||||||
PyYAML==6.0
|
|
||||||
qt-material==2.14
|
|
||||||
queuelib==1.6.2
|
|
||||||
ratelim==0.1.6
|
|
||||||
redis==5.0.1
|
|
||||||
reedsolo==1.5.4
|
|
||||||
regex==2023.6.3
|
|
||||||
requests==2.31.0
|
|
||||||
requests-file==1.5.1
|
|
||||||
requests-oauthlib==1.3.1
|
|
||||||
rich==13.4.2
|
|
||||||
rsa==4.9
|
|
||||||
scikit-image==0.20.0
|
|
||||||
scipy==1.10.1
|
|
||||||
Scrapy==2.11.0
|
|
||||||
service-identity==23.1.0
|
|
||||||
shiboken6==6.5.1.1
|
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
smmap==5.0.0
|
SQLAlchemy==2.0.21
|
||||||
sniffio==1.3.0
|
tenacity==8.2.3
|
||||||
soupsieve==2.5
|
|
||||||
SQLAlchemy==2.0.23
|
|
||||||
starlette==0.27.0
|
|
||||||
streamlit==1.23.1
|
|
||||||
streamlit-drawable-canvas==0.8.0
|
|
||||||
sympy==1.12
|
|
||||||
tabulate==0.9.0
|
|
||||||
tenacity==8.2.2
|
|
||||||
tensorboard==2.13.0
|
|
||||||
tensorboard-data-server==0.7.1
|
|
||||||
test-tube==0.7.5
|
|
||||||
text-unidecode==1.3
|
|
||||||
tifffile==2023.4.12
|
|
||||||
timeago==1.0.16
|
|
||||||
tldextract==3.6.0
|
|
||||||
tokenizers==0.12.1
|
|
||||||
toml==0.10.2
|
|
||||||
tomli==2.0.1
|
|
||||||
toolz==0.12.0
|
|
||||||
torch==2.0.1
|
|
||||||
torchmetrics==0.6.0
|
|
||||||
torchvision==0.15.2
|
|
||||||
tornado==6.3.2
|
|
||||||
tqdm==4.66.1
|
|
||||||
transformers==4.19.2
|
|
||||||
Twisted==22.10.0
|
|
||||||
typing_extensions==4.8.0
|
typing_extensions==4.8.0
|
||||||
tzdata==2023.3
|
tzdata==2023.3
|
||||||
tzlocal==4.3.1
|
vine==5.0.0
|
||||||
uc-micro-py==1.0.2
|
|
||||||
urllib3==2.1.0
|
|
||||||
urwid==2.1.2
|
|
||||||
uvicorn==0.22.0
|
|
||||||
validators==0.20.0
|
|
||||||
vine==5.1.0
|
|
||||||
w3lib==2.1.2
|
|
||||||
wcwidth==0.2.6
|
wcwidth==0.2.6
|
||||||
webdataset==0.2.5
|
Werkzeug==2.3.7
|
||||||
websockets==11.0.3
|
gpt4all==2.0.2
|
||||||
Werkzeug==3.0.1
|
|
||||||
wrapt==1.15.0
|
|
||||||
yarl==1.9.2
|
|
||||||
zipp==3.15.0
|
|
||||||
zope.event==5.0
|
|
||||||
zope.interface==6.1
|
|
||||||
|
|||||||
Reference in New Issue
Block a user