cmt-cli 1.0.1__tar.gz → 1.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/PKG-INFO +1 -1
  2. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/pyproject.toml +1 -1
  3. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/ai/openai.py +20 -20
  4. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/ai/prompt.py +1 -11
  5. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/cli.py +1 -1
  6. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/uv.lock +1 -1
  7. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/.github/workflows/test.yml +0 -0
  8. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/.gitignore +0 -0
  9. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/.python-version +0 -0
  10. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/LICENSE +0 -0
  11. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/README.md +0 -0
  12. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/art/cmt-cli.svg +0 -0
  13. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/__init__.py +0 -0
  14. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/ai/__init__.py +0 -0
  15. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/ai/cache.py +0 -0
  16. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/ai/provider.py +0 -0
  17. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/analysis/__init__.py +0 -0
  18. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/analysis/analyzer.py +0 -0
  19. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/core/__init__.py +0 -0
  20. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/core/logging.py +0 -0
  21. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/core/settings.py +0 -0
  22. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/enums/__init__.py +0 -0
  23. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/enums/config.py +0 -0
  24. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/exceptions.py +0 -0
  25. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/git/__init__.py +0 -0
  26. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/git/repository.py +0 -0
  27. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/models/__init__.py +0 -0
  28. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/models/changes.py +0 -0
  29. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/models/suggestion.py +0 -0
  30. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/schemas/__init__.py +0 -0
  31. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/schemas/config.py +0 -0
  32. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/schemas/general.py +0 -0
  33. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/services/__init__.py +0 -0
  34. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/services/pypi.py +0 -0
  35. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/src/cmt/utils.py +0 -0
  36. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/tests/__init__.py +0 -0
  37. {cmt_cli-1.0.1 → cmt_cli-1.0.3}/tests/unit/test_repository.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: cmt-cli
3
- Version: 1.0.1
3
+ Version: 1.0.3
4
4
  Summary: AI-powered Git commit message generator
5
5
  Project-URL: Homepage, https://github.com/bijaydas/cmt
6
6
  Project-URL: Documentation, https://github.com/bijaydas/cmt#readme
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cmt-cli"
3
- version = "1.0.1"
3
+ version = "1.0.3"
4
4
  description = "AI-powered Git commit message generator"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1,14 +1,11 @@
1
1
  import logging
2
- from typing import cast
3
2
 
4
3
  from langchain.agents import create_agent
5
- from langchain.agents.middleware.types import InputAgentState
6
- from langchain_core.messages import BaseMessage, get_buffer_string
7
4
  from langchain_openai import ChatOpenAI
8
5
  from pydantic import SecretStr
9
6
 
10
7
  from cmt.ai.cache import CommitMessageCache
11
- from cmt.ai.prompt import COMMIT_PROMPT, COMMIT_SYSTEM_PROMPT
8
+ from cmt.ai.prompt import COMMIT_PROMPT_TEMPLATE, COMMIT_SYSTEM_PROMPT
12
9
  from cmt.ai.provider import AIProvider
13
10
  from cmt.core.settings import settings
14
11
  from cmt.models.changes import AnalysisResult, StagedChangeSet, StagedFile
@@ -21,20 +18,20 @@ class OpenAIProvider(AIProvider):
21
18
  def __init__(self) -> None:
22
19
  self.config = settings.get()
23
20
 
24
- def _build_prompt(
25
- self, changes: StagedChangeSet, analysis: AnalysisResult
26
- ) -> list[BaseMessage]:
21
+ def _build_prompt(self, changes: StagedChangeSet, analysis: AnalysisResult):
27
22
  staged_files = self._process_files(changes.files)
28
23
  staged_diffs = changes.diff
29
24
 
30
- return COMMIT_PROMPT.format_messages(
31
- total_files=len(changes.files),
32
- added_files=analysis.added_files,
33
- modified_files=analysis.modified_files,
34
- deleted_files=analysis.deleted_files,
35
- renamed_files=analysis.renamed_files,
36
- staged_files=staged_files,
37
- staged_diffs=staged_diffs,
25
+ return COMMIT_PROMPT_TEMPLATE.invoke(
26
+ {
27
+ "total_files": len(changes.files),
28
+ "added_files": analysis.added_files,
29
+ "modified_files": analysis.modified_files,
30
+ "deleted_files": analysis.deleted_files,
31
+ "renamed_files": analysis.renamed_files,
32
+ "staged_files": staged_files,
33
+ "staged_diffs": staged_diffs,
34
+ }
38
35
  )
39
36
 
40
37
  @staticmethod
@@ -45,15 +42,13 @@ class OpenAIProvider(AIProvider):
45
42
 
46
43
  return output.strip()
47
44
 
48
- def _invoke(self, prompt: list[BaseMessage]) -> CommitSuggestion:
45
+ def _invoke(self, prompt) -> CommitSuggestion:
49
46
  model = ChatOpenAI(
50
47
  model=self.config.model,
51
48
  api_key=SecretStr(self.config.api_key),
52
49
  timeout=30,
53
50
  )
54
- logger.info(
55
- "Invoking %s model with prompt:\n%s", self.config.model, get_buffer_string(prompt)
56
- )
51
+ logger.info("Invoking %s model with prompt:\n%s", self.config.model, prompt.to_string())
57
52
 
58
53
  agent = create_agent(
59
54
  model=model,
@@ -61,7 +56,7 @@ class OpenAIProvider(AIProvider):
61
56
  response_format=CommitSuggestion,
62
57
  )
63
58
 
64
- result = agent.invoke(cast(InputAgentState, prompt))
59
+ result = agent.invoke(prompt)
65
60
 
66
61
  return result["structured_response"]
67
62
 
@@ -86,11 +81,16 @@ class OpenAIProvider(AIProvider):
86
81
  return suggestion
87
82
 
88
83
  suggestion = self._invoke(prompt)
84
+
89
85
  logger.info("Generated new commit suggestion.\n%s", suggestion)
90
86
 
91
87
  cache.set(change_set.diff, self.config.model, suggestion)
92
88
  logger.info("Cached new commit suggestion.")
93
89
 
90
+ suggestion = CommitSuggestion(
91
+ message=suggestion.message, description=suggestion.description
92
+ )
93
+
94
94
  return suggestion
95
95
 
96
96
  @staticmethod
@@ -59,14 +59,4 @@ Renamed: {renamed_files}
59
59
  Generate the commit message now.
60
60
  """
61
61
 
62
- COMMIT_PROMPT1 = ChatPromptTemplate.from_messages(
63
- [
64
- ("human", COMMIT_DATA_PROMPT),
65
- ]
66
- )
67
-
68
- COMMIT_PROMPT = ChatPromptTemplate(
69
- [
70
- ("human", COMMIT_DATA_PROMPT),
71
- ]
72
- )
62
+ COMMIT_PROMPT_TEMPLATE = ChatPromptTemplate.from_template(COMMIT_DATA_PROMPT)
@@ -1,5 +1,4 @@
1
1
  import logging
2
- import sys
3
2
  from importlib.metadata import version
4
3
 
5
4
  import typer
@@ -66,6 +65,7 @@ def suggest() -> None:
66
65
  open_ai = OpenAIProvider()
67
66
 
68
67
  commit = open_ai.generate_commit_message(staged_files, analysis_result)
68
+
69
69
  commit_command = OpenAIProvider.commit_command(commit)
70
70
 
71
71
  logger.info("Suggested commit:\n\n%s", commit_command)
@@ -175,7 +175,7 @@ wheels = [
175
175
 
176
176
  [[package]]
177
177
  name = "cmt-cli"
178
- version = "0.2.0"
178
+ version = "1.0.3"
179
179
  source = { editable = "." }
180
180
  dependencies = [
181
181
  { name = "langchain" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes