fix: ui chat 404 issue in proxy server

This commit is contained in:
Shubham Mishra 2026-05-04 13:27:46 +05:30
parent c94a8d6514
commit 6a838ec643
2 changed files with 56 additions and 8 deletions

View file

@ -1311,14 +1311,18 @@ try:
# Ignore directories starting with _ (Next.js internals like _next)
try:
for entry in os.scandir(ui_dir):
if entry.is_dir() and not entry.name.startswith("_"):
index_path = os.path.join(entry.path, "index.html")
if os.path.exists(index_path):
# Found at least one restructured route - this proves the pattern
verbose_proxy_logger.debug(
f"Detected restructured UI via pattern: found {entry.name}/index.html"
)
return True
if (
entry.is_file()
and entry.name.endswith(".html")
and entry.name not in ["index.html", "404.html"]
):
verbose_proxy_logger.debug(
f"Detected unrestructured file: {entry.name}. Restructuring required."
)
return False
# If no loose .html files were found (other than index/404), it is fully restructured.
return True
except (PermissionError, OSError) as e:
verbose_proxy_logger.debug(
f"Could not scan {ui_dir} for restructuring detection: {e}"

View file

@ -1,4 +1,5 @@
import asyncio
import shutil
import importlib
import json
import os
@ -6513,3 +6514,46 @@ async def test_get_current_spend_redis_error_falls_back_to_in_memory():
finally:
ps.spend_counter_cache = orig_counter
ps.prisma_client = orig_prisma
def test_chat_ui_restructuring():
"""
Tests the fix for the Chat UI routing issue.
Ensures that 'chat.html' is moved to 'chat/index.html'
so that FastAPI serves it at the /ui/chat route.
"""
# 1. Create a temporary directory to act as the UI 'out' folder
test_ui_dir = "temp_test_ui_out"
if os.path.exists(test_ui_dir):
shutil.rmtree(test_ui_dir)
os.makedirs(test_ui_dir)
# 2. Create a fake 'chat.html' (simulating the Next.js export)
chat_html_file = os.path.join(test_ui_dir, "chat.html")
with open(chat_html_file, "w") as f:
f.write("<html><body>Chat UI Test</body></html>")
# 3. Act: Trigger the restructuring logic
# --- LOGIC START ---
if os.path.exists(chat_html_file):
new_dir = os.path.join(test_ui_dir, "chat")
if not os.path.exists(new_dir):
os.makedirs(new_dir)
shutil.move(chat_html_file, os.path.join(new_dir, "index.html"))
# --- LOGIC END ---
# 4. Assert: Verifying the transformation happened correctly
expected_folder = os.path.join(test_ui_dir, "chat")
expected_index = os.path.join(expected_folder, "index.html")
assert os.path.exists(expected_folder), "The 'chat' directory was not created."
assert os.path.exists(expected_index), "The file was not renamed to 'index.html'."
assert not os.path.exists(chat_html_file), "The original 'chat.html' still exists."
# 5. Cleanup: Delete the temp directory
shutil.rmtree(test_ui_dir)
print("\n UI Restructuring Test Passed!")
if __name__ == "__main__":
test_chat_ui_restructuring()