File size: 2,915 Bytes
22a9440
 
eb9bbc9
cf13932
22a9440
 
 
29ff848
 
 
 
eb9bbc9
22a9440
f43048b
29ff848
 
f7a821d
29ff848
96e634c
fbce1e2
9496038
96e634c
29ff848
 
9f81ae1
eb9bbc9
29ff848
fbce1e2
96e634c
 
29ff848
8a40cf4
 
9f81ae1
 
 
 
 
ba37f7c
9f81ae1
 
 
 
 
 
96e634c
7a0a525
fbce1e2
9f81ae1
8a40cf4
9c95eb8
e06bba2
 
9f81ae1
0754fb2
29ff848
 
22a9440
 
 
 
 
 
eb9bbc9
29ff848
22a9440
d19a684
22a9440
 
96e634c
 
8a40cf4
22a9440
75c051b
22a9440
 
 
cf13932
 
 
 
 
7bd40e9
4623b74
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
from gpt_index import GPTSimpleVectorIndex
from langchain import OpenAI
import gradio as gr
from gradio import Interface, Textbox
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.txt"
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)

print(f"Repo local_dir: {repo.local_dir}")
print(f"Repo files: {os.listdir(repo.local_dir)}")

def generate_text() -> str:
    with open(DATA_FILE) as file:
        text = ""
        for line in file:
            row_parts = line.strip().split(",")
            if len(row_parts) != 3:
                continue
            user, chatbot, time = row_parts
            text += f"Time: {time}\nUser: {user}\nChatbot: {chatbot}\n\n"
        return text if text else "No messages yet"

def store_message(chatinput: str, chatresponse: str):
    if chatinput and chatresponse:
        with open(DATA_FILE, "a") as file:
            file.write(f"{datetime.now()},{chatinput},{chatresponse}\n")
            print(f"Wrote to datafile: {datetime.now()},{chatinput},{chatresponse}\n")
            
            repo.push_to_hub()  # Push changes to the remote repository
            
    return generate_text()

            
#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)
    print(f"Chat input: {input_text}\nChatbot response: {response.response}")
    
    # return the response
    return response.response


iface = Interface(
    fn=chatbot,
    inputs=Textbox("Enter your question"),
    outputs="text",
    title="AI Chatbot trained on J. Haynes mediation material, v0.5",
    description="Please enter a question for the chatbot as though you were addressing Dr John Haynes eg How do you use intuition in a mediation?")
                                         
iface.launch()