fix(cli): persist HF user id in saved sessions (#146)
Browse files* fix(cli): persist HF user id in saved sessions
Co-authored-by: OpenAI Codex <codex@openai.com>
* test: remove submission loop user id unit test
Co-authored-by: OpenAI Codex <codex@openai.com>
---------
Co-authored-by: OpenAI Codex <codex@openai.com>
- agent/core/agent_loop.py +2 -1
- agent/main.py +15 -6
agent/core/agent_loop.py
CHANGED
|
@@ -1362,6 +1362,7 @@ async def submission_loop(
|
|
| 1362 |
tool_router: ToolRouter | None = None,
|
| 1363 |
session_holder: list | None = None,
|
| 1364 |
hf_token: str | None = None,
|
|
|
|
| 1365 |
local_mode: bool = False,
|
| 1366 |
stream: bool = True,
|
| 1367 |
) -> None:
|
|
@@ -1373,7 +1374,7 @@ async def submission_loop(
|
|
| 1373 |
# Create session with tool router
|
| 1374 |
session = Session(
|
| 1375 |
event_queue, config=config, tool_router=tool_router, hf_token=hf_token,
|
| 1376 |
-
local_mode=local_mode, stream=stream,
|
| 1377 |
)
|
| 1378 |
if session_holder is not None:
|
| 1379 |
session_holder[0] = session
|
|
|
|
| 1362 |
tool_router: ToolRouter | None = None,
|
| 1363 |
session_holder: list | None = None,
|
| 1364 |
hf_token: str | None = None,
|
| 1365 |
+
user_id: str | None = None,
|
| 1366 |
local_mode: bool = False,
|
| 1367 |
stream: bool = True,
|
| 1368 |
) -> None:
|
|
|
|
| 1374 |
# Create session with tool router
|
| 1375 |
session = Session(
|
| 1376 |
event_queue, config=config, tool_router=tool_router, hf_token=hf_token,
|
| 1377 |
+
user_id=user_id, local_mode=local_mode, stream=stream,
|
| 1378 |
)
|
| 1379 |
if session_holder is not None:
|
| 1380 |
session_holder[0] = session
|
agent/main.py
CHANGED
|
@@ -91,6 +91,17 @@ def _get_hf_token() -> str | None:
|
|
| 91 |
return None
|
| 92 |
|
| 93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
async def _prompt_and_save_hf_token(prompt_session: PromptSession) -> str:
|
| 95 |
"""Prompt user for HF token, validate it, save via huggingface_hub.login(). Loops until valid."""
|
| 96 |
from prompt_toolkit.formatted_text import HTML
|
|
@@ -834,12 +845,7 @@ async def main():
|
|
| 834 |
config = load_config(CLI_CONFIG_PATH)
|
| 835 |
|
| 836 |
# Resolve username for banner
|
| 837 |
-
hf_user =
|
| 838 |
-
try:
|
| 839 |
-
from huggingface_hub import HfApi
|
| 840 |
-
hf_user = HfApi(token=hf_token).whoami().get("name")
|
| 841 |
-
except Exception:
|
| 842 |
-
pass
|
| 843 |
|
| 844 |
print_banner(model=config.model_name, hf_user=hf_user)
|
| 845 |
|
|
@@ -871,6 +877,7 @@ async def main():
|
|
| 871 |
tool_router=tool_router,
|
| 872 |
session_holder=session_holder,
|
| 873 |
hf_token=hf_token,
|
|
|
|
| 874 |
local_mode=True,
|
| 875 |
stream=True,
|
| 876 |
)
|
|
@@ -1056,6 +1063,7 @@ async def headless_main(
|
|
| 1056 |
|
| 1057 |
config = load_config(CLI_CONFIG_PATH)
|
| 1058 |
config.yolo_mode = True # Auto-approve everything in headless mode
|
|
|
|
| 1059 |
|
| 1060 |
if model:
|
| 1061 |
config.model_name = model
|
|
@@ -1082,6 +1090,7 @@ async def headless_main(
|
|
| 1082 |
tool_router=tool_router,
|
| 1083 |
session_holder=session_holder,
|
| 1084 |
hf_token=hf_token,
|
|
|
|
| 1085 |
local_mode=True,
|
| 1086 |
stream=stream,
|
| 1087 |
)
|
|
|
|
| 91 |
return None
|
| 92 |
|
| 93 |
|
| 94 |
+
def _get_hf_user(token: str | None) -> str | None:
|
| 95 |
+
"""Resolve the HF username for a token, if available."""
|
| 96 |
+
if not token:
|
| 97 |
+
return None
|
| 98 |
+
try:
|
| 99 |
+
from huggingface_hub import HfApi
|
| 100 |
+
return HfApi(token=token).whoami().get("name")
|
| 101 |
+
except Exception:
|
| 102 |
+
return None
|
| 103 |
+
|
| 104 |
+
|
| 105 |
async def _prompt_and_save_hf_token(prompt_session: PromptSession) -> str:
|
| 106 |
"""Prompt user for HF token, validate it, save via huggingface_hub.login(). Loops until valid."""
|
| 107 |
from prompt_toolkit.formatted_text import HTML
|
|
|
|
| 845 |
config = load_config(CLI_CONFIG_PATH)
|
| 846 |
|
| 847 |
# Resolve username for banner
|
| 848 |
+
hf_user = _get_hf_user(hf_token)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 849 |
|
| 850 |
print_banner(model=config.model_name, hf_user=hf_user)
|
| 851 |
|
|
|
|
| 877 |
tool_router=tool_router,
|
| 878 |
session_holder=session_holder,
|
| 879 |
hf_token=hf_token,
|
| 880 |
+
user_id=hf_user,
|
| 881 |
local_mode=True,
|
| 882 |
stream=True,
|
| 883 |
)
|
|
|
|
| 1063 |
|
| 1064 |
config = load_config(CLI_CONFIG_PATH)
|
| 1065 |
config.yolo_mode = True # Auto-approve everything in headless mode
|
| 1066 |
+
hf_user = _get_hf_user(hf_token)
|
| 1067 |
|
| 1068 |
if model:
|
| 1069 |
config.model_name = model
|
|
|
|
| 1090 |
tool_router=tool_router,
|
| 1091 |
session_holder=session_holder,
|
| 1092 |
hf_token=hf_token,
|
| 1093 |
+
user_id=hf_user,
|
| 1094 |
local_mode=True,
|
| 1095 |
stream=stream,
|
| 1096 |
)
|