Class: Aigcm::CommitMessageGenerator
- Inherits:
-
Object
- Object
- Aigcm::CommitMessageGenerator
- Defined in:
- lib/aigcm/commit_message_generator.rb
Defined Under Namespace
Classes: Error
Constant Summary collapse
- MAX_DIFF_SIZE =
Characters
4000
Instance Method Summary collapse
- #generate(style_guide, context = []) ⇒ Object
-
#initialize(model:, provider:, max_tokens:, force_external: false, amend: false) ⇒ CommitMessageGenerator
constructor
A new instance of CommitMessageGenerator.
Constructor Details
#initialize(model:, provider:, max_tokens:, force_external: false, amend: false) ⇒ CommitMessageGenerator
Returns a new instance of CommitMessageGenerator.
12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/aigcm/commit_message_generator.rb', line 12 def initialize(model:, provider:, max_tokens:, force_external: false, amend: false) @model = model @provider = provider @max_tokens = max_tokens @force_external = force_external @amend = amend validate_model_provider_combination check_provider_availability @client = AiClient.new(@model, provider: @provider) rescue StandardError => e raise Error, "Failed to initialize AI client: #{e.}" end |
Instance Method Details
#generate(style_guide, context = []) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/aigcm/commit_message_generator.rb', line 26 def generate(style_guide, context = []) diff = GitDiff.new(dir: Dir.pwd, amend: @amend).generate_diff return "No changes to commit" if diff.strip.empty? check_repository_privacy unless @force_external # Truncate diff if too large if diff.length > MAX_DIFF_SIZE diff = diff[0...MAX_DIFF_SIZE] + "\n...[diff truncated]" end processed_context = process_context(context) prompt = build_prompt(diff, style_guide, processed_context) begin response = @client.chat(prompt) response.to_s.strip rescue StandardError => e "Error generating commit message: #{e.}" end end |