Spaces:
Runtime error
Runtime error
app with emotions
Browse files- app.py +23 -28
- data.py +1 -1
- data/lyrics_with_spotify_url.json +1 -1
- names.py +3 -1
- prompts/bot.prompt +1 -1
- prompts/bot_with_summary.prompt +1 -1
- scripts/create_one_sentence_summary.py +22 -11
- scripts/keep_only_lyrics_on_spotify.py +3 -1
- temp.ipynb +95 -46
app.py
CHANGED
|
@@ -13,36 +13,33 @@ from langchain.embeddings.openai import OpenAIEmbeddings
|
|
| 13 |
|
| 14 |
from data import load_db
|
| 15 |
from names import DATASET_ID, MODEL_ID
|
| 16 |
-
|
| 17 |
|
| 18 |
@st.cache_resource
|
| 19 |
def init():
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
with open("/home/zuppif/Documents/Work/ActiveLoop/ai-shazam/data/lyrics_with_spotify_url_and_summary.json", "r") as f:
|
| 32 |
-
songs = json.load(f)
|
| 33 |
|
| 34 |
prompt = PromptTemplate(
|
| 35 |
-
input_variables=["
|
| 36 |
-
template=Path("prompts/
|
| 37 |
)
|
| 38 |
|
| 39 |
llm = ChatOpenAI(temperature=0.7)
|
| 40 |
|
| 41 |
chain = LLMChain(llm=llm, prompt=prompt)
|
| 42 |
|
| 43 |
-
return
|
| 44 |
|
| 45 |
-
|
| 46 |
|
| 47 |
st.title("Disney song for you")
|
| 48 |
|
|
@@ -56,18 +53,16 @@ placeholder_emotions = st.empty()
|
|
| 56 |
placeholder = st.empty()
|
| 57 |
|
| 58 |
def get_emotions(user_input):
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
# print(matches)
|
| 65 |
-
# doc, score = matches[0]
|
| 66 |
iframes_html = ""
|
| 67 |
-
|
| 68 |
-
|
| 69 |
with placeholder:
|
| 70 |
-
embed_url =
|
| 71 |
iframe_html = f'<iframe src="{embed_url}" style="border:0"> </iframe>'
|
| 72 |
st.components.v1.html(f"<div style='display:flex;flex-direction:column'>{iframe_html}</div>")
|
| 73 |
|
|
|
|
| 13 |
|
| 14 |
from data import load_db
|
| 15 |
from names import DATASET_ID, MODEL_ID
|
| 16 |
+
|
| 17 |
|
| 18 |
@st.cache_resource
|
| 19 |
def init():
|
| 20 |
+
embeddings = OpenAIEmbeddings(model=MODEL_ID)
|
| 21 |
+
dataset_path = f"hub://{os.environ['ACTIVELOOP_ORG_ID']}/{DATASET_ID}"
|
| 22 |
+
|
| 23 |
+
db = load_db(
|
| 24 |
+
dataset_path,
|
| 25 |
+
embedding_function=embeddings,
|
| 26 |
+
token=os.environ["ACTIVELOOP_TOKEN"],
|
| 27 |
+
org_id=os.environ["ACTIVELOOP_ORG_ID"],
|
| 28 |
+
read_only=True,
|
| 29 |
+
)
|
|
|
|
|
|
|
|
|
|
| 30 |
|
| 31 |
prompt = PromptTemplate(
|
| 32 |
+
input_variables=["content"],
|
| 33 |
+
template=Path("prompts/bot.prompt").read_text(),
|
| 34 |
)
|
| 35 |
|
| 36 |
llm = ChatOpenAI(temperature=0.7)
|
| 37 |
|
| 38 |
chain = LLMChain(llm=llm, prompt=prompt)
|
| 39 |
|
| 40 |
+
return db, chain
|
| 41 |
|
| 42 |
+
db, chain = init()
|
| 43 |
|
| 44 |
st.title("Disney song for you")
|
| 45 |
|
|
|
|
| 53 |
placeholder = st.empty()
|
| 54 |
|
| 55 |
def get_emotions(user_input):
|
| 56 |
+
emotions = chain.run(content=user_input)
|
| 57 |
+
print(f"Emotions: {emotions}")
|
| 58 |
+
matches = db.similarity_search_with_score(emotions, distance_metric="cos")
|
| 59 |
+
print(matches)
|
| 60 |
+
doc, score = matches[0]
|
|
|
|
|
|
|
| 61 |
iframes_html = ""
|
| 62 |
+
with placeholder_emotions:
|
| 63 |
+
st.write(emotions)
|
| 64 |
with placeholder:
|
| 65 |
+
embed_url = doc.metadata["embed_url"]
|
| 66 |
iframe_html = f'<iframe src="{embed_url}" style="border:0"> </iframe>'
|
| 67 |
st.components.v1.html(f"<div style='display:flex;flex-direction:column'>{iframe_html}</div>")
|
| 68 |
|
data.py
CHANGED
|
@@ -45,4 +45,4 @@ def load_db(dataset_path: str, *args, **kwargs) -> DeepLake:
|
|
| 45 |
|
| 46 |
if __name__ == "__main__":
|
| 47 |
dataset_path = f"hub://{os.environ['ACTIVELOOP_ORG_ID']}/{DATASET_ID}"
|
| 48 |
-
create_db(dataset_path, "data/
|
|
|
|
| 45 |
|
| 46 |
if __name__ == "__main__":
|
| 47 |
dataset_path = f"hub://{os.environ['ACTIVELOOP_ORG_ID']}/{DATASET_ID}"
|
| 48 |
+
create_db(dataset_path, "data/emotions_with_spotify_url.json")
|
data/lyrics_with_spotify_url.json
CHANGED
|
@@ -492,4 +492,4 @@
|
|
| 492 |
"embed_url": "https://open.spotify.com/embed/track/0d83zVs3OmdjrhfoAxg1dE?utm_source=generator"
|
| 493 |
}
|
| 494 |
]
|
| 495 |
-
}
|
|
|
|
| 492 |
"embed_url": "https://open.spotify.com/embed/track/0d83zVs3OmdjrhfoAxg1dE?utm_source=generator"
|
| 493 |
}
|
| 494 |
]
|
| 495 |
+
}
|
names.py
CHANGED
|
@@ -1,2 +1,4 @@
|
|
| 1 |
MODEL_ID = "text-embedding-ada-002"
|
| 2 |
-
DATASET_ID = "disney-lyrics"
|
|
|
|
|
|
|
|
|
| 1 |
MODEL_ID = "text-embedding-ada-002"
|
| 2 |
+
# DATASET_ID = "disney-lyrics"
|
| 3 |
+
DATASET_ID = "disney-lyrics-emotions"
|
| 4 |
+
|
prompts/bot.prompt
CHANGED
|
@@ -6,4 +6,4 @@ Input: "I am very tired today and I am not feeling weel"
|
|
| 6 |
Output: "Exhaustion, Discomfort, and Fatigue"
|
| 7 |
|
| 8 |
If the sentence is too short, you can also suggest just one or two emotions.
|
| 9 |
-
Please, suggest emotions for input = "{content}", reply ONLY with a max of
|
|
|
|
| 6 |
Output: "Exhaustion, Discomfort, and Fatigue"
|
| 7 |
|
| 8 |
If the sentence is too short, you can also suggest just one or two emotions.
|
| 9 |
+
Please, suggest emotions for input = "{content}", reply ONLY with a max of 4 emotions.
|
prompts/bot_with_summary.prompt
CHANGED
|
@@ -4,7 +4,7 @@ You the following list of songs:
|
|
| 4 |
|
| 5 |
{songs}
|
| 6 |
|
| 7 |
-
Given a input, output the song name that
|
| 8 |
|
| 9 |
For example:
|
| 10 |
Input: "Today I am not feeling great"
|
|
|
|
| 4 |
|
| 5 |
{songs}
|
| 6 |
|
| 7 |
+
Given a input, output the song name that its content vibe, emotions, theme. Just the song name. If the content containes negative sentiment, please provide a song name to help the user instead.
|
| 8 |
|
| 9 |
For example:
|
| 10 |
Input: "Today I am not feeling great"
|
scripts/create_one_sentence_summary.py
CHANGED
|
@@ -1,14 +1,16 @@
|
|
| 1 |
from dotenv import load_dotenv
|
| 2 |
-
load_dotenv()
|
| 3 |
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
from pathlib import Path
|
| 7 |
-
from langchain.chat_models import ChatOpenAI
|
| 8 |
import json
|
| 9 |
from collections import defaultdict
|
|
|
|
| 10 |
from pprint import pprint
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
prompt = PromptTemplate(
|
| 13 |
input_variables=["song"],
|
| 14 |
template=Path("prompts/summary.prompt").read_text(),
|
|
@@ -18,7 +20,10 @@ llm = ChatOpenAI(temperature=0)
|
|
| 18 |
|
| 19 |
chain = LLMChain(llm=llm, prompt=prompt)
|
| 20 |
|
| 21 |
-
with open(
|
|
|
|
|
|
|
|
|
|
| 22 |
data = json.load(f)
|
| 23 |
|
| 24 |
lyrics_summaries = {}
|
|
@@ -26,10 +31,16 @@ lyrics_summaries = {}
|
|
| 26 |
for movie, lyrics in data.items():
|
| 27 |
for lyric in lyrics:
|
| 28 |
print(f"Creating summary for {lyric['name']}")
|
| 29 |
-
summary = chain.run(song=lyric[
|
| 30 |
-
lyrics_summaries[lyric[
|
| 31 |
-
|
| 32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
json.dump(lyrics_summaries, f)
|
| 34 |
|
| 35 |
-
pprint(lyrics_summaries)
|
|
|
|
| 1 |
from dotenv import load_dotenv
|
|
|
|
| 2 |
|
| 3 |
+
load_dotenv()
|
| 4 |
+
|
|
|
|
|
|
|
| 5 |
import json
|
| 6 |
from collections import defaultdict
|
| 7 |
+
from pathlib import Path
|
| 8 |
from pprint import pprint
|
| 9 |
|
| 10 |
+
from langchain.chains import LLMChain
|
| 11 |
+
from langchain.chat_models import ChatOpenAI
|
| 12 |
+
from langchain.prompts import PromptTemplate
|
| 13 |
+
|
| 14 |
prompt = PromptTemplate(
|
| 15 |
input_variables=["song"],
|
| 16 |
template=Path("prompts/summary.prompt").read_text(),
|
|
|
|
| 20 |
|
| 21 |
chain = LLMChain(llm=llm, prompt=prompt)
|
| 22 |
|
| 23 |
+
with open(
|
| 24 |
+
"/home/zuppif/Documents/Work/ActiveLoop/ai-shazam/data/lyrics_with_spotify_url.json",
|
| 25 |
+
"r",
|
| 26 |
+
) as f:
|
| 27 |
data = json.load(f)
|
| 28 |
|
| 29 |
lyrics_summaries = {}
|
|
|
|
| 31 |
for movie, lyrics in data.items():
|
| 32 |
for lyric in lyrics:
|
| 33 |
print(f"Creating summary for {lyric['name']}")
|
| 34 |
+
summary = chain.run(song=lyric["text"])
|
| 35 |
+
lyrics_summaries[lyric["name"].lower()] = {
|
| 36 |
+
"summary": summary,
|
| 37 |
+
"embed_url": lyric["embed_url"],
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
with open(
|
| 41 |
+
"/home/zuppif/Documents/Work/ActiveLoop/ai-shazam/data/lyrics_with_spotify_url_and_summary.json",
|
| 42 |
+
"w",
|
| 43 |
+
) as f:
|
| 44 |
json.dump(lyrics_summaries, f)
|
| 45 |
|
| 46 |
+
pprint(lyrics_summaries)
|
scripts/keep_only_lyrics_on_spotify.py
CHANGED
|
@@ -44,7 +44,9 @@ for movie, lyrics in data.items():
|
|
| 44 |
for lyric in lyrics:
|
| 45 |
name = lyric["name"].lower()
|
| 46 |
if name in spotify_tracks:
|
| 47 |
-
data_filtered[movie].append(
|
|
|
|
|
|
|
| 48 |
tot += 1
|
| 49 |
print(tot)
|
| 50 |
|
|
|
|
| 44 |
for lyric in lyrics:
|
| 45 |
name = lyric["name"].lower()
|
| 46 |
if name in spotify_tracks:
|
| 47 |
+
data_filtered[movie].append(
|
| 48 |
+
{**lyric, **{"embed_url": spotify_tracks[name]["embed_url"]}}
|
| 49 |
+
)
|
| 50 |
tot += 1
|
| 51 |
print(tot)
|
| 52 |
|
temp.ipynb
CHANGED
|
@@ -13,7 +13,7 @@
|
|
| 13 |
},
|
| 14 |
{
|
| 15 |
"cell_type": "code",
|
| 16 |
-
"execution_count":
|
| 17 |
"id": "b1a6a020",
|
| 18 |
"metadata": {
|
| 19 |
"scrolled": true
|
|
@@ -23,16 +23,14 @@
|
|
| 23 |
"name": "stderr",
|
| 24 |
"output_type": "stream",
|
| 25 |
"text": [
|
| 26 |
-
"/
|
| 27 |
-
" warnings.warn(\n",
|
| 28 |
-
"-"
|
| 29 |
]
|
| 30 |
},
|
| 31 |
{
|
| 32 |
"name": "stdout",
|
| 33 |
"output_type": "stream",
|
| 34 |
"text": [
|
| 35 |
-
"This dataset can be visualized in Jupyter Notebook by ds.visualize() or at https://app.activeloop.ai/zuppif/disney-lyrics\n",
|
| 36 |
"\n"
|
| 37 |
]
|
| 38 |
},
|
|
@@ -40,17 +38,17 @@
|
|
| 40 |
"name": "stderr",
|
| 41 |
"output_type": "stream",
|
| 42 |
"text": [
|
| 43 |
-
"
|
| 44 |
]
|
| 45 |
},
|
| 46 |
{
|
| 47 |
"name": "stdout",
|
| 48 |
"output_type": "stream",
|
| 49 |
"text": [
|
| 50 |
-
"hub://zuppif/disney-lyrics loaded successfully.\n",
|
| 51 |
"\n",
|
| 52 |
-
"Deep Lake Dataset in hub://zuppif/disney-lyrics already exists, loading from the storage\n",
|
| 53 |
-
"Dataset(path='hub://zuppif/disney-lyrics', read_only=True, tensors=['embedding', 'ids', 'metadata', 'text'])\n",
|
| 54 |
"\n",
|
| 55 |
" tensor htype shape dtype compression\n",
|
| 56 |
" ------- ------- ------- ------- ------- \n",
|
|
@@ -91,7 +89,7 @@
|
|
| 91 |
},
|
| 92 |
{
|
| 93 |
"cell_type": "code",
|
| 94 |
-
"execution_count":
|
| 95 |
"id": "07d8a381",
|
| 96 |
"metadata": {},
|
| 97 |
"outputs": [],
|
|
@@ -112,56 +110,43 @@
|
|
| 112 |
},
|
| 113 |
{
|
| 114 |
"cell_type": "code",
|
| 115 |
-
"execution_count":
|
| 116 |
"id": "ebca722d",
|
| 117 |
"metadata": {},
|
| 118 |
"outputs": [
|
| 119 |
{
|
| 120 |
"data": {
|
| 121 |
"text/plain": [
|
| 122 |
-
"'
|
| 123 |
]
|
| 124 |
},
|
| 125 |
-
"execution_count":
|
| 126 |
"metadata": {},
|
| 127 |
"output_type": "execute_result"
|
| 128 |
}
|
| 129 |
],
|
| 130 |
"source": [
|
| 131 |
-
"emotions = chain.run(content=\"
|
| 132 |
"emotions"
|
| 133 |
]
|
| 134 |
},
|
| 135 |
{
|
| 136 |
"cell_type": "code",
|
| 137 |
-
"execution_count":
|
| 138 |
"id": "9598a36c",
|
| 139 |
"metadata": {
|
| 140 |
"scrolled": false
|
| 141 |
},
|
| 142 |
"outputs": [
|
| 143 |
{
|
| 144 |
-
"
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
]
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
}
|
| 153 |
-
],
|
| 154 |
-
"source": [
|
| 155 |
-
"doc, score = db.similarity_search_with_score(emotions, distance_metric=\"cos\")[0]\n",
|
| 156 |
-
"doc.metadata[\"embed_url\"]"
|
| 157 |
-
]
|
| 158 |
-
},
|
| 159 |
-
{
|
| 160 |
-
"cell_type": "code",
|
| 161 |
-
"execution_count": 83,
|
| 162 |
-
"id": "d6214e40",
|
| 163 |
-
"metadata": {},
|
| 164 |
-
"outputs": [
|
| 165 |
{
|
| 166 |
"data": {
|
| 167 |
"text/html": [
|
|
@@ -169,7 +154,7 @@
|
|
| 169 |
" <iframe\n",
|
| 170 |
" width=\"700\"\n",
|
| 171 |
" height=\"350\"\n",
|
| 172 |
-
" src=\"https://open.spotify.com/embed/track/
|
| 173 |
" frameborder=\"0\"\n",
|
| 174 |
" allowfullscreen\n",
|
| 175 |
" \n",
|
|
@@ -177,48 +162,112 @@
|
|
| 177 |
" "
|
| 178 |
],
|
| 179 |
"text/plain": [
|
| 180 |
-
"<IPython.lib.display.IFrame at
|
| 181 |
]
|
| 182 |
},
|
| 183 |
-
"execution_count":
|
| 184 |
"metadata": {},
|
| 185 |
"output_type": "execute_result"
|
| 186 |
}
|
| 187 |
],
|
| 188 |
"source": [
|
| 189 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
"\n",
|
| 191 |
"from IPython.display import IFrame\n",
|
| 192 |
"IFrame(doc.metadata[\"embed_url\"], width=700, height=350)"
|
| 193 |
]
|
| 194 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
{
|
| 196 |
"cell_type": "code",
|
| 197 |
-
"execution_count":
|
| 198 |
-
"id": "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
"metadata": {
|
| 200 |
"scrolled": true
|
| 201 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
"outputs": [
|
| 203 |
{
|
| 204 |
"data": {
|
| 205 |
"text/plain": [
|
| 206 |
-
"
|
| 207 |
]
|
| 208 |
},
|
| 209 |
-
"execution_count":
|
| 210 |
"metadata": {},
|
| 211 |
"output_type": "execute_result"
|
| 212 |
}
|
| 213 |
],
|
| 214 |
"source": [
|
| 215 |
-
"
|
| 216 |
]
|
| 217 |
},
|
| 218 |
{
|
| 219 |
"cell_type": "code",
|
| 220 |
"execution_count": null,
|
| 221 |
-
"id": "
|
| 222 |
"metadata": {},
|
| 223 |
"outputs": [],
|
| 224 |
"source": []
|
|
|
|
| 13 |
},
|
| 14 |
{
|
| 15 |
"cell_type": "code",
|
| 16 |
+
"execution_count": 74,
|
| 17 |
"id": "b1a6a020",
|
| 18 |
"metadata": {
|
| 19 |
"scrolled": true
|
|
|
|
| 23 |
"name": "stderr",
|
| 24 |
"output_type": "stream",
|
| 25 |
"text": [
|
| 26 |
+
"/"
|
|
|
|
|
|
|
| 27 |
]
|
| 28 |
},
|
| 29 |
{
|
| 30 |
"name": "stdout",
|
| 31 |
"output_type": "stream",
|
| 32 |
"text": [
|
| 33 |
+
"This dataset can be visualized in Jupyter Notebook by ds.visualize() or at https://app.activeloop.ai/zuppif/disney-lyrics-emotions\n",
|
| 34 |
"\n"
|
| 35 |
]
|
| 36 |
},
|
|
|
|
| 38 |
"name": "stderr",
|
| 39 |
"output_type": "stream",
|
| 40 |
"text": [
|
| 41 |
+
"-"
|
| 42 |
]
|
| 43 |
},
|
| 44 |
{
|
| 45 |
"name": "stdout",
|
| 46 |
"output_type": "stream",
|
| 47 |
"text": [
|
| 48 |
+
"hub://zuppif/disney-lyrics-emotions loaded successfully.\n",
|
| 49 |
"\n",
|
| 50 |
+
"Deep Lake Dataset in hub://zuppif/disney-lyrics-emotions already exists, loading from the storage\n",
|
| 51 |
+
"Dataset(path='hub://zuppif/disney-lyrics-emotions', read_only=True, tensors=['embedding', 'ids', 'metadata', 'text'])\n",
|
| 52 |
"\n",
|
| 53 |
" tensor htype shape dtype compression\n",
|
| 54 |
" ------- ------- ------- ------- ------- \n",
|
|
|
|
| 89 |
},
|
| 90 |
{
|
| 91 |
"cell_type": "code",
|
| 92 |
+
"execution_count": 75,
|
| 93 |
"id": "07d8a381",
|
| 94 |
"metadata": {},
|
| 95 |
"outputs": [],
|
|
|
|
| 110 |
},
|
| 111 |
{
|
| 112 |
"cell_type": "code",
|
| 113 |
+
"execution_count": 76,
|
| 114 |
"id": "ebca722d",
|
| 115 |
"metadata": {},
|
| 116 |
"outputs": [
|
| 117 |
{
|
| 118 |
"data": {
|
| 119 |
"text/plain": [
|
| 120 |
+
"'Exhaustion, Fatigue, Sleepiness, Drained.'"
|
| 121 |
]
|
| 122 |
},
|
| 123 |
+
"execution_count": 76,
|
| 124 |
"metadata": {},
|
| 125 |
"output_type": "execute_result"
|
| 126 |
}
|
| 127 |
],
|
| 128 |
"source": [
|
| 129 |
+
"emotions = chain.run(content=\"Damn I am feeling so tired\")\n",
|
| 130 |
"emotions"
|
| 131 |
]
|
| 132 |
},
|
| 133 |
{
|
| 134 |
"cell_type": "code",
|
| 135 |
+
"execution_count": 77,
|
| 136 |
"id": "9598a36c",
|
| 137 |
"metadata": {
|
| 138 |
"scrolled": false
|
| 139 |
},
|
| 140 |
"outputs": [
|
| 141 |
{
|
| 142 |
+
"name": "stdout",
|
| 143 |
+
"output_type": "stream",
|
| 144 |
+
"text": [
|
| 145 |
+
"[(Document(page_content='Hopeful, determined, inspired, optimistic, longing, driven, passionate, adventurous.', metadata={'movie': 'Hercules', 'name': 'Go the Distance', 'embed_url': 'https://open.spotify.com/embed/track/0D1OY0M5A0qD5HGBvFmFid?utm_source=generator'}), 0.8135085701942444), (Document(page_content='upset, mad, regret, sad, fine, longing, hopeful, impatient', metadata={'movie': 'Encanto', 'name': 'Waiting on a Miracle', 'embed_url': 'https://open.spotify.com/embed/track/3oRW9ZGPRbLRMneQ5lwflt?utm_source=generator'}), 0.8108540177345276), (Document(page_content='nasty, repentant, magic, sad, lonely, bored, withdrawn, busy', metadata={'movie': 'The Little Mermaid', 'name': 'Poor Unfortunate Souls', 'embed_url': 'https://open.spotify.com/embed/track/7zsw78LtXUD7JfEwH64HK2?utm_source=generator'}), 0.8080281615257263), (Document(page_content='hopeful, optimistic, dreamy, inspired, happy, content, fulfilled, grateful', metadata={'movie': 'Pinocchio', 'name': 'When You Wish Upon a Star', 'embed_url': 'https://open.spotify.com/embed/track/1WrPa4lrIddctGWAIYYfP9?utm_source=generator'}), 0.8055723309516907)]\n",
|
| 146 |
+
"https://open.spotify.com/embed/track/0D1OY0M5A0qD5HGBvFmFid?utm_source=generator\n",
|
| 147 |
+
"page_content='Hopeful, determined, inspired, optimistic, longing, driven, passionate, adventurous.' metadata={'movie': 'Hercules', 'name': 'Go the Distance', 'embed_url': 'https://open.spotify.com/embed/track/0D1OY0M5A0qD5HGBvFmFid?utm_source=generator'}\n"
|
| 148 |
+
]
|
| 149 |
+
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
{
|
| 151 |
"data": {
|
| 152 |
"text/html": [
|
|
|
|
| 154 |
" <iframe\n",
|
| 155 |
" width=\"700\"\n",
|
| 156 |
" height=\"350\"\n",
|
| 157 |
+
" src=\"https://open.spotify.com/embed/track/0D1OY0M5A0qD5HGBvFmFid?utm_source=generator\"\n",
|
| 158 |
" frameborder=\"0\"\n",
|
| 159 |
" allowfullscreen\n",
|
| 160 |
" \n",
|
|
|
|
| 162 |
" "
|
| 163 |
],
|
| 164 |
"text/plain": [
|
| 165 |
+
"<IPython.lib.display.IFrame at 0x7f1890ed7430>"
|
| 166 |
]
|
| 167 |
},
|
| 168 |
+
"execution_count": 77,
|
| 169 |
"metadata": {},
|
| 170 |
"output_type": "execute_result"
|
| 171 |
}
|
| 172 |
],
|
| 173 |
"source": [
|
| 174 |
+
"matches = db.similarity_search_with_score(emotions, distance_metric=\"cos\")\n",
|
| 175 |
+
"print(matches)\n",
|
| 176 |
+
"doc, score = matches[0]\n",
|
| 177 |
+
"print(doc.metadata[\"embed_url\"])\n",
|
| 178 |
+
"print(doc)\n",
|
| 179 |
"\n",
|
| 180 |
"from IPython.display import IFrame\n",
|
| 181 |
"IFrame(doc.metadata[\"embed_url\"], width=700, height=350)"
|
| 182 |
]
|
| 183 |
},
|
| 184 |
+
{
|
| 185 |
+
"cell_type": "markdown",
|
| 186 |
+
"id": "e59a45b7",
|
| 187 |
+
"metadata": {},
|
| 188 |
+
"source": [
|
| 189 |
+
"## Using all the songs emotions in the prommpt"
|
| 190 |
+
]
|
| 191 |
+
},
|
| 192 |
{
|
| 193 |
"cell_type": "code",
|
| 194 |
+
"execution_count": 66,
|
| 195 |
+
"id": "7b10a5f2",
|
| 196 |
+
"metadata": {},
|
| 197 |
+
"outputs": [],
|
| 198 |
+
"source": [
|
| 199 |
+
"import json\n",
|
| 200 |
+
"\n",
|
| 201 |
+
"prompt = PromptTemplate(\n",
|
| 202 |
+
" input_variables=[\"songs\", \"user_input\"],\n",
|
| 203 |
+
" template=Path(\"prompts/bot_with_summary.prompt\").read_text(),\n",
|
| 204 |
+
")\n",
|
| 205 |
+
"\n",
|
| 206 |
+
"llm = ChatOpenAI(temperature=0.7)\n",
|
| 207 |
+
"\n",
|
| 208 |
+
"chain = LLMChain(llm=llm, prompt=prompt)"
|
| 209 |
+
]
|
| 210 |
+
},
|
| 211 |
+
{
|
| 212 |
+
"cell_type": "markdown",
|
| 213 |
+
"id": "70b8c445",
|
| 214 |
+
"metadata": {},
|
| 215 |
+
"source": [
|
| 216 |
+
"Let's create the songs string"
|
| 217 |
+
]
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"cell_type": "code",
|
| 221 |
+
"execution_count": 67,
|
| 222 |
+
"id": "36df1c27",
|
| 223 |
+
"metadata": {},
|
| 224 |
+
"outputs": [],
|
| 225 |
+
"source": [
|
| 226 |
+
"with open(\"data/emotions_with_spotify_url.json\", \"r\") as f:\n",
|
| 227 |
+
" data = json.load(f)"
|
| 228 |
+
]
|
| 229 |
+
},
|
| 230 |
+
{
|
| 231 |
+
"cell_type": "code",
|
| 232 |
+
"execution_count": 68,
|
| 233 |
+
"id": "e3e496da",
|
| 234 |
"metadata": {
|
| 235 |
"scrolled": true
|
| 236 |
},
|
| 237 |
+
"outputs": [],
|
| 238 |
+
"source": [
|
| 239 |
+
"songs_str = \"\"\n",
|
| 240 |
+
"\n",
|
| 241 |
+
"for movie, songs in data.items():\n",
|
| 242 |
+
" for song in songs:\n",
|
| 243 |
+
" songs_str += f\"{song['name']}: {song['text']}\\n\""
|
| 244 |
+
]
|
| 245 |
+
},
|
| 246 |
+
{
|
| 247 |
+
"cell_type": "code",
|
| 248 |
+
"execution_count": 71,
|
| 249 |
+
"id": "070b09d8",
|
| 250 |
+
"metadata": {},
|
| 251 |
"outputs": [
|
| 252 |
{
|
| 253 |
"data": {
|
| 254 |
"text/plain": [
|
| 255 |
+
"'Zero to Hero'"
|
| 256 |
]
|
| 257 |
},
|
| 258 |
+
"execution_count": 71,
|
| 259 |
"metadata": {},
|
| 260 |
"output_type": "execute_result"
|
| 261 |
}
|
| 262 |
],
|
| 263 |
"source": [
|
| 264 |
+
"chain.run(songs=songs_str, user_input=\"Damn I am feeling so tired\")"
|
| 265 |
]
|
| 266 |
},
|
| 267 |
{
|
| 268 |
"cell_type": "code",
|
| 269 |
"execution_count": null,
|
| 270 |
+
"id": "b6c6e90c",
|
| 271 |
"metadata": {},
|
| 272 |
"outputs": [],
|
| 273 |
"source": []
|