Skip to content

Commit a0ff82f

Browse files
fix: clear cache before checking the api key to pick the latest one, and enable codeflash debug messages in lsp
1 parent 38e4e02 commit a0ff82f

File tree

3 files changed

+28
-18
lines changed

3 files changed

+28
-18
lines changed

codeflash/code_utils/shell_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def get_shell_rc_path() -> Path:
4242

4343

4444
def get_api_key_export_line(api_key: str) -> str:
45-
return f"{SHELL_RC_EXPORT_PREFIX}{api_key}"
45+
return f'{SHELL_RC_EXPORT_PREFIX}"{api_key}"'
4646

4747

4848
def save_api_key_to_rc(api_key: str) -> Result[str, str]:

codeflash/lsp/beta.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from pygls import uris
1010

11-
from codeflash.api.cfapi import get_user_id
11+
from codeflash.api.cfapi import get_codeflash_api_key, get_user_id
1212
from codeflash.code_utils.shell_utils import save_api_key_to_rc
1313
from codeflash.either import is_successful
1414
from codeflash.lsp.server import CodeflashLanguageServer, CodeflashLanguageServerProtocol
@@ -125,17 +125,21 @@ def discover_function_tests(server: CodeflashLanguageServer, params: FunctionOpt
125125
return {"functionName": params.functionName, "status": "success", "discovered_tests": num_discovered_tests}
126126

127127

128-
@server.feature("apiKeyExistsAndValid")
129-
def check_api_key(_server: CodeflashLanguageServer, _params: any) -> dict[str, str]:
130-
try:
131-
user_id = get_user_id()
132-
if user_id is None:
133-
return {"status": "error", "message": "api key not found or invalid"}
128+
def _initialize_optimizer_if_valid(server: CodeflashLanguageServer) -> dict[str, str]:
129+
user_id = get_user_id()
130+
if user_id is None:
131+
return {"status": "error", "message": "api key not found or invalid"}
132+
133+
from codeflash.optimization.optimizer import Optimizer
134+
135+
server.optimizer = Optimizer(server.args)
136+
return {"status": "success", "user_id": user_id}
134137

135-
from codeflash.optimization.optimizer import Optimizer
136138

137-
server.optimizer = Optimizer(server.args)
138-
return {"status": "success", "user_id": user_id} # noqa
139+
@server.feature("apiKeyExistsAndValid")
140+
def check_api_key(server: CodeflashLanguageServer, _params: any) -> dict[str, str]:
141+
try:
142+
return _initialize_optimizer_if_valid(server)
139143
except Exception:
140144
return {"status": "error", "message": "something went wrong while validating the api key"}
141145

@@ -144,17 +148,22 @@ def check_api_key(_server: CodeflashLanguageServer, _params: any) -> dict[str, s
144148
def provide_api_key(server: CodeflashLanguageServer, params: ProvideApiKeyParams) -> dict[str, str]:
145149
try:
146150
api_key = params.api_key
151+
if not api_key.startswith("cf-"):
152+
return {"status": "error", "message": "Api key is not valid"}
153+
147154
result = save_api_key_to_rc(api_key)
148155
if not is_successful(result):
149156
return {"status": "error", "message": result.failure()}
150-
user_id = get_user_id()
151-
if user_id is None:
152-
return {"status": "error", "message": "api key is not valid"}
153157

154-
from codeflash.optimization.optimizer import Optimizer
158+
# clear cache to ensure the new api key is used
159+
get_codeflash_api_key.cache_clear()
160+
get_user_id.cache_clear()
161+
162+
init_result = _initialize_optimizer_if_valid(server)
163+
if init_result["status"] == "error":
164+
return {"status": "error", "message": "Api key is not valid"}
155165

156-
server.optimizer = Optimizer(server.args)
157-
return {"status": "success", "message": "Api key saved successfully", "user_id": user_id} # noqa: TRY300
166+
return {"status": "success", "message": "Api key saved successfully", "user_id": init_result["user_id"]}
158167
except Exception:
159168
return {"status": "error", "message": "something went wrong while saving the api key"}
160169

codeflash/lsp/server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def prepare_optimizer_arguments(self, config_file: Path) -> None:
5555
args.no_pr = True # LSP server should not create PRs
5656
args = process_pyproject_config(args)
5757
self.args = args
58-
# self.optimizer = Optimizer(args) # avoid creating the optimizer during initialization, bacause it may cause and erro if the api key is invalid
58+
# avoid initializing the optimizer during initialization, because it can cause an error if the api key is invalid
5959

6060
def show_message_log(self, message: str, message_type: str) -> None:
6161
"""Send a log message to the client's output channel.
@@ -71,6 +71,7 @@ def show_message_log(self, message: str, message_type: str) -> None:
7171
"Warning": MessageType.Warning,
7272
"Error": MessageType.Error,
7373
"Log": MessageType.Log,
74+
"Debug": MessageType.Debug,
7475
}
7576

7677
lsp_message_type = type_mapping.get(message_type, MessageType.Info)

0 commit comments

Comments
 (0)