ultralytics-actions 0.0.40__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- actions/__init__.py +25 -0
- actions/first_interaction.py +403 -0
- actions/summarize_pr.py +244 -0
- actions/summarize_release.py +194 -0
- actions/update_markdown_code_blocks.py +173 -0
- actions/utils/__init__.py +19 -0
- actions/utils/common_utils.py +111 -0
- actions/utils/github_utils.py +163 -0
- actions/utils/openai_utils.py +45 -0
- ultralytics_actions-0.0.40.dist-info/LICENSE +661 -0
- ultralytics_actions-0.0.40.dist-info/METADATA +144 -0
- ultralytics_actions-0.0.40.dist-info/RECORD +15 -0
- ultralytics_actions-0.0.40.dist-info/WHEEL +5 -0
- ultralytics_actions-0.0.40.dist-info/entry_points.txt +6 -0
- ultralytics_actions-0.0.40.dist-info/top_level.txt +1 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
# Ultralytics Actions 🚀, AGPL-3.0 license https://ultralytics.com/license
|
2
|
+
|
3
|
+
import os
|
4
|
+
import time
|
5
|
+
from typing import Dict, List
|
6
|
+
|
7
|
+
import requests
|
8
|
+
|
9
|
+
from actions.utils.common_utils import check_links_in_string
|
10
|
+
|
11
|
+
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
12
|
+
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-2024-11-20")
|
13
|
+
|
14
|
+
|
15
|
+
def get_completion(
|
16
|
+
messages: List[Dict[str, str]],
|
17
|
+
check_links: bool = True,
|
18
|
+
remove: List[str] = (" @giscus[bot]",), # strings to remove from response
|
19
|
+
) -> str:
|
20
|
+
"""Generates a completion using OpenAI's API based on input messages."""
|
21
|
+
assert OPENAI_API_KEY, "OpenAI API key is required."
|
22
|
+
url = "https://api.openai.com/v1/chat/completions"
|
23
|
+
headers = {"Authorization": f"Bearer {OPENAI_API_KEY}", "Content-Type": "application/json"}
|
24
|
+
|
25
|
+
content = ""
|
26
|
+
max_retries = 2
|
27
|
+
for attempt in range(max_retries + 2): # attempt = [0, 1, 2, 3], 2 random retries before asking for no links
|
28
|
+
data = {"model": OPENAI_MODEL, "messages": messages, "seed": int(time.time() * 1000)}
|
29
|
+
|
30
|
+
r = requests.post(url, headers=headers, json=data)
|
31
|
+
r.raise_for_status()
|
32
|
+
content = r.json()["choices"][0]["message"]["content"].strip()
|
33
|
+
for x in remove:
|
34
|
+
content = content.replace(x, "")
|
35
|
+
if not check_links or check_links_in_string(content): # if no checks or checks are passing return response
|
36
|
+
return content
|
37
|
+
|
38
|
+
if attempt < max_retries:
|
39
|
+
print(f"Attempt {attempt + 1}: Found bad URLs. Retrying with a new random seed.")
|
40
|
+
else:
|
41
|
+
print("Max retries reached. Updating prompt to exclude links.")
|
42
|
+
messages.append({"role": "user", "content": "Please provide a response without any URLs or links in it."})
|
43
|
+
check_links = False # automatically accept the last message
|
44
|
+
|
45
|
+
return content
|