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():
|