pradeepsengarr commited on
Commit
8ae45bd
·
verified ·
1 Parent(s): 862ba9e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -62
app.py CHANGED
@@ -1,78 +1,65 @@
1
- # app.py
2
- import os
3
- import torch
4
  import streamlit as st
5
- from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
6
- from streamlit_webrtc import webrtc_streamer, AudioProcessorBase
7
- import tempfile
8
  import whisper
 
 
9
 
10
- # -----------------------------
11
- # 🛠 SETUP
12
- # -----------------------------
13
- st.set_page_config(page_title="🧠 Agentic AI Bot", layout="centered")
14
- os.makedirs("offload", exist_ok=True)
15
 
16
- # -----------------------------
17
- # 🧠 Load Whisper Model (for mic)
18
- # -----------------------------
19
  @st.cache_resource
20
  def load_whisper():
21
- return whisper.load_model("base")
 
 
 
 
 
22
 
23
- whisper_model = load_whisper()
24
-
25
- # -----------------------------
26
- # 🤖 Load LLM (LLaMA-2)
27
- # -----------------------------
28
  @st.cache_resource
29
- def load_llm():
30
- model_id = "meta-llama/Llama-2-7b-hf"
31
- tokenizer = AutoTokenizer.from_pretrained(model_id, use_auth_token=True)
32
- model = AutoModelForCausalLM.from_pretrained(
33
- model_id,
34
- device_map="auto",
35
- torch_dtype=torch.float16,
36
- offload_folder="offload",
37
- use_auth_token=True
38
- )
39
- pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
40
- return pipe
41
-
42
- pipe = load_llm()
43
 
44
- # -----------------------------
45
- # 🎤 Microphone Input
46
- # -----------------------------
47
  class AudioProcessor(AudioProcessorBase):
48
  def __init__(self):
49
- self.result = ""
 
 
 
 
 
50
 
51
- def recv(self, frame):
52
- with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
53
- f.write(frame.to_ndarray().tobytes())
54
- audio_path = f.name
55
- try:
56
- text = whisper_model.transcribe(audio_path)["text"]
57
- self.result = text
58
- except:
59
- self.result = "[Could not transcribe audio]"
60
- return frame
61
 
62
- st.subheader("🎙️ Speak to the Agent")
63
- audio_ctx = webrtc_streamer(key="mic", audio_processor_factory=AudioProcessor)
 
64
 
65
- # -----------------------------
66
- # 🧠 Chat Interface
67
- # -----------------------------
68
- st.subheader("💬 Ask a Question")
69
- user_input = ""
70
- if audio_ctx and audio_ctx.audio_processor:
71
- user_input = audio_ctx.audio_processor.result
72
 
73
- user_text = st.text_input("Or type your question here:", user_input)
 
74
 
75
- if st.button("Ask") and user_text.strip():
76
- with st.spinner("Thinking..."):
77
- result = pipe(user_text, max_new_tokens=200, do_sample=True)[0]["generated_text"]
78
- st.success(result)
 
 
 
 
1
  import streamlit as st
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer
 
 
3
  import whisper
4
+ from streamlit_webrtc import webrtc_streamer, AudioProcessorBase
5
+ import torch
6
 
7
+ # ----------------------------- SETUP -----------------------------
8
+ st.set_page_config(page_title="🧠 Talkative AI Bot", layout="centered")
 
 
 
9
 
10
+ # ----------------------------- LOAD MODELS -----------------------------
11
+ # Load Whisper model for speech-to-text
 
12
  @st.cache_resource
13
  def load_whisper():
14
+ try:
15
+ model = whisper.load_model("base")
16
+ return model
17
+ except Exception as e:
18
+ st.error(f"An error occurred while loading Whisper model: {e}")
19
+ return None
20
 
21
+ # Load DistilGPT-2 model for generating responses
 
 
 
 
22
  @st.cache_resource
23
+ def load_language_model():
24
+ try:
25
+ tokenizer = AutoTokenizer.from_pretrained("distilgpt2")
26
+ model = AutoModelForCausalLM.from_pretrained("distilgpt2")
27
+ return model, tokenizer
28
+ except Exception as e:
29
+ st.error(f"An error occurred while loading Language model: {e}")
30
+ return None, None
 
 
 
 
 
 
31
 
32
+ # ----------------------------- FUNCTION TO HANDLE SPEECH -----------------------------
 
 
33
  class AudioProcessor(AudioProcessorBase):
34
  def __init__(self):
35
+ self.whisper_model = load_whisper()
36
+
37
+ def transform(self, audio_frame):
38
+ # Convert audio frame to audio file and get text transcription
39
+ result = self.whisper_model.transcribe(audio_frame)
40
+ return result['text']
41
 
42
+ # ----------------------------- FUNCTION TO GENERATE RESPONSE -----------------------------
43
+ def generate_response(user_input):
44
+ model, tokenizer = load_language_model()
45
+ if model and tokenizer:
46
+ inputs = tokenizer(user_input, return_tensors="pt")
47
+ outputs = model.generate(inputs['input_ids'], max_length=100)
48
+ response = tokenizer.decode(outputs[0], skip_special_tokens=True)
49
+ return response
50
+ return "Sorry, I couldn't process that."
 
51
 
52
+ # ----------------------------- STREAMLIT UI -----------------------------
53
+ st.title("🧠 Talkative AI Bot")
54
+ st.write("Talk to the bot using your microphone, and it will respond!")
55
 
56
+ # Streamlit WebRTC for speech-to-text
57
+ webrtc_streamer(key="example", audio_processor_factory=AudioProcessor)
 
 
 
 
 
58
 
59
+ # Input text for chatbot
60
+ user_input = st.text_input("Type something for the bot:")
61
 
62
+ # Handle text input and generate response
63
+ if user_input:
64
+ response = generate_response(user_input)
65
+ st.write(f"Bot: {response}")