Skip to content

Commit 8c9ac8c

Browse files
committed
debug logging
1 parent 0e2ddca commit 8c9ac8c

3 files changed

Lines changed: 194 additions & 22 deletions

File tree

src/blueprint/ai_service.py

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""AI Service module for interacting with different LLM providers."""
22

33
from typing import Optional
4-
4+
import logging
55
import requests
66

77
JAN_BASE_URL = "http://localhost:1337/v1/chat/completions"
@@ -11,15 +11,20 @@
1111
class AIService:
1212
"""Service for interacting with different AI providers."""
1313

14-
def __init__(self, service_type: str, model: Optional[str] = None):
14+
def __init__(
15+
self, service_type: str, model: Optional[str] = None, debug: bool = False
16+
):
1517
"""Initialize AI service.
1618
1719
Args:
1820
service_type: Type of AI service ('ollama' or 'jan')
1921
model: Model name to use
22+
debug: Whether to enable debug logging
2023
"""
2124
self.service_type = service_type
2225
self.model = model
26+
self.debug = debug
27+
self.logger = logging.getLogger(__name__)
2328

2429
# Set up base URLs for services
2530
self.base_urls = {
@@ -28,8 +33,13 @@ def __init__(self, service_type: str, model: Optional[str] = None):
2833
}
2934

3035
if service_type not in self.base_urls:
36+
self.logger.error(f"Unsupported service type: {service_type}")
3137
raise ValueError(f"Unsupported service type: {service_type}")
3238

39+
self.logger.debug(
40+
f"Initialized AIService with {service_type} and model {model}"
41+
)
42+
3343
def query(self, prompt: str) -> str:
3444
"""Query the AI service with the given prompt.
3545
@@ -47,6 +57,7 @@ def query(self, prompt: str) -> str:
4757
elif self.service_type == "jan":
4858
return self._query_jan(prompt)
4959
else:
60+
self.logger.error(f"Unsupported service type: {self.service_type}")
5061
raise ValueError(f"Unsupported service type: {self.service_type}")
5162

5263
def _query_ollama(self, prompt: str) -> str:
@@ -61,11 +72,31 @@ def _query_ollama(self, prompt: str) -> str:
6172
url = self.base_urls["ollama"]
6273
data = {"model": self.model, "prompt": prompt, "stream": False}
6374

75+
self.logger.debug(f"Sending request to Ollama API at {url}")
76+
if self.debug:
77+
self.logger.debug(f"Request data: {data}")
78+
6479
try:
80+
self.logger.debug("Making POST request to Ollama API")
6581
response = requests.post(url, json=data)
82+
self.logger.debug(
83+
f"Received response with status code: {response.status_code}"
84+
)
85+
86+
if self.debug:
87+
self.logger.debug(f"Response headers: {response.headers}")
88+
6689
response.raise_for_status()
67-
return response.json().get("response", "")
90+
result = response.json()
91+
92+
if not result.get("response"):
93+
self.logger.error(f"Unexpected response format from Ollama: {result}")
94+
if self.debug:
95+
self.logger.debug(f"Full response: {result}")
96+
97+
return result.get("response", "")
6898
except Exception as e:
99+
self.logger.error(f"Error querying Ollama API: {e}")
69100
raise Exception(f"Error querying Ollama API: {e}")
70101

71102
def _query_jan(self, prompt: str) -> str:
@@ -88,9 +119,31 @@ def _query_jan(self, prompt: str) -> str:
88119
"temperature": 0.7,
89120
}
90121

122+
self.logger.debug(f"Sending request to Jan AI API at {url}")
123+
if self.debug:
124+
self.logger.debug(f"Request data: {data}")
125+
91126
try:
127+
self.logger.debug("Making POST request to Jan AI API")
92128
response = requests.post(url, headers=headers, json=data)
129+
self.logger.debug(
130+
f"Received response with status code: {response.status_code}"
131+
)
132+
133+
if self.debug:
134+
self.logger.debug(f"Response headers: {response.headers}")
135+
93136
response.raise_for_status()
94-
return response.json()["choices"][0]["message"]["content"]
137+
result = response.json()
138+
139+
if not result.get("choices") or not result["choices"][0].get("message"):
140+
self.logger.error(f"Unexpected response format from Jan AI: {result}")
141+
if self.debug:
142+
self.logger.debug(f"Full response: {result}")
143+
return ""
144+
145+
content = result["choices"][0]["message"]["content"]
146+
return content
95147
except Exception as e:
148+
self.logger.error(f"Error querying Jan AI API: {e}")
96149
raise Exception(f"Error querying Jan AI API: {e}")

src/blueprint/cli.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os
55
import sys
66
import time
7+
import logging
78

89
from blueprint.commit_generator import (
910
get_git_diff,
@@ -16,6 +17,16 @@
1617
DEFAULT_JAN_MODEL = "llama3.1-8b-instruct"
1718

1819

20+
def setup_logging(debug_mode):
21+
"""Set up logging based on debug mode."""
22+
log_level = logging.DEBUG if debug_mode else logging.INFO
23+
logging.basicConfig(
24+
level=log_level,
25+
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
26+
datefmt="%Y-%m-%d %H:%M:%S",
27+
)
28+
29+
1930
def main():
2031
"""Main entry point for the CLI application."""
2132
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", DEFAULT_OLLAMA_MODEL)
@@ -44,25 +55,35 @@ def main():
4455
default=75,
4556
help="Suggested maximum number of characters for each commit message (default: 75)",
4657
)
58+
parser.add_argument("--debug", action="store_true", help="Enable debug logging")
4759
args = parser.parse_args()
4860

61+
# Set up logging
62+
setup_logging(args.debug)
63+
logger = logging.getLogger(__name__)
64+
logger.debug("Debug mode enabled")
65+
4966
# Start timing
5067
start_time = time.time()
5168

5269
# Get git diff
53-
diff = get_git_diff()
70+
logger.debug("Getting git diff")
71+
diff = get_git_diff(debug=args.debug)
5472
if not diff:
73+
logger.error("No changes to commit")
5574
print("No changes to commit.")
5675
sys.exit(0)
5776

5877
# Generate commit messages
5978
service_type = "ollama" if args.ollama else "jan"
79+
logger.debug(f"Generating commit messages using {service_type}")
6080
commit_messages = generate_commit_messages(
6181
diff=diff,
6282
max_chars=args.max_chars,
6383
service_type=service_type,
6484
ollama_model=OLLAMA_MODEL,
6585
jan_model=JAN_MODEL,
86+
debug=args.debug,
6687
)
6788

6889
# Stop timing for initial generation
@@ -80,25 +101,28 @@ def main():
80101

81102
# Check if we have messages
82103
if not commit_messages:
104+
logger.error("Could not generate commit messages")
83105
print("Error: Could not generate commit messages.")
84106
sys.exit(1)
85107

86108
# Select message or regenerate
87109
while True:
88110
selected_message = select_message_with_fzf(
89-
commit_messages, use_vim=args.vim, use_num=args.num
111+
commit_messages, use_vim=args.vim, use_num=args.num, debug=args.debug
90112
)
91113

92114
if selected_message == "regenerate":
93115
# Time regeneration
94116
start_time = time.time()
117+
logger.debug("Regenerating commit messages")
95118

96119
commit_messages = generate_commit_messages(
97120
diff=diff,
98121
max_chars=args.max_chars,
99122
service_type=service_type,
100123
ollama_model=OLLAMA_MODEL,
101124
jan_model=JAN_MODEL,
125+
debug=args.debug,
102126
)
103127

104128
end_time = time.time()
@@ -111,12 +135,15 @@ def main():
111135
print("") # Add a blank line for better readability
112136

113137
if not commit_messages:
138+
logger.error("Could not regenerate commit messages")
114139
print("Error: Could not generate commit messages.")
115140
sys.exit(1)
116141
elif selected_message:
117-
create_commit(selected_message)
142+
logger.debug(f"Creating commit with message: {selected_message}")
143+
create_commit(selected_message, debug=args.debug)
118144
break
119145
else:
146+
logger.debug("Commit messages rejected")
120147
print("Commit messages rejected. Please create commit message manually.")
121148
break
122149

0 commit comments

Comments
 (0)