Skip to content

Commit 41a98a5

Browse files
authored
Merge pull request #652 from silkenodwell/bug-github-actions-llm-summary
649 - Update Github Action with correct secret name for Slack bot
2 parents a0d06e9 + 3394410 commit 41a98a5

5 files changed

Lines changed: 53 additions & 162 deletions

File tree

.github/workflows/summarise_upcoming_events.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
name: Summarise Upcoming Meetup Events
22

33
on:
4+
pull_request:
5+
types: [opened, synchronize, reopened ]
46
workflow_dispatch:
57
schedule:
68
- cron: '0 7 * * 1' # Monday at 7am GMT
79

810
jobs:
9-
summarise_events_with_llms:
11+
summarise_events_with_llm:
1012
if: github.repository == 'Women-Coding-Community/WomenCodingCommunity.github.io'
1113
runs-on: ubuntu-latest
1214

@@ -35,7 +37,8 @@ jobs:
3537
- name: Run summary script
3638
run: |
3739
cd tools/llm_meetup_summary
38-
python summarise_events_with_llms.py --channel events
40+
if [ -z "$OPENAI_API_KEY" ]; then echo "Error: OPENAI_API_KEY is not set"; exit 1; fi
41+
python llm_event_summary.py --channel events
3942
env:
4043
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
41-
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
44+
SLACK_BOT_WEBHOOK: ${{ secrets.SLACK_BOT_WEBHOOK }}

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ tools/blog_automation/service_account_key.json
1313
tools/blog_automation/venv
1414
.env
1515
tools/llm_meetup_summary/venv
16+
tools/llm_meetup_summary/examples/current_prompt.md
17+
18+
# A .secrets file can be used for locally testing a .GitHub Action
19+
tools/llm_meetup_summary/.secrets
1620

1721
# Claude Code local settings (may contain personal preferences)
1822
.claude/settings.local.json

tools/llm_meetup_summary/examples/current_prompt.md

Lines changed: 0 additions & 118 deletions
This file was deleted.

tools/llm_meetup_summary/summarise_events_with_llms.py renamed to tools/llm_meetup_summary/llm_event_summary.py

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010

1111
dotenv.load_dotenv()
1212

13+
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
14+
if not OPENAI_API_KEY:
15+
raise KeyError("OPENAI_API_KEY is not set in environment variables")
16+
1317
# Get current folder
1418
current_folder = os.path.dirname(os.path.abspath(__file__))
1519

@@ -18,39 +22,10 @@
1822
MODEL = "gpt-4.1-nano"
1923
REQUIRED_EVENT_FIELDS = ['title', 'description', 'date', 'time', 'link']
2024

21-
try:
22-
SLACK_TEST_WEBHOOK= os.getenv('SLACK_BOT_TEST_WEBHOOK')
23-
SLACK_WEBHOOK= os.getenv('SLACK_BOT_WEBHOOK')
24-
except KeyError as e:
25-
raise KeyError(f"Environment variable not set: {e}")
26-
2725
# Setup logging
2826
logging.basicConfig(level=logging.INFO)
2927
logger = logging.getLogger(__name__)
3028

31-
def summarise_events_with_llm(events_file=EVENTS_FILE):
32-
try:
33-
events = _load_events(events_file)
34-
future_events = _filter_future_events(events)
35-
36-
print("Future Events:\n", future_events)
37-
38-
if not future_events:
39-
logger.warning("No future events found")
40-
return "No upcoming events scheduled."
41-
42-
formatted_events = _format_events_as_markdown(future_events)
43-
44-
print("Formatted Events for LLM:\n", formatted_events[:2000])
45-
46-
llm_summary = _get_llm_summary(formatted_events)
47-
except Exception as e:
48-
logger.error(f"Error summarizing events: {e}", exc_info=True)
49-
raise
50-
51-
formatted_summary = _format_for_slack(llm_summary)
52-
return formatted_summary
53-
5429
def _load_events(events_file):
5530
try:
5631
with open(events_file) as f:
@@ -151,7 +126,7 @@ def _get_llm_summary(formatted_events):
151126

152127
response = openai.chat.completions.create(
153128
model=MODEL,
154-
messages=[{"role": "user", "content": prompt}]
129+
messages=[{"role": "user", "content": prompt}],
155130
)
156131

157132
summary = response.choices[0].message.content
@@ -170,15 +145,37 @@ def _format_for_slack(text):
170145
text = re.sub(r'\[([^\]]+)\]\(([^)]+)\)', r'<\2|\1>', text)
171146
return text
172147

173-
def _post_to_slack(message, slack_webhook_url=SLACK_TEST_WEBHOOK):
174-
if not slack_webhook_url:
175-
raise ValueError("SLACK_SUMMARY_WEBHOOK not set in environment variables")
176-
148+
def _post_to_slack(message, slack_webhook_url):
177149
response = requests.post(slack_webhook_url, json={'text': message})
178150
response.raise_for_status()
179151
logger.info("Message posted to Slack successfully")
180152

153+
def load_events_and_summarise(events_file=EVENTS_FILE):
154+
try:
155+
events = _load_events(events_file)
156+
future_events = _filter_future_events(events)
157+
158+
print("Future Events:\n", future_events)
159+
160+
if not future_events:
161+
logger.warning("No future events found")
162+
return "No upcoming events scheduled."
163+
164+
formatted_events = _format_events_as_markdown(future_events)
165+
166+
llm_summary = _get_llm_summary(formatted_events)
167+
except Exception as e:
168+
logger.error(f"Error summarizing events: {e}", exc_info=True)
169+
raise
170+
171+
formatted_summary = _format_for_slack(llm_summary)
172+
return formatted_summary
173+
181174
if __name__ == "__main__":
175+
dotenv.load_dotenv()
176+
177+
print('Enter main function')
178+
182179
parser = argparse.ArgumentParser(description="Summarise upcoming Meetup events and post to Slack.")
183180
parser.add_argument(
184181
"--channel",
@@ -190,15 +187,20 @@ def _post_to_slack(message, slack_webhook_url=SLACK_TEST_WEBHOOK):
190187
args = parser.parse_args()
191188

192189
test_mode_activated = args.channel == "test-meetup-summaries"
193-
190+
194191
if test_mode_activated:
195-
slack_webhook_url = SLACK_TEST_WEBHOOK
192+
logger.info("Running in test mode.")
193+
SLACK_WEBHOOK= os.getenv('SLACK_BOT_TEST_WEBHOOK')
196194
else:
197-
slack_webhook_url = SLACK_WEBHOOK
195+
logger.info("Running in production mode.")
196+
SLACK_WEBHOOK= os.getenv('SLACK_BOT_WEBHOOK')
197+
198+
if SLACK_WEBHOOK is None:
199+
raise KeyError("SLACK_BOT_TEST_WEBHOOK or SLACK_BOT_WEBHOOK must be set in environment variables")
198200

199201
try:
200-
summary = summarise_events_with_llm(args.events_file)
201-
_post_to_slack(summary, slack_webhook_url)
202+
summary = load_events_and_summarise(args.events_file)
203+
_post_to_slack(summary, slack_webhook_url=SLACK_WEBHOOK)
202204
except Exception as e:
203205
logger.error(f"Failed to summarize and post events: {e}", exc_info=True)
204206
raise

tools/llm_meetup_summary/tests/tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from llm_meetup_summary.summarise_events_with_llms import summarize_meetup_events_with_llms
3+
from tools.llm_meetup_summary.llm_event_summary import summarize_meetup_events_with_llms
44

55
import pytest
66
from unittest.mock import patch, mock_open, MagicMock
@@ -11,7 +11,7 @@
1111
# Add parent directory to path for absolute imports
1212
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
1313

14-
from llm_meetup_summary.summarise_events_with_llms import (
14+
from tools.llm_meetup_summary.llm_event_summary import (
1515
_get_llm_summary,
1616
_format_for_slack,
1717
_validate_event,

0 commit comments

Comments
 (0)