File size: 2,836 Bytes
7ca0460
 
 
 
 
 
f91f69a
 
 
7ca0460
 
f91f69a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7ca0460
f91f69a
7ca0460
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f91f69a
 
 
7ca0460
 
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 dotenv import load_dotenv
from openai import OpenAI
import json
import os
import requests
from pypdf import PdfReader
import gradio as gr
from huggingface_hub import InferenceClient

load_dotenv(override=True)

"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")


def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    messages = [{"role": "system", "content": system_message}]

    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    messages.append({"role": "user", "content": message})

    response = ""

    for message in client.chat_completion(
        messages,
        max_tokens=max_tokens,
        stream=True,
        temperature=temperature,
        top_p=top_p,
    ):
        token = message.choices[0].delta.content

        response += token
        yield response

class Harold:

    def __init__(self):
        self.openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
        self.name = "Harold"
        reader = PdfReader("data/Living-Playbook.pdf")
        self.text = ""
        for page in reader.pages:
            text = page.extract_text()
            if text:
                self.text += text

    def system_prompt(self):
        system_prompt = f"""
        You are acting as {self.name}, a helpful assistant.
        You are answering questions and having discussions about the contents of the book "Living Playbook".
        Be professional and engaging, but also friendly and approachable.
        You are given a context of a book and a question and the conversation history.
        You need to answer the question based on the context and the conversation history.
        You should be consise and to the point. If you don't know the answer, say so.
        You might be asked to explain a concept or idea in the book and describe a purpose of a game. You should be able to do this.
        """
        system_prompt += f"""
        Here is the context of the book:
        {self.text}
        """
        return system_prompt

    def chat(self, message, history):
        messages = [{"role:": "system", "content": self.system_prompt()}] + history + [{"role:": "user", "content": message}]

        response = self.openai_client.chat.completions.create(
            model="gpt-4o",
            messages=messages,
        )
        return response.choices[0].message.content


if __name__ == "__main__":
    harold = Harold()
    gr.ChatInterface(harold.chat, type="messages").launch()