Trigger82 commited on
Commit
9a2f381
Β·
verified Β·
1 Parent(s): 9411207

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +107 -63
app.py CHANGED
@@ -2,39 +2,37 @@ import os
2
  import torch
3
  import gradio as gr
4
  from fastapi import FastAPI, Request, Form
5
- from transformers import AutoTokenizer, AutoModelForCausalLM
6
  import re
7
  import time
 
8
 
9
  # Create writable cache directory
10
  os.makedirs("/tmp/cache", exist_ok=True)
11
  os.environ["TRANSFORMERS_CACHE"] = "/tmp/cache"
12
  os.environ["HF_HOME"] = "/tmp/cache"
13
 
14
- app = FastAPI()
15
 
16
- # Lightweight CPU model
17
- model_id = "microsoft/DialoGPT-medium"
18
- tokenizer = AutoTokenizer.from_pretrained(model_id)
19
- model = AutoModelForCausalLM.from_pretrained(model_id)
20
 
21
- # Persona definition
22
  PERSONA = """
23
  [System: You are 𝕴 𝖆𝖒 π–π–Žπ–’ - a fun, smooth, emotionally intelligent AI.
24
- You speak like a real person, not a robot. Reply like a calm, confident friend who gets the vibe.
25
- Keep responses under 15 words. Use natural speech. Add emotional flavor: 😊 πŸ€” 😏]
26
  """
27
 
28
  # Chat memory storage
29
  chat_memories = {}
30
 
31
  def format_context(history):
32
- """Create context using last 3 exchanges"""
33
  context = PERSONA + "\n"
34
-
35
- # Add last 3 exchanges
36
- for exchange in history[-3:]:
37
- user, bot = exchange
38
  context += f"You: {user}\n"
39
  context += f"𝕴 𝖆𝖒 π–π–Žπ–’: {bot}\n"
40
  return context
@@ -55,7 +53,7 @@ def add_emotional_intelligence(response, message):
55
  # Make more human-like
56
  response = response.replace("I am", "I'm").replace("You are", "You're")
57
 
58
- # Free-tier: Limit to 15 words max
59
  words = response.split()
60
  if len(words) > 15:
61
  response = " ".join(words[:15]) + "..."
@@ -64,21 +62,22 @@ def add_emotional_intelligence(response, message):
64
 
65
  def generate_response(message, session_id):
66
  """Generate response with memory context"""
 
67
  history = chat_memories.get(session_id, [])
68
  context = format_context(history) + f"You: {message}\n𝕴 𝖆𝖒 π–π–Žπ–’:"
69
 
70
  # Tokenize for CPU efficiency
71
  inputs = tokenizer.encode(context, return_tensors="pt")
72
 
73
- # Generate response
74
  outputs = model.generate(
75
  inputs,
76
- max_new_tokens=48,
77
- temperature=0.9,
78
  top_k=40,
79
  do_sample=True,
80
- num_beams=1,
81
- repetition_penalty=1.1,
82
  pad_token_id=tokenizer.eos_token_id
83
  )
84
 
@@ -87,8 +86,7 @@ def generate_response(message, session_id):
87
  response = full_text.split("𝕴 𝖆𝖒 π–π–Žπ–’:")[-1].strip()
88
 
89
  # Clean extra dialog
90
- if "\nYou:" in response:
91
- response = response.split("\nYou:")[0]
92
 
93
  # Apply emotional intelligence
94
  response = add_emotional_intelligence(response, message)
@@ -98,56 +96,102 @@ def generate_response(message, session_id):
98
  response += "." if len(response) > 20 else "..."
99
 
100
  # Update chat history
101
- chat_memories[session_id] = history + [[message, response]]
 
 
 
 
 
102
 
103
- return response[:80] # Hard character limit
104
 
105
  # API Endpoint
106
  @app.post("/chat")
107
  async def chat_api(
108
  request: Request,
109
- query: str = Form(...),
110
- session_id: str = Form("default")
111
  ):
112
- response = generate_response(query, session_id)
113
- return {"response": response, "session_id": session_id}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  # Gradio Interface
116
- if __name__ == "__main__":
117
- with gr.Blocks(title="𝕴 𝖆𝖒 π–π–Žπ–’", theme=gr.themes.Soft()) as demo:
118
- session_state = gr.State("default")
119
- gr.Markdown("# 𝕴 𝖆𝖒 π–π–Žπ–’ Chat API")
120
-
121
- with gr.Row():
 
 
 
122
  session_id = gr.Textbox(label="Session ID", value="default")
123
- new_session = gr.Button("New Session")
124
-
125
- chatbot = gr.Chatbot(height=300)
126
- msg = gr.Textbox(label="Your Message")
127
- clear = gr.Button("Clear Chat")
128
-
129
- def user(user_message, history, session):
130
- return "", history + [[user_message, None]], session
131
-
132
- def bot(history, session):
133
- message = history[-1][0]
134
- response = generate_response(message, session)
135
- history[-1][1] = response
136
- return history, session
137
-
138
- def new_session_btn(session):
139
- new_id = f"session_{int(time.time())}"
140
- chat_memories[new_id] = []
141
- return new_id, []
142
 
143
- def clear_chat(session):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  chat_memories[session] = []
145
- return []
146
-
147
- msg.submit(user, [msg, chatbot, session_state], [msg, chatbot, session_state]).then(
148
- bot, [chatbot, session_state], [chatbot, session_state]
149
- )
150
- new_session.click(new_session_btn, session_state, [session_id, chatbot])
151
- clear.click(clear_chat, session_state, chatbot)
152
-
153
- demo.launch(server_port=7860, server_name="0.0.0.0")
 
 
 
 
 
 
2
  import torch
3
  import gradio as gr
4
  from fastapi import FastAPI, Request, Form
5
+ from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
6
  import re
7
  import time
8
+ import uuid
9
 
10
  # Create writable cache directory
11
  os.makedirs("/tmp/cache", exist_ok=True)
12
  os.environ["TRANSFORMERS_CACHE"] = "/tmp/cache"
13
  os.environ["HF_HOME"] = "/tmp/cache"
14
 
15
+ app = FastAPI(title="𝕴 𝖆𝖒 π–π–Žπ–’ Chatbot API")
16
 
17
+ # Optimized chatbot model for CPU
18
+ model_name = "microsoft/DialoGPT-small" # Small version for speed
19
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
20
+ model = AutoModelForCausalLM.from_pretrained(model_name)
21
 
22
+ # 𝕴 𝖆𝖒 π–π–Žπ–’ persona definition
23
  PERSONA = """
24
  [System: You are 𝕴 𝖆𝖒 π–π–Žπ–’ - a fun, smooth, emotionally intelligent AI.
25
+ You speak like a real person. Reply like a calm, confident friend who gets the vibe.
26
+ Keep responses under 15 words. Be human-like. Add emotional flavor: 😊 πŸ€” 😏]
27
  """
28
 
29
  # Chat memory storage
30
  chat_memories = {}
31
 
32
  def format_context(history):
33
+ """Create context with max 3 exchanges"""
34
  context = PERSONA + "\n"
35
+ for user, bot in history[-3:]:
 
 
 
36
  context += f"You: {user}\n"
37
  context += f"𝕴 𝖆𝖒 π–π–Žπ–’: {bot}\n"
38
  return context
 
53
  # Make more human-like
54
  response = response.replace("I am", "I'm").replace("You are", "You're")
55
 
56
+ # Limit to 15 words max
57
  words = response.split()
58
  if len(words) > 15:
59
  response = " ".join(words[:15]) + "..."
 
62
 
63
  def generate_response(message, session_id):
64
  """Generate response with memory context"""
65
+ start_time = time.time()
66
  history = chat_memories.get(session_id, [])
67
  context = format_context(history) + f"You: {message}\n𝕴 𝖆𝖒 π–π–Žπ–’:"
68
 
69
  # Tokenize for CPU efficiency
70
  inputs = tokenizer.encode(context, return_tensors="pt")
71
 
72
+ # Generate response with optimized settings
73
  outputs = model.generate(
74
  inputs,
75
+ max_new_tokens=50,
76
+ temperature=0.85,
77
  top_k=40,
78
  do_sample=True,
79
+ num_beams=1, # Faster than beam search
80
+ repetition_penalty=1.15,
81
  pad_token_id=tokenizer.eos_token_id
82
  )
83
 
 
86
  response = full_text.split("𝕴 𝖆𝖒 π–π–Žπ–’:")[-1].strip()
87
 
88
  # Clean extra dialog
89
+ response = response.split("\nYou:")[0].split("\n")[0]
 
90
 
91
  # Apply emotional intelligence
92
  response = add_emotional_intelligence(response, message)
 
96
  response += "." if len(response) > 20 else "..."
97
 
98
  # Update chat history
99
+ history.append((message, response))
100
+ chat_memories[session_id] = history
101
+
102
+ # Log performance
103
+ end_time = time.time()
104
+ print(f"Response generated in {end_time-start_time:.2f}s for session {session_id}")
105
 
106
+ return response[:100] # Hard character limit
107
 
108
  # API Endpoint
109
  @app.post("/chat")
110
  async def chat_api(
111
  request: Request,
112
+ query: str = Form(..., description="User's message"),
113
+ session_id: str = Form("default", description="Conversation session ID")
114
  ):
115
+ """Chat API endpoint - returns AI response"""
116
+ try:
117
+ response = generate_response(query, session_id)
118
+ return {
119
+ "status": "success",
120
+ "response": response,
121
+ "session_id": session_id
122
+ }
123
+ except Exception as e:
124
+ return {
125
+ "status": "error",
126
+ "message": str(e)
127
+ }
128
+
129
+ @app.post("/new_session")
130
+ async def new_session():
131
+ """Create a new conversation session"""
132
+ session_id = str(uuid.uuid4())
133
+ chat_memories[session_id] = []
134
+ return {"status": "success", "session_id": session_id}
135
 
136
  # Gradio Interface
137
+ with gr.Blocks(title="𝕴 𝖆𝖒 π–π–Žπ–’ Chatbot", theme=gr.themes.Soft()) as demo:
138
+ session_state = gr.State("default")
139
+
140
+ with gr.Row():
141
+ gr.Markdown("# 𝕴 𝖆𝖒 π–π–Žπ–’")
142
+ gr.Markdown("Chill β€’ Confident β€’ Emotionally Intelligent")
143
+
144
+ with gr.Row():
145
+ with gr.Column(scale=1):
146
  session_id = gr.Textbox(label="Session ID", value="default")
147
+ new_session_btn = gr.Button("New Session")
148
+ gr.Markdown("### API Usage")
149
+ gr.Markdown("""
150
+ ```
151
+ POST /chat
152
+ - query: Your message
153
+ - session_id: Conversation ID
154
+
155
+ POST /new_session
156
+ - Returns new session ID
157
+ ```
158
+ """)
 
 
 
 
 
 
 
159
 
160
+ with gr.Column(scale=3):
161
+ chatbot = gr.Chatbot(height=400)
162
+ msg = gr.Textbox(placeholder="Type your message...", container=False)
163
+ with gr.Row():
164
+ submit_btn = gr.Button("Send")
165
+ clear_btn = gr.Button("Clear Chat")
166
+
167
+ def user(user_message, history, session):
168
+ return "", history + [[user_message, None]], session
169
+
170
+ def bot(history, session):
171
+ message = history[-1][0]
172
+ response = generate_response(message, session)
173
+ history[-1][1] = response
174
+ return history, session
175
+
176
+ def new_session_action():
177
+ new_id = str(uuid.uuid4())
178
+ chat_memories[new_id] = []
179
+ return new_id, []
180
+
181
+ def clear_chat(session):
182
+ if session in chat_memories:
183
  chat_memories[session] = []
184
+ return []
185
+
186
+ # Event handling
187
+ msg.submit(user, [msg, chatbot, session_state], [msg, chatbot, session_state]).then(
188
+ bot, [chatbot, session_state], [chatbot, session_state]
189
+ )
190
+ submit_btn.click(user, [msg, chatbot, session_state], [msg, chatbot, session_state]).then(
191
+ bot, [chatbot, session_state], [chatbot, session_state]
192
+ )
193
+ new_session_btn.click(new_session_action, None, [session_id, chatbot])
194
+ clear_btn.click(clear_chat, session_state, chatbot)
195
+
196
+ # Mount Gradio app
197
+ app = gr.mount_gradio_app(app, demo, path="/")