sourize commited on
Commit
52bc809
Β·
1 Parent(s): e70daec

Initial Streamlit + Supabase memory bot

Browse files
Files changed (2) hide show
  1. app.py +57 -0
  2. requirements.txt +6 -0
app.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import streamlit as st
3
+ from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
4
+ from peft import PeftModel
5
+ from supabase import create_client
6
+ from sentence_transformers import SentenceTransformer
7
+
8
+ # β€” Supabase creds from Secrets β€”
9
+ SUPA_URL = os.getenv("SUPABASE_URL")
10
+ SUPA_KEY = os.getenv("SUPABASE_SERVICE_ROLE_KEY")
11
+ supabase = create_client(SUPA_URL, SUPA_KEY)
12
+
13
+ # β€” Embedding model & retrieval function β€”
14
+ embedder = SentenceTransformer("paraphrase-MiniLM-L3-v2")
15
+ def fetch_mems(query, k=5):
16
+ vec = embedder.encode(query).tolist()
17
+ # call your RPC
18
+ data = supabase.rpc("match_memories", {"query_embedding": vec, "match_count": k}).execute().data
19
+ return data
20
+
21
+ def add_mem(speaker, text):
22
+ vec = embedder.encode(text).tolist()
23
+ supabase.table("memories").insert({
24
+ "speaker": speaker, "text": text, "embedding": vec
25
+ }).execute()
26
+
27
+ # β€” Load LoRA model from HF hub β€”
28
+ REPO = "sourize/phi2-memory-lora"
29
+ tokenizer = AutoTokenizer.from_pretrained(REPO, trust_remote_code=True, padding_side="left")
30
+ model_base = AutoModelForCausalLM.from_pretrained(REPO, trust_remote_code=True)
31
+ model_base.resize_token_embeddings(len(tokenizer))
32
+ model = PeftModel.from_pretrained(model_base, REPO)
33
+ pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0,
34
+ do_sample=True, top_p=0.9, temperature=0.8)
35
+
36
+ st.title("🧠 Memory-Aware Phi-2 Bot")
37
+ if "history" not in st.session_state:
38
+ st.session_state.history = []
39
+
40
+ def chat(u):
41
+ add_mem("user", u)
42
+ mems = fetch_mems(u, 3)
43
+ block = "\n".join(f"{m['speaker']}: {m['text']}" for m in mems)
44
+ prompt = f"Memory:\n{block}\n\nUser: {u}\nAssistant:"
45
+ out = pipe(prompt, max_length=200)[0]["generated_text"].split("Assistant:")[-1].strip()
46
+ add_mem("assistant", out)
47
+ return out
48
+
49
+ user = st.text_input("You:")
50
+ if user:
51
+ resp = chat(user)
52
+ st.session_state.history.append(("You", user))
53
+ st.session_state.history.append(("Bot", resp))
54
+
55
+ for s, t in st.session_state.history:
56
+ style = "### You:" if s=="You" else "**Bot:**"
57
+ st.markdown(f"{style} {t}")
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ streamlit
2
+ transformers>=4.30
3
+ peft
4
+ supabase
5
+ sentence-transformers
6
+ faiss-cpu