File size: 3,488 Bytes
b6a467a
 
4e2c9cd
 
cd618c5
 
690b43c
 
241003b
cd618c5
241003b
b6a467a
5606667
 
 
29d1f72
e925ddf
29d1f72
690b43c
54072ad
e925ddf
 
 
 
54072ad
29d1f72
e925ddf
690b43c
e925ddf
690b43c
 
 
e925ddf
690b43c
 
 
e925ddf
 
 
 
 
690b43c
cd618c5
690b43c
 
 
 
 
e63c0a3
690b43c
 
b6a467a
690b43c
cd618c5
690b43c
 
 
 
cd618c5
 
 
 
 
690b43c
cd618c5
 
 
 
 
 
 
690b43c
54072ad
b6a467a
cd618c5
b6a467a
 
 
 
 
 
 
 
 
 
 
54072ad
cd618c5
b6a467a
54072ad
b6a467a
 
 
690b43c
b6a467a
 
 
 
 
 
cd618c5
b6a467a
 
 
cd618c5
b6a467a
690b43c
cd618c5
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import gradio as gr
from huggingface_hub import InferenceClient
import faiss
import numpy as np
import os
import time
import json
import threading  # βœ… Run embeddings in parallel

# βœ… Ensure FAISS is installed
os.system("pip install faiss-cpu")

def log(message):
    print(f"βœ… {message}")

DATA_DIR = "data"
os.makedirs(DATA_DIR, exist_ok=True)  # Ensure directory exists

# βœ… Step 1: Load Datasets from HF and Save Locally
datasets = {
    "sales": "goendalf666/sales-conversations",
    "blended": "blended_skill_talk",
    "dialog": "daily_dialog",
    "multiwoz": "multi_woz_v22",
}

for name, hf_name in datasets.items():
    file_path = os.path.join(DATA_DIR, f"{name}.json")

    if os.path.exists(file_path):
        log(f"βœ… {name} dataset already stored at {file_path}")
        continue  # Skip if dataset exists

    log(f"πŸ“₯ Downloading {name} dataset...")
    dataset = load_dataset(hf_name)
    train_data = dataset["train"]
    data_list = [dict(row) for row in train_data]

    with open(file_path, "w") as f:
        json.dump(data_list, f, indent=2)

    log(f"βœ… {name} dataset saved to {file_path}")

# βœ… Step 2: Run Embeddings in a Separate Thread
def run_embeddings():
    log("πŸš€ Running embeddings script in background...")
    import embeddings  # βœ… This will automatically run embeddings.py
    log("βœ… Embeddings process finished.")

embedding_thread = threading.Thread(target=run_embeddings)
embedding_thread.start()  # βœ… Start embedding in background

# βœ… Step 3: Check FAISS index
def check_faiss():
    index_path = "my_embeddings.faiss"  # Ensure file has .faiss extension

    if not os.path.exists(index_path):
        return "⚠️ No FAISS index found! Embeddings might still be processing."

    try:
        index = faiss.read_index(index_path)
        num_vectors = index.ntotal
        dim = index.d
        return f"πŸ“Š FAISS index contains {num_vectors} vectors.\nβœ… Embedding dimension: {dim}"
    except Exception as e:
        return f"❌ ERROR: Failed to load FAISS index - {e}"

log("πŸ” Checking FAISS embeddings...")
faiss_status = check_faiss()
log(faiss_status)

# βœ… Step 4: Initialize Chatbot
client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.3")

def respond(message, history, 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_completions(
        messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p
    ):
        token = message["choices"][0]["delta"]["content"]
        response += token
        yield response

# βœ… Step 5: Start Chatbot Interface
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
    ],
)

log("βœ… All systems go! Launching chatbot...")
if __name__ == "__main__":
    demo.launch()  # βœ… FIXED typo