File size: 2,436 Bytes
e27c8af
c90040d
 
e27c8af
c45dc39
c90040d
 
 
 
c45dc39
c90040d
 
 
c45dc39
e27c8af
 
c90040d
 
c45dc39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e27c8af
 
 
6de6cdf
c45dc39
 
6de6cdf
 
c45dc39
 
c90040d
c45dc39
 
 
 
 
 
c90040d
e27c8af
6de6cdf
c45dc39
 
 
 
 
6de6cdf
c45dc39
 
 
 
 
6de6cdf
c45dc39
e27c8af
c45dc39
 
e27c8af
 
 
 
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
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
from peft import PeftModel

# 1) Base model & tokenizer
BASE_MODEL = "facebook/blenderbot-400M-distill"
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
base_model = AutoModelForSeq2SeqLM.from_pretrained(BASE_MODEL)

# 2) Attach your LoRA adapter
ADAPTER_REPO = "abinashnp/bayedger-chatbot"
model = PeftModel.from_pretrained(base_model, ADAPTER_REPO)

# 3) Build the text2text pipeline (no explicit device arg)
chatbot = pipeline(
    "text2text-generation",
    model=model,
    tokenizer=tokenizer,
    # device_map="auto"  # only if you use Accelerate; otherwise remove
)

# 4) System prompt (context) that always precedes user questions
SYSTEM_PROMPT = (
    "You are BayEdger’s AI assistant. You only answer FAQs about BayEdger’s "
    "services, pricing, and contact info. If you don’t know the answer, "
    "you must say exactly:\n"
    '"Sorry, I don’t have that info—please contact [email protected]."\n\n'
    "Here is what you should know about BayEdger:\n"
    "- AI‐powered websites and automation\n"
    "- Chatbots, email agents, process automation, analytics, content gen\n"
    "- Clear pricing tiers: Basic site ($400), Chatbot ($750+50/mo), Email ($1k+100/mo), etc.\n"
    "- Starter/Growth/Premium bundles\n"
    "- Contact: [email protected], +1‐234‐559‐87994, 13 Madison St, NY\n\n"
)

def respond(query):
    # Build the prompt correctly by concatenating
    prompt = (
        SYSTEM_PROMPT
        + f"question: {query}\n"
        + "answer:"
    )

    out = chatbot(
        prompt,
        max_new_tokens=128,
        do_sample=False,
        num_beams=2,
        early_stopping=True,
        pad_token_id=tokenizer.eos_token_id
    )[0]["generated_text"]

    # Strip off the “answer:” prefix
    if "answer:" in out:
        reply = out.split("answer:", 1)[1].strip()
    else:
        reply = out.strip()

    # Fallback for unknowns
    if len(reply) < 15 or "don't know" in reply.lower() or "sorry" in reply.lower():
        return "Sorry, I don’t have that info—please contact [email protected]."

    return reply


# 9) Gradio UI
with gr.Blocks() as demo:
    gr.Markdown("# 🤖 BayEdger FAQ Chatbot")
    txt = gr.Textbox(placeholder="Ask me about BayEdger…", label="Your question")
    out = gr.Textbox(label="Answer")
    txt.submit(respond, txt, out)

demo.launch()