ultralytics-actions 0.0.97__tar.gz → 0.0.99__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {ultralytics_actions-0.0.97/ultralytics_actions.egg-info → ultralytics_actions-0.0.99}/PKG-INFO +1 -1
  2. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/__init__.py +1 -1
  3. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/utils/openai_utils.py +18 -14
  4. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_openai_utils.py +19 -5
  5. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99/ultralytics_actions.egg-info}/PKG-INFO +1 -1
  6. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/LICENSE +0 -0
  7. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/README.md +0 -0
  8. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/dispatch_actions.py +0 -0
  9. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/first_interaction.py +0 -0
  10. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/summarize_pr.py +0 -0
  11. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/summarize_release.py +0 -0
  12. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/update_file_headers.py +0 -0
  13. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/update_markdown_code_blocks.py +0 -0
  14. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/utils/__init__.py +0 -0
  15. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/utils/common_utils.py +0 -0
  16. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/utils/github_utils.py +0 -0
  17. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/actions/utils/version_utils.py +0 -0
  18. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/pyproject.toml +0 -0
  19. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/setup.cfg +0 -0
  20. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_cli_commands.py +0 -0
  21. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_common_utils.py +0 -0
  22. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_dispatch_actions.py +0 -0
  23. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_file_headers.py +0 -0
  24. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_first_interaction.py +0 -0
  25. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_github_utils.py +0 -0
  26. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_init.py +0 -0
  27. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_summarize_pr.py +0 -0
  28. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_summarize_release.py +0 -0
  29. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_update_markdown_codeblocks.py +0 -0
  30. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/tests/test_urls.py +0 -0
  31. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/ultralytics_actions.egg-info/SOURCES.txt +0 -0
  32. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/ultralytics_actions.egg-info/dependency_links.txt +0 -0
  33. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/ultralytics_actions.egg-info/entry_points.txt +0 -0
  34. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/ultralytics_actions.egg-info/requires.txt +0 -0
  35. {ultralytics_actions-0.0.97 → ultralytics_actions-0.0.99}/ultralytics_actions.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics-actions
3
- Version: 0.0.97
3
+ Version: 0.0.99
4
4
  Summary: Ultralytics Actions for GitHub automation and PR management.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -22,4 +22,4 @@
22
22
  # ├── test_summarize_pr.py
23
23
  # └── ...
24
24
 
25
- __version__ = "0.0.97"
25
+ __version__ = "0.0.99"
@@ -3,14 +3,13 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import os
6
- import time
7
6
 
8
7
  import requests
9
8
 
10
9
  from actions.utils.common_utils import check_links_in_string
11
10
 
12
11
  OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
13
- OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-5-2025-08-07")
12
+ OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-5-codex")
14
13
  SYSTEM_PROMPT_ADDITION = """Guidance:
15
14
  - Ultralytics Branding: Use YOLO11, YOLO26, etc., not YOLOv11, YOLOv26 (only older versions like YOLOv10 have a v). Always capitalize "HUB" in "Ultralytics HUB"; use "Ultralytics HUB", not "The Ultralytics HUB".
16
15
  - Avoid Equations: Do not include equations or mathematical notations.
@@ -41,9 +40,9 @@ def get_completion(
41
40
  temperature: float = 1.0, # note GPT-5 requires temperature=1.0
42
41
  reasoning_effort: str = None, # reasoning effort for GPT-5 models: minimal, low, medium, high
43
42
  ) -> str:
44
- """Generates a completion using OpenAI's API based on input messages."""
43
+ """Generates a completion using OpenAI's Responses API based on input messages."""
45
44
  assert OPENAI_API_KEY, "OpenAI API key is required."
46
- url = "https://api.openai.com/v1/chat/completions"
45
+ url = "https://api.openai.com/v1/responses"
47
46
  headers = {"Authorization": f"Bearer {OPENAI_API_KEY}", "Content-Type": "application/json"}
48
47
  if messages and messages[0].get("role") == "system":
49
48
  messages[0]["content"] += "\n\n" + SYSTEM_PROMPT_ADDITION
@@ -51,20 +50,25 @@ def get_completion(
51
50
  content = ""
52
51
  max_retries = 2
53
52
  for attempt in range(max_retries + 2): # attempt = [0, 1, 2, 3], 2 random retries before asking for no links
54
- data = {
55
- "model": OPENAI_MODEL,
56
- "messages": messages,
57
- "seed": int(time.time() * 1000),
58
- "temperature": temperature,
59
- }
60
-
61
- # Add reasoning_effort for GPT-5 models
53
+ data = {"model": OPENAI_MODEL, "input": messages, "store": False, "temperature": temperature}
54
+
55
+ # Add reasoning for GPT-5 models
62
56
  if "gpt-5" in OPENAI_MODEL:
63
- data["reasoning_effort"] = reasoning_effort or "low" # Default to low for GPT-5
57
+ data["reasoning"] = {"effort": reasoning_effort or "low"} # Default to low for GPT-5
64
58
 
65
59
  r = requests.post(url, json=data, headers=headers)
66
60
  r.raise_for_status()
67
- content = r.json()["choices"][0]["message"]["content"].strip()
61
+ response_data = r.json()
62
+
63
+ # Extract text from output array
64
+ content = ""
65
+ for item in response_data.get("output", []):
66
+ if item.get("type") == "message":
67
+ for content_item in item.get("content", []):
68
+ if content_item.get("type") == "output_text":
69
+ content += content_item.get("text", "")
70
+
71
+ content = content.strip()
68
72
  content = remove_outer_codeblocks(content)
69
73
  for x in remove:
70
74
  content = content.replace(x, "")
@@ -24,11 +24,18 @@ def test_remove_outer_codeblocks():
24
24
 
25
25
  @patch("requests.post")
26
26
  def test_get_completion(mock_post):
27
- """Test OpenAI API completion function with mocked response."""
28
- # Setup mock response
27
+ """Test OpenAI Responses API completion function with mocked response."""
28
+ # Setup mock response with Responses API structure
29
29
  mock_response = MagicMock()
30
30
  mock_response.status_code = 200
31
- mock_response.json.return_value = {"choices": [{"message": {"content": "Test response from OpenAI"}}]}
31
+ mock_response.json.return_value = {
32
+ "output": [
33
+ {
34
+ "type": "message",
35
+ "content": [{"type": "output_text", "text": "Test response from OpenAI"}],
36
+ }
37
+ ]
38
+ }
32
39
  mock_post.return_value = mock_response
33
40
 
34
41
  # Test with basic messages
@@ -47,10 +54,17 @@ def test_get_completion(mock_post):
47
54
  @patch("actions.utils.openai_utils.check_links_in_string")
48
55
  def test_get_completion_with_link_check(mock_check_links, mock_post):
49
56
  """Test get_completion with link checking."""
50
- # Setup mocks
57
+ # Setup mocks with Responses API structure
51
58
  mock_response = MagicMock()
52
59
  mock_response.status_code = 200
53
- mock_response.json.return_value = {"choices": [{"message": {"content": "Response with https://example.com link"}}]}
60
+ mock_response.json.return_value = {
61
+ "output": [
62
+ {
63
+ "type": "message",
64
+ "content": [{"type": "output_text", "text": "Response with https://example.com link"}],
65
+ }
66
+ ]
67
+ }
54
68
  mock_post.return_value = mock_response
55
69
  mock_check_links.return_value = True
56
70
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics-actions
3
- Version: 0.0.97
3
+ Version: 0.0.99
4
4
  Summary: Ultralytics Actions for GitHub automation and PR management.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>