testthread 0.1.0__tar.gz → 0.3.0__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.
@@ -0,0 +1,15 @@
1
+ Apache License 2.0
2
+
3
+ Copyright 2026 Eugene Dayne Mawuli
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testthread
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: pytest for AI agents
5
5
  Home-page: https://github.com/eugene001dayne/test-thread
6
6
  Author: Eugene Dayne Mawuli
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Requires-Python: >=3.7
12
12
  Description-Content-Type: text/markdown
13
+ License-File: LICENSE
13
14
  Requires-Dist: requests
14
15
  Dynamic: author
15
16
  Dynamic: classifier
@@ -17,6 +18,7 @@ Dynamic: description
17
18
  Dynamic: description-content-type
18
19
  Dynamic: home-page
19
20
  Dynamic: license
21
+ Dynamic: license-file
20
22
  Dynamic: requires-dist
21
23
  Dynamic: requires-python
22
24
  Dynamic: summary
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="testthread",
5
- version="0.1.0",
5
+ version="0.3.0",
6
6
  packages=find_packages(),
7
7
  install_requires=["requests"],
8
8
  author="Eugene Dayne Mawuli",
@@ -1,14 +1,16 @@
1
1
  import requests
2
2
 
3
3
  class TestThread:
4
- def __init__(self, base_url="https://test-thread-production.up.railway.app"):
4
+ def __init__(self, base_url="https://test-thread-production.up.railway.app", gemini_key=None):
5
5
  self.base = base_url.rstrip("/")
6
+ self.gemini_key = gemini_key
6
7
 
7
- def create_suite(self, name, agent_endpoint, description=None):
8
+ def create_suite(self, name, agent_endpoint, description=None, webhook_url=None):
8
9
  res = requests.post(f"{self.base}/suites", json={
9
10
  "name": name,
10
11
  "description": description,
11
- "agent_endpoint": agent_endpoint
12
+ "agent_endpoint": agent_endpoint,
13
+ "webhook_url": webhook_url
12
14
  })
13
15
  return res.json()
14
16
 
@@ -23,7 +25,19 @@ class TestThread:
23
25
  return res.json()
24
26
 
25
27
  def run_suite(self, suite_id):
26
- res = requests.post(f"{self.base}/suites/{suite_id}/run")
28
+ params = {}
29
+ if self.gemini_key:
30
+ params["gemini_key"] = self.gemini_key
31
+ res = requests.post(f"{self.base}/suites/{suite_id}/run", params=params)
32
+ return res.json()
33
+
34
+ def diagnose(self, input, expected_output, actual_output):
35
+ res = requests.post(f"{self.base}/diagnose", json={
36
+ "input": input,
37
+ "expected_output": expected_output,
38
+ "actual_output": actual_output,
39
+ "api_key": self.gemini_key
40
+ })
27
41
  return res.json()
28
42
 
29
43
  def get_run(self, run_id):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testthread
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: pytest for AI agents
5
5
  Home-page: https://github.com/eugene001dayne/test-thread
6
6
  Author: Eugene Dayne Mawuli
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Requires-Python: >=3.7
12
12
  Description-Content-Type: text/markdown
13
+ License-File: LICENSE
13
14
  Requires-Dist: requests
14
15
  Dynamic: author
15
16
  Dynamic: classifier
@@ -17,6 +18,7 @@ Dynamic: description
17
18
  Dynamic: description-content-type
18
19
  Dynamic: home-page
19
20
  Dynamic: license
21
+ Dynamic: license-file
20
22
  Dynamic: requires-dist
21
23
  Dynamic: requires-python
22
24
  Dynamic: summary
@@ -1,3 +1,4 @@
1
+ LICENSE
1
2
  README.md
2
3
  setup.py
3
4
  testthread/__init__.py
File without changes
File without changes