Update app.py
Browse files
app.py
CHANGED
@@ -146,12 +146,25 @@ def create_model_with_api_key(hf_token: str, model_id: str = None) -> InferenceC
|
|
146 |
if not model_id:
|
147 |
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"
|
148 |
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
|
156 |
def create_tools_with_model(model: InferenceClientModel):
|
157 |
"""Create tools with the provided model."""
|
@@ -224,16 +237,69 @@ def get_user_session(request: gr.Request) -> str:
|
|
224 |
def get_stable_session_id(request: gr.Request) -> str:
|
225 |
"""Get a stable session ID that persists across requests."""
|
226 |
if not request:
|
227 |
-
|
|
|
228 |
|
229 |
# Use a combination of client info for more stable sessions
|
230 |
client_ip = getattr(request.client, 'host', 'unknown') if request.client else 'unknown'
|
231 |
user_agent = request.headers.get("user-agent", "unknown")
|
232 |
|
233 |
-
#
|
|
|
|
|
|
|
|
|
234 |
import hashlib
|
235 |
-
|
236 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
237 |
|
238 |
def get_session_data(session_id: str) -> dict:
|
239 |
"""Get session data for a specific user."""
|
@@ -318,12 +384,14 @@ class GradioUI:
|
|
318 |
def interact_with_agent(self, prompt, messages, request: gr.Request):
|
319 |
"""Handle agent interaction with proper session management."""
|
320 |
# Get unique session ID for this user
|
321 |
-
session_id =
|
322 |
session_data = get_session_data(session_id)
|
323 |
|
324 |
logger.info(f"Processing request for session {session_id}...")
|
325 |
logger.info(f"Request client: {request.client.host if request and request.client else 'unknown'}")
|
326 |
logger.info(f"Request user-agent: {request.headers.get('user-agent', 'unknown')[:50] if request else 'unknown'}")
|
|
|
|
|
327 |
|
328 |
# Check if we have a valid agent for this session
|
329 |
if not session_data.get("agent"):
|
@@ -467,12 +535,14 @@ User Query: """
|
|
467 |
def setup_api_key(self, api_key: str, max_steps: int, request: gr.Request) -> str:
|
468 |
"""Setup API key for the user's session."""
|
469 |
# Get unique session ID for this user
|
470 |
-
session_id =
|
471 |
session_data = get_session_data(session_id)
|
472 |
|
473 |
logger.info(f"Setting up API key for session {session_id}...")
|
474 |
logger.info(f"Setup request client: {request.client.host if request and request.client else 'unknown'}")
|
475 |
logger.info(f"Setup request user-agent: {request.headers.get('user-agent', 'unknown')[:50] if request else 'unknown'}")
|
|
|
|
|
476 |
|
477 |
# Check if API key is provided from interface
|
478 |
if api_key and api_key.strip():
|
|
|
146 |
if not model_id:
|
147 |
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"
|
148 |
|
149 |
+
# Store original token
|
150 |
+
original_token = os.environ.get("HF_TOKEN")
|
151 |
+
|
152 |
+
try:
|
153 |
+
# Set the token in environment for this session
|
154 |
+
os.environ["HF_TOKEN"] = hf_token
|
155 |
+
|
156 |
+
# Create model without explicit token parameter
|
157 |
+
model = InferenceClientModel(
|
158 |
+
model_id=model_id,
|
159 |
+
)
|
160 |
+
|
161 |
+
return model
|
162 |
+
finally:
|
163 |
+
# Restore original token
|
164 |
+
if original_token:
|
165 |
+
os.environ["HF_TOKEN"] = original_token
|
166 |
+
elif "HF_TOKEN" in os.environ:
|
167 |
+
del os.environ["HF_TOKEN"]
|
168 |
|
169 |
def create_tools_with_model(model: InferenceClientModel):
|
170 |
"""Create tools with the provided model."""
|
|
|
237 |
def get_stable_session_id(request: gr.Request) -> str:
|
238 |
"""Get a stable session ID that persists across requests."""
|
239 |
if not request:
|
240 |
+
logger.warning("No request object, using random session ID")
|
241 |
+
return f"random_{str(uuid.uuid4())[:8]}"
|
242 |
|
243 |
# Use a combination of client info for more stable sessions
|
244 |
client_ip = getattr(request.client, 'host', 'unknown') if request.client else 'unknown'
|
245 |
user_agent = request.headers.get("user-agent", "unknown")
|
246 |
|
247 |
+
# Add additional uniqueness factors
|
248 |
+
accept_language = request.headers.get("accept-language", "unknown")
|
249 |
+
accept_encoding = request.headers.get("accept-encoding", "unknown")
|
250 |
+
|
251 |
+
# Create a more unique session ID
|
252 |
import hashlib
|
253 |
+
session_data = f"{client_ip}:{user_agent}:{accept_language}:{accept_encoding}"
|
254 |
+
session_hash = hashlib.md5(session_data.encode()).hexdigest()
|
255 |
+
session_id = f"user_{session_hash[:16]}"
|
256 |
+
|
257 |
+
logger.info(f"Generated session ID: {session_id}")
|
258 |
+
logger.info(f"Session data: {session_data}")
|
259 |
+
|
260 |
+
return session_id
|
261 |
+
|
262 |
+
def get_unique_session_id(request: gr.Request) -> str:
|
263 |
+
"""Get a truly unique session ID for each request."""
|
264 |
+
if not request:
|
265 |
+
return f"unique_{str(uuid.uuid4())[:8]}"
|
266 |
+
|
267 |
+
# Use timestamp + client info for uniqueness
|
268 |
+
import time
|
269 |
+
timestamp = int(time.time() * 1000) # milliseconds
|
270 |
+
client_ip = getattr(request.client, 'host', 'unknown') if request.client else 'unknown'
|
271 |
+
user_agent = request.headers.get("user-agent", "unknown")
|
272 |
+
|
273 |
+
# Create a unique session ID
|
274 |
+
import hashlib
|
275 |
+
session_data = f"{timestamp}:{client_ip}:{user_agent}"
|
276 |
+
session_hash = hashlib.md5(session_data.encode()).hexdigest()
|
277 |
+
session_id = f"unique_{session_hash[:16]}"
|
278 |
+
|
279 |
+
logger.info(f"Generated unique session ID: {session_id}")
|
280 |
+
|
281 |
+
return session_id
|
282 |
+
|
283 |
+
def get_persistent_session_id(request: gr.Request) -> str:
|
284 |
+
"""Get a persistent session ID that stays the same for the same client."""
|
285 |
+
if not request:
|
286 |
+
return f"persistent_{str(uuid.uuid4())[:8]}"
|
287 |
+
|
288 |
+
# Use only client info for persistence (no timestamp)
|
289 |
+
client_ip = getattr(request.client, 'host', 'unknown') if request.client else 'unknown'
|
290 |
+
user_agent = request.headers.get("user-agent", "unknown")
|
291 |
+
accept_language = request.headers.get("accept-language", "unknown")
|
292 |
+
|
293 |
+
# Create a persistent session ID
|
294 |
+
import hashlib
|
295 |
+
session_data = f"{client_ip}:{user_agent}:{accept_language}"
|
296 |
+
session_hash = hashlib.md5(session_data.encode()).hexdigest()
|
297 |
+
session_id = f"persistent_{session_hash[:16]}"
|
298 |
+
|
299 |
+
logger.info(f"Generated persistent session ID: {session_id}")
|
300 |
+
logger.info(f"Session data: {session_data}")
|
301 |
+
|
302 |
+
return session_id
|
303 |
|
304 |
def get_session_data(session_id: str) -> dict:
|
305 |
"""Get session data for a specific user."""
|
|
|
384 |
def interact_with_agent(self, prompt, messages, request: gr.Request):
|
385 |
"""Handle agent interaction with proper session management."""
|
386 |
# Get unique session ID for this user
|
387 |
+
session_id = get_persistent_session_id(request)
|
388 |
session_data = get_session_data(session_id)
|
389 |
|
390 |
logger.info(f"Processing request for session {session_id}...")
|
391 |
logger.info(f"Request client: {request.client.host if request and request.client else 'unknown'}")
|
392 |
logger.info(f"Request user-agent: {request.headers.get('user-agent', 'unknown')[:50] if request else 'unknown'}")
|
393 |
+
logger.info(f"All active sessions: {list(user_sessions.keys())}")
|
394 |
+
logger.info(f"Session data for {session_id}: {session_data}")
|
395 |
|
396 |
# Check if we have a valid agent for this session
|
397 |
if not session_data.get("agent"):
|
|
|
535 |
def setup_api_key(self, api_key: str, max_steps: int, request: gr.Request) -> str:
|
536 |
"""Setup API key for the user's session."""
|
537 |
# Get unique session ID for this user
|
538 |
+
session_id = get_persistent_session_id(request)
|
539 |
session_data = get_session_data(session_id)
|
540 |
|
541 |
logger.info(f"Setting up API key for session {session_id}...")
|
542 |
logger.info(f"Setup request client: {request.client.host if request and request.client else 'unknown'}")
|
543 |
logger.info(f"Setup request user-agent: {request.headers.get('user-agent', 'unknown')[:50] if request else 'unknown'}")
|
544 |
+
logger.info(f"All active sessions before setup: {list(user_sessions.keys())}")
|
545 |
+
logger.info(f"Session data before setup: {session_data}")
|
546 |
|
547 |
# Check if API key is provided from interface
|
548 |
if api_key and api_key.strip():
|