File size: 1,827 Bytes
e997328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
db2d292
e997328
 
 
db2d292
 
 
 
 
 
 
 
 
 
e997328
 
db2d292
 
e997328
 
 
 
 
 
db2d292
e997328
db2d292
e997328
 
 
 
 
 
 
 
 
 
 
 
 
db2d292
 
 
 
 
e997328
db2d292
 
e997328
db2d292
e997328
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from pathlib import Path

import streamlit as st
from dotenv import load_dotenv
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

load_dotenv()
import os

from langchain.chat_models import ChatOpenAI
from langchain.embeddings.openai import OpenAIEmbeddings

from data import load_db
from names import DATASET_ID, MODEL_ID


@st.cache_resource
def init():
    embeddings = OpenAIEmbeddings(model=MODEL_ID)
    dataset_path = f"hub://{os.environ['ACTIVELOOP_ORG_ID']}/{DATASET_ID}"

    db = load_db(
        dataset_path,
        embedding_function=embeddings,
        token=os.environ["ACTIVELOOP_TOKEN"],
        org_id=os.environ["ACTIVELOOP_ORG_ID"],
        read_only=True,
    )

    prompt = PromptTemplate(
        input_variables=["content"],
        template=Path("prompts/bot.prompt").read_text(),
    )

    llm = ChatOpenAI(temperature=0.7)

    chain = LLMChain(llm=llm, prompt=prompt)

    return db, chain

db, chain = init()

st.title("Disney song for you")

text_input = st.text_input(
    label="How are you feeling today?",
    placeholder="I am ready to rock and rool!",
)

clicked = st.button("Click me")
placeholder_emotions = st.empty()
placeholder = st.empty()

def get_emotions(user_input):
    emotions = chain.run(content=user_input)
    print(f"Emotions: {emotions}")
    matches = db.similarity_search_with_score(emotions, distance_metric="cos")
    print(matches)
    doc, score = matches[0]
    iframes_html = ""
    with placeholder_emotions:
        st.write(emotions)
    with placeholder:
        embed_url = doc.metadata["embed_url"]
        iframe_html = f'<iframe src="{embed_url}" style="border:0"> </iframe>'
        st.components.v1.html(f"<div style='display:flex;flex-direction:column'>{iframe_html}</div>")


if clicked:
    get_emotions(text_input)