rajrakeshdr commited on
Commit
08f99ec
·
verified ·
1 Parent(s): 7d944a4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -25
app.py CHANGED
@@ -1,6 +1,3 @@
1
-
2
-
3
-
4
  from fastapi import FastAPI, HTTPException
5
  from pydantic import BaseModel
6
  import requests
@@ -17,7 +14,7 @@ logger = logging.getLogger(__name__)
17
  # Load environment variables
18
  load_dotenv()
19
 
20
- # Configuration
21
  GITHUB_TOKEN = "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"
22
  GROQ_API_KEY = "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"
23
  REPOSITORIES = [
@@ -66,18 +63,18 @@ def fetch_repository_changes(repo: str, days_back: int) -> list[str]:
66
  # Fetch commits
67
  commits_url = f"{GITHUB_API_URL}/repos/{repo}/commits"
68
  commits_params = {"since": since_date}
69
- logger.debug(f"Fetching commits from: {commits_url}")
70
  commits_response = requests.get(commits_url, headers=headers, params=commits_params)
71
- commits_response.raise_for_status() # Raise an exception for HTTP errors
72
  commits = commits_response.json()
73
  logger.debug(f"Found {len(commits)} commits for {repo}")
74
 
75
  # Fetch pull requests
76
  prs_url = f"{GITHUB_API_URL}/repos/{repo}/pulls"
77
  prs_params = {"state": "all", "sort": "updated", "direction": "desc"}
78
- logger.debug(f"Fetching pull requests from: {prs_url}")
79
  prs_response = requests.get(prs_url, headers=headers, params=prs_params)
80
- prs_response.raise_for_status() # Raise an exception for HTTP errors
81
  prs = prs_response.json()
82
  logger.debug(f"Found {len(prs)} pull requests for {repo}")
83
 
@@ -86,7 +83,9 @@ def fetch_repository_changes(repo: str, days_back: int) -> list[str]:
86
  for commit in commits:
87
  changes.append(f"Commit: {commit['commit']['message']}")
88
  for pr in prs:
89
- changes.append(f"PR: {pr['title']} - {pr['body']}")
 
 
90
 
91
  logger.debug(f"Total changes for {repo}: {len(changes)}")
92
  return changes
@@ -102,11 +101,14 @@ def summarize_changes_with_deepseek(repo: str, changes: list[str]) -> dict:
102
  try:
103
  logger.debug(f"Summarizing changes for repository: {repo}")
104
  prompt = f"""
105
- The following changes were made to detection rules in the GitHub repository {repo}.
106
- Provide a detailed description of the changes and explain the context of why these changes are required:
107
- {changes}
 
 
 
108
  """
109
- logger.debug(f"Sending prompt to DeepSeek: {prompt}")
110
  response = groq_client.chat.completions.create(
111
  model="deepseek-chat",
112
  messages=[{"role": "user", "content": prompt}],
@@ -114,18 +116,18 @@ def summarize_changes_with_deepseek(repo: str, changes: list[str]) -> dict:
114
  temperature=0.7
115
  )
116
  summary = response.choices[0].message.content
117
- logger.debug(f"Received summary from DeepSeek: {summary}")
118
 
119
- # Extract description and context from the summary
120
- description = summary.split("Description:")[1].split("Context:")[0].strip()
121
- context = summary.split("Context:")[1].strip()
122
- logger.debug(f"Extracted description: {description}")
123
- logger.debug(f"Extracted context: {context}")
 
 
 
124
 
125
- return {
126
- "description": description,
127
- "context": context
128
- }
129
 
130
  except Exception as e:
131
  logger.error(f"Error summarizing changes for {repo}: {e}")
@@ -147,7 +149,7 @@ async def monitor_repositories():
147
  logger.debug(f"Summarizing changes for {repo}")
148
  summary = summarize_changes_with_deepseek(repo, changes)
149
  results.append(RepositoryDetails(
150
- repo_name=f"{repo} (+{len(changes)}, ✎{len(changes)})",
151
  repo_url=f"https://github.com/{repo}",
152
  changes="\n".join(changes),
153
  description=summary["description"],
@@ -168,4 +170,8 @@ async def monitor_repositories():
168
 
169
  except Exception as e:
170
  logger.error(f"Error in monitor_repositories: {e}")
171
- raise HTTPException(status_code=500, detail=str(e))
 
 
 
 
 
 
 
 
1
  from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel
3
  import requests
 
14
  # Load environment variables
15
  load_dotenv()
16
 
17
+ # Configuration (Use environment variables instead of hardcoding)
18
  GITHUB_TOKEN = "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"
19
  GROQ_API_KEY = "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"
20
  REPOSITORIES = [
 
63
  # Fetch commits
64
  commits_url = f"{GITHUB_API_URL}/repos/{repo}/commits"
65
  commits_params = {"since": since_date}
66
+ logger.debug(f"Fetching commits from: {commits_url} with params: {commits_params}")
67
  commits_response = requests.get(commits_url, headers=headers, params=commits_params)
68
+ commits_response.raise_for_status()
69
  commits = commits_response.json()
70
  logger.debug(f"Found {len(commits)} commits for {repo}")
71
 
72
  # Fetch pull requests
73
  prs_url = f"{GITHUB_API_URL}/repos/{repo}/pulls"
74
  prs_params = {"state": "all", "sort": "updated", "direction": "desc"}
75
+ logger.debug(f"Fetching pull requests from: {prs_url} with params: {prs_params}")
76
  prs_response = requests.get(prs_url, headers=headers, params=prs_params)
77
+ prs_response.raise_for_status()
78
  prs = prs_response.json()
79
  logger.debug(f"Found {len(prs)} pull requests for {repo}")
80
 
 
83
  for commit in commits:
84
  changes.append(f"Commit: {commit['commit']['message']}")
85
  for pr in prs:
86
+ updated_at = datetime.strptime(pr["updated_at"], "%Y-%m-%dT%H:%M:%SZ")
87
+ if updated_at >= datetime.now() - timedelta(days=days_back):
88
+ changes.append(f"PR: {pr['title']} - {pr['body'] or 'No description'}")
89
 
90
  logger.debug(f"Total changes for {repo}: {len(changes)}")
91
  return changes
 
101
  try:
102
  logger.debug(f"Summarizing changes for repository: {repo}")
103
  prompt = f"""
104
+ Analyze the following changes made to detection rules in the GitHub repository {repo}:
105
+ {', '.join(changes)}
106
+
107
+ Provide a detailed response with two sections:
108
+ - Description: Summarize what changes were made.
109
+ - Context: Explain why these changes might be required.
110
  """
111
+ logger.debug(f"Sending prompt to DeepSeek: {prompt[:100]}...") # Truncate for brevity in logs
112
  response = groq_client.chat.completions.create(
113
  model="deepseek-chat",
114
  messages=[{"role": "user", "content": prompt}],
 
116
  temperature=0.7
117
  )
118
  summary = response.choices[0].message.content
119
+ logger.debug(f"Received summary from DeepSeek: {summary[:100]}...")
120
 
121
+ # Extract description and context with fallback
122
+ description = "Description not found."
123
+ context = "Context not found."
124
+ if "Description:" in summary and "Context:" in summary:
125
+ description = summary.split("Description:")[1].split("Context:")[0].strip()
126
+ context = summary.split("Context:")[1].strip()
127
+ else:
128
+ description = summary # Fallback to full summary if sections aren't clear
129
 
130
+ return {"description": description, "context": context}
 
 
 
131
 
132
  except Exception as e:
133
  logger.error(f"Error summarizing changes for {repo}: {e}")
 
149
  logger.debug(f"Summarizing changes for {repo}")
150
  summary = summarize_changes_with_deepseek(repo, changes)
151
  results.append(RepositoryDetails(
152
+ repo_name=f"{repo} (+{len(changes)})",
153
  repo_url=f"https://github.com/{repo}",
154
  changes="\n".join(changes),
155
  description=summary["description"],
 
170
 
171
  except Exception as e:
172
  logger.error(f"Error in monitor_repositories: {e}")
173
+ raise HTTPException(status_code=500, detail=str(e))
174
+
175
+ if __name__ == "__main__":
176
+ import uvicorn
177
+ uvicorn.run(app, host="0.0.0.0", port=8000)