Refactor system message handling to use event stream (#7824)

Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <email@cjsmith.io>
This commit is contained in:
Xingyao Wang
2025-04-17 10:30:19 -04:00
committed by GitHub
parent caf34d83bd
commit 93e9db3206
19 changed files with 446 additions and 321 deletions

View File

@@ -134,10 +134,7 @@ async def reset_settings(request: Request) -> JSONResponse:
)
async def check_provider_tokens(request: Request,
settings: POSTSettingsModel) -> str:
async def check_provider_tokens(request: Request, settings: POSTSettingsModel) -> str:
if settings.provider_tokens:
# Remove extraneous token types
provider_types = [provider.value for provider in ProviderType]
@@ -152,17 +149,13 @@ async def check_provider_tokens(request: Request,
SecretStr(token_value)
)
if not confirmed_token_type or confirmed_token_type.value != token_type:
return f"Invalid token. Please make sure it is a valid {token_type} token."
return ""
return f'Invalid token. Please make sure it is a valid {token_type} token.'
return ''
async def store_provider_tokens(request: Request, settings: POSTSettingsModel):
settings_store = await SettingsStoreImpl.get_instance(
config, get_user_id(request)
)
settings_store = await SettingsStoreImpl.get_instance(config, get_user_id(request))
existing_settings = await settings_store.load()
if existing_settings:
if settings.provider_tokens:
@@ -188,19 +181,17 @@ async def store_provider_tokens(request: Request, settings: POSTSettingsModel):
else: # nothing passed in means keep current settings
provider_tokens = existing_settings.secrets_store.provider_tokens
settings.provider_tokens = {
provider.value: data.token.get_secret_value()
if data.token
else None
provider.value: data.token.get_secret_value() if data.token else None
for provider, data in provider_tokens.items()
}
return settings
async def store_llm_settings(request: Request, settings: POSTSettingsModel) -> POSTSettingsModel:
settings_store = await SettingsStoreImpl.get_instance(
config, get_user_id(request)
)
async def store_llm_settings(
request: Request, settings: POSTSettingsModel
) -> POSTSettingsModel:
settings_store = await SettingsStoreImpl.get_instance(config, get_user_id(request))
existing_settings = await settings_store.load()
# Convert to Settings model and merge with existing settings
@@ -215,6 +206,7 @@ async def store_llm_settings(request: Request, settings: POSTSettingsModel) -> P
return settings
@app.post('/settings', response_model=dict[str, str])
async def store_settings(
request: Request,
@@ -225,11 +217,8 @@ async def store_settings(
if provider_err_msg:
return JSONResponse(
status_code=status.HTTP_401_UNAUTHORIZED,
content={
'error': provider_err_msg
},
content={'error': provider_err_msg},
)
try:
settings_store = await SettingsStoreImpl.get_instance(
@@ -248,7 +237,6 @@ async def store_settings(
)
settings = await store_provider_tokens(request, settings)
# Update sandbox config with new settings
if settings.remote_runtime_resource_factor is not None: