| 324 | return self.repo.git_dir |
| 325 | |
| 326 | def get_commit_message(self, diffs, context, user_language=None): |
| 327 | diffs = "# Diffs:\n" + diffs |
| 328 | |
| 329 | content = "" |
| 330 | if context: |
| 331 | content += context + "\n" |
| 332 | content += diffs |
| 333 | |
| 334 | system_content = self.commit_prompt or prompts.commit_system |
| 335 | |
| 336 | language_instruction = "" |
| 337 | if user_language: |
| 338 | language_instruction = f"\n- Is written in {user_language}." |
| 339 | system_content = system_content.format(language_instruction=language_instruction) |
| 340 | |
| 341 | commit_message = None |
| 342 | for model in self.models: |
| 343 | spinner_text = f"Generating commit message with {model.name}" |
| 344 | with WaitingSpinner(spinner_text): |
| 345 | if model.system_prompt_prefix: |
| 346 | current_system_content = model.system_prompt_prefix + "\n" + system_content |
| 347 | else: |
| 348 | current_system_content = system_content |
| 349 | |
| 350 | messages = [ |
| 351 | dict(role="system", content=current_system_content), |
| 352 | dict(role="user", content=content), |
| 353 | ] |
| 354 | |
| 355 | num_tokens = model.token_count(messages) |
| 356 | max_tokens = model.info.get("max_input_tokens") or 0 |
| 357 | |
| 358 | if max_tokens and num_tokens > max_tokens: |
| 359 | continue |
| 360 | |
| 361 | commit_message = model.simple_send_with_retries(messages) |
| 362 | if commit_message: |
| 363 | break # Found a model that could generate the message |
| 364 | |
| 365 | if not commit_message: |
| 366 | self.io.tool_error("Failed to generate commit message!") |
| 367 | return |
| 368 | |
| 369 | commit_message = commit_message.strip() |
| 370 | if commit_message and commit_message[0] == '"' and commit_message[-1] == '"': |
| 371 | commit_message = commit_message[1:-1].strip() |
| 372 | |
| 373 | return commit_message |
| 374 | |
| 375 | def get_diffs(self, fnames=None): |
| 376 | # We always want diffs of index and working dir |