Skip to content

Commit

Permalink
Better handling
Browse files Browse the repository at this point in the history
  • Loading branch information
amanape committed Feb 19, 2025
1 parent c7cdb71 commit 016976a
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 53 deletions.
10 changes: 1 addition & 9 deletions openhands/server/routes/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,15 +116,7 @@ async def reset_settings(request: Request) -> JSONResponse:
settings_store = await SettingsStoreImpl.get_instance(
config, get_user_id(request)
)
existing_settings = await settings_store.load()

if existing_settings:
await settings_store.store(existing_settings.reset())
else:
return JSONResponse(
status_code=status.HTTP_404_NOT_FOUND,
content={'error': 'Settings not found'},
)
await settings_store.reset()

return JSONResponse(
status_code=status.HTTP_200_OK,
Expand Down
16 changes: 0 additions & 16 deletions openhands/server/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,22 +76,6 @@ def from_config() -> Settings | None:
)
return settings

def reset(self):
settings = Settings(
language='en',
agent='CodeActAgent',
max_iterations=100,
security_analyzer='',
confirmation_mode=False,
llm_model='anthropic/claude-3-5-sonnet-20241022',
llm_api_key=SecretStr(''),
llm_base_url='',
remote_runtime_resource_factor=1,
github_token=self.github_token,
user_consents_to_analytics=self.user_consents_to_analytics,
)
return settings


class POSTSettingsModel(Settings):
"""
Expand Down
20 changes: 20 additions & 0 deletions openhands/storage/settings/file_settings_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import json
from dataclasses import dataclass

from pydantic import SecretStr

from openhands.core.config.app_config import AppConfig
from openhands.server.settings import Settings
from openhands.storage import get_file_store
Expand All @@ -29,6 +31,24 @@ async def store(self, settings: Settings) -> None:
json_str = settings.model_dump_json(context={'expose_secrets': True})
await call_sync_from_async(self.file_store.write, self.path, json_str)

async def reset(self) -> None:
existing_settings = await self.load()
if existing_settings:
reset_settings = Settings(
language='en',
agent='CodeActAgent',
max_iterations=100,
security_analyzer='',
confirmation_mode=False,
llm_model='anthropic/claude-3-5-sonnet-20241022',
llm_api_key=SecretStr(''),
llm_base_url='',
remote_runtime_resource_factor=1,
github_token=existing_settings.github_token,
user_consents_to_analytics=existing_settings.user_consents_to_analytics,
)
await self.store(reset_settings)

@classmethod
async def get_instance(
cls, config: AppConfig, user_id: str | None
Expand Down
4 changes: 4 additions & 0 deletions openhands/storage/settings/settings_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ async def load(self) -> Settings | None:
async def store(self, settings: Settings) -> None:
"""Store session init data"""

@abstractmethod
async def reset(self) -> None:
"""Reset session"""

@classmethod
@abstractmethod
async def get_instance(
Expand Down
28 changes: 0 additions & 28 deletions tests/unit/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,31 +100,3 @@ def test_convert_to_settings():

assert settings.llm_api_key.get_secret_value() == 'test-key'
assert settings.github_token.get_secret_value() == 'test-token'


def test_reset_settings():
settings = Settings(
language='no',
agent='test-agent',
max_iterations=100,
security_analyzer='test-analyzer',
confirmation_mode=True,
llm_model='test-model',
llm_api_key='test-key',
llm_base_url='https://test.example.com',
remote_runtime_resource_factor=2,
github_token='test-token',
)

reset_settings = settings.reset()

assert reset_settings.language == 'en'
assert reset_settings.agent == 'CodeActAgent'
assert reset_settings.max_iterations == 100
assert reset_settings.security_analyzer == ''
assert reset_settings.confirmation_mode is False
assert reset_settings.llm_model == 'anthropic/claude-3-5-sonnet-20241022'
assert reset_settings.llm_api_key.get_secret_value() == ''
assert reset_settings.llm_base_url == ''
assert reset_settings.remote_runtime_resource_factor == 1
assert reset_settings.github_token.get_secret_value() == 'test-token'

0 comments on commit 016976a

Please sign in to comment.