Tuesday, March 3, 2026

 This is a continuation of the previous article1.

Supporting code snippets:

1. Fetch_issues.py:

import requests, os, json

from datetime import datetime, timedelta

repo = os.environ["GITHUB_REPOSITORY"]

token = os.environ["GH_TOKEN"]

since = (datetime.utcnow() - timedelta(days=30)).isoformat()

url = f"https://api.github.com/repos/{repo}/issues?state=all&since={since}"

headers = {"Authorization": f"token {token}"}

issues = requests.get(url, headers=headers).json()

print(json.dumps(issues, indent=2))

2. embed_and_cluster.py:

import json, os

import numpy as np

from sklearn.cluster import KMeans

from openai import AzureOpenAI

client = AzureOpenAI(

    api_key=os.environ["AZURE_OPENAI_API_KEY"],

    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],

    api_version="2024-02-15-preview"

)

issues = json.load(open("issues.json"))

texts = [i["title"] + "\n" + i.get("body", "") for i in issues]

embeddings = []

for t in texts:

    e = client.embeddings.create(

        model="text-embedding-3-large",

        input=t

    ).data[0].embedding

    embeddings.append(e)

X = np.array(embeddings)

kmeans = KMeans(n_clusters=5, random_state=42).fit(X)

labels = kmeans.labels_

clusters = {}

for label, issue in zip(labels, issues):

    clusters.setdefault(int(label), []).append(issue)

print(json.dumps(clusters, indent=2))

3. generate_report.py:

import json, os

from openai import AzureOpenAI

client = AzureOpenAI(

    api_key=os.environ["AZURE_OPENAI_API_KEY"],

    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],

    api_version="2024-02-15-preview"

)

clusters = json.load(open("clusters.json"))

prompt = f"""

You are an expert Terraform and Databricks architect.

Generate a monthly insights report with:

- Executive summary

- Top recurring problems

- Modules with the most issues

- Common root causes

- Suggested improvements to Terraform modules

- Hotspots in Databricks workspace deployments

- Action plan for next month

Data:

{json.dumps(clusters)}

"""

resp = client.chat.completions.create(

    model="gpt-4o-mini",

    messages=[{"role": "user", "content": prompt}],

    max_tokens=2000,

    temperature=0.2

)

print(resp.choices[0].message.content)


No comments:

Post a Comment