File size: 3,039 Bytes
22a9440
 
eb9bbc9
22a9440
 
 
29ff848
 
 
 
eb9bbc9
22a9440
f43048b
29ff848
 
 
 
96e634c
 
29ff848
 
 
eb9bbc9
29ff848
96e634c
 
 
29ff848
c7cdf77
29ff848
 
 
 
 
 
 
 
 
 
 
 
 
308df49
 
8810fc0
29ff848
 
 
 
96e634c
7a0a525
29ff848
3dc878a
 
 
 
29ff848
 
 
 
 
 
 
22a9440
 
 
 
 
 
eb9bbc9
29ff848
22a9440
d19a684
22a9440
 
96e634c
 
22a9440
75c051b
22a9440
 
 
 
 
 
 
 
 
 
 
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from gpt_index import GPTSimpleVectorIndex
from langchain import OpenAI
import gradio as gr
import sys
import os
import datetime
import huggingface_hub
from huggingface_hub import Repository
from datetime import datetime
import csv

os.environ["OPENAI_API_KEY"] = os.environ['SECRET_CODE']

# Need to write to persistent dataset because cannot store temp data on spaces
DATASET_REPO_URL = "https://huggingface.co/datasets/peterpull/MediatorBot"
DATA_FILENAME = "data.csv"
DATA_FILE = os.path.join("data", DATA_FILENAME)

# I am guessing we need a write access token.
HF_TOKEN = os.environ.get("HF_TOKEN")
print("HF TOKEN is none?", HF_TOKEN is None)
print("HF hub ver", huggingface_hub.__version__)

repo = Repository(
    local_dir="data", 
    clone_from=DATASET_REPO_URL, 
    use_auth_token=HF_TOKEN)


def generate_html() -> str:
    with open(DATA_FILE) as csvfile:
        reader = csv.DictReader(csvfile)
        rows = []
        for row in reader:
            rows.append(row)
        rows.reverse()
        if len(rows) == 0:
            return "no messages yet"
        else:
            html = "<div class='chatbot'>"
            for row in rows:
                html += "<div>"
                html += f"<span>{row['chatinput']}</span>"
                html += f"<span class='message'>{row['chatresponse']}</span>"
                html += f"<span class='time'>{row['time']}</span>"
                html += "</div>"
            html += "</div>"
            return html

def store_message(chatinput: str, chatresponse: str):
    if chatinput and chatresponse:
        with open(DATA_FILE, "a") as csvfile:
            writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
            if csvfile.tell() == 0:
                writer.writerow(['User input', 'Chatbot response', 'Date and Time'])
            writer.writerow([chatinput, chatresponse, datetime.now().strftime('%Y-%m-%d %H:%M:%S')])
        commit_url = repo.push_to_hub()
        print(commit_url)

    return generate_html()

            
#gets the index file which is the context data
def get_index(index_file_path):
    if os.path.exists(index_file_path):
        return GPTSimpleVectorIndex.load_from_disk(index_file_path)
    else:
        print(f"Error: '{index_file_path}' does not exist.")
        sys.exit()

# passes the prompt to the chatbot
def chatbot(input_text, mentioned_person='Mediator John Haynes'):
    index = get_index('./index/indexsmall.json')
    prompt = f"You are {mentioned_person}: {input_text}\n\n At the end of your answer  ask a provocative question."
    response = index.query(prompt, response_mode="compact")

    store_message(input_text,response)
    
    # return the response
    return response.response



iface = gr.Interface(fn=chatbot, 
                     inputs=gr.inputs.Textbox("Enter your question"), 
                     outputs="text",
                     title="AI Chatbot trained on J. Haynes mediation material, v0.1",
                     description="test")
iface.launch()