Nu met 200% meer AI.
This commit is contained in:
2024-02-08 00:09:59 +01:00
parent 83b3d172c0
commit 66e69bc23d
9 changed files with 108 additions and 3 deletions
+11
View File
@@ -0,0 +1,11 @@
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'muzak.settings')
app = Celery('muzak')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
+2
View File
@@ -94,6 +94,8 @@ LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"
LOGIN_URL = "/"
CELERY_BROKER_URL = 'amqp://localhost:5672'
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
+1
View File
@@ -25,6 +25,7 @@ class Track(models.Model):
popularity = models.PositiveIntegerField(null=True)
banter = models.TextField(blank=True)
banter_done = models.BooleanField(default=False)
old = models.BooleanField(default=False)
+58
View File
@@ -0,0 +1,58 @@
from celery import shared_task
from .models import Track
import dotenv
import os
import requests
import time
import json
from random import choice
dotenv.load_dotenv()
@shared_task
def get_banter(id):
track = Track.objects.get(pk=id)
r = requests.post(
os.getenv('AI_ENDPOINT'),
#'http://localhost:11434/api/generate',
json={
'model': os.getenv('AI_MODEL'),
'prompt': str(track)
},
stream=True
)
r.raise_for_status()
for line in r.iter_lines():
body = json.loads(line)
response_part = body.get('response', '')
# the response streams one token at a time, print that as we receive it
print(response_part, end='', flush=True)
track.banter += response_part
track.save()
if 'error' in body:
raise Exception(body['error'])
if body.get('done', False):
track.banter_done = True
track.save()
return body['context']
@shared_task
def get_banter_test(id):
letters = ["a","b","c","d","e","q","w", " "]
track = Track.objects.get(pk=id)
time.sleep(20)
track.banter = "Lorem "
track.save()
time.sleep(.5)
for i in range(100):
track.banter += choice(letters)
track.save()
time.sleep(.3)
track.banter_done = True
track.save()
+14
View File
@@ -0,0 +1,14 @@
<div
class="banter"
hx-get="{% url 'track-banter' track.id %}"
{% if not track.banter_done %}
hx-trigger="every {% if track.banter %}500ms{% else %}5s{% endif %}"
{% endif %}
hx-swap="outerHTML"
>
{% if track.banter != "" %}
{{track.banter}}
{% else %}
{{ waiting | random }}
{% endif %}
</div>
+4 -3
View File
@@ -2,9 +2,6 @@
{% block main-content %}
<h2>Nominate</h2>
{% if nominated %}
<div class="info">{% if error %}❌{% else %}✅{% endif %} {{nominated}}</div>
{% endif %}
{% if warning %}
<div class="info warning">{{warning}}</div>
{% endif %}
@@ -16,4 +13,8 @@
<input type="text" name="spotify_link" placeholder="Spotify-link">
<input type="submit" value="OK">
</form>
{% if nominated %}
<div class="info">{% if error %}❌{% else %}✅{% endif %} {{nominated}}</div>
{% include "Banter.html" with track=nominated %}
{% endif %}
{% endblock %}
+1
View File
@@ -4,6 +4,7 @@ from . import views
urlpatterns = [
path('track/<str:spotify_id>', views.TrackDetailView.as_view(), name="track-detail"),
path('track/', views.NominateView.as_view(), name="nominate"),
path('track/<str:spotify_id>/banter', views.BanterView.as_view(), name="track-banter"),
path('vote/', views.VoteView.as_view(), name="vote"),
path('vote/track', views.VoteTrackView.as_view(), name="vote-track"),
path('', views.AuthView.as_view()),
+16
View File
@@ -7,6 +7,7 @@ import re
from .models import Track, Artist, Album, Vote
from .utils import from_json, get_unvoted
from . import spotify
from .tasks import get_banter
spt = spotify.Spotify()
@@ -96,4 +97,19 @@ class NominateView(LoginRequiredMixin, View):
track.artists.add(artist)
track.album = album
track.save()
get_banter.delay(track.id)
return TemplateResponse(request, "Nominate.html", {"nominated": track})
class BanterView(LoginRequiredMixin, View):
def get(self, request, spotify_id):
try:
track = Track.objects.get(pk=spotify_id)
return TemplateResponse(request, "Banter.html", {
"track": track,
"waiting": ["Nog even..", "Bijna klaar.", "Oké...", "Interessant", "Momentje"]
})
except Track.DoesNotExist:
return HttpResponse("???")
+1
View File
@@ -4,3 +4,4 @@ pillow
python-dotenv
mozilla-django-oidc
django-htmx
celery