search-swe 0.1.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.
- search_swe-0.1.0/LICENSE +201 -0
- search_swe-0.1.0/MANIFEST.in +3 -0
- search_swe-0.1.0/PKG-INFO +215 -0
- search_swe-0.1.0/README.md +163 -0
- search_swe-0.1.0/docs/cli.md +192 -0
- search_swe-0.1.0/pyproject.toml +37 -0
- search_swe-0.1.0/setup.cfg +4 -0
- search_swe-0.1.0/src/search_swe/__init__.py +3 -0
- search_swe-0.1.0/src/search_swe/__main__.py +3 -0
- search_swe-0.1.0/src/search_swe/cli.py +177 -0
- search_swe-0.1.0/src/search_swe/configuration.py +130 -0
- search_swe-0.1.0/src/search_swe/model_catalog.py +114 -0
- search_swe-0.1.0/src/search_swe/repository.py +141 -0
- search_swe-0.1.0/src/search_swe/resources.py +123 -0
- search_swe-0.1.0/src/search_swe/runner.py +265 -0
- search_swe-0.1.0/src/search_swe/wizard.py +193 -0
- search_swe-0.1.0/src/search_swe.egg-info/PKG-INFO +215 -0
- search_swe-0.1.0/src/search_swe.egg-info/SOURCES.txt +20 -0
- search_swe-0.1.0/src/search_swe.egg-info/dependency_links.txt +1 -0
- search_swe-0.1.0/src/search_swe.egg-info/entry_points.txt +2 -0
- search_swe-0.1.0/src/search_swe.egg-info/requires.txt +7 -0
- search_swe-0.1.0/src/search_swe.egg-info/top_level.txt +1 -0
search_swe-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 VectorSpaceLab
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: search-swe
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Configure and run Search-SWE coding-agent evaluations
|
|
5
|
+
License-Expression: Apache-2.0
|
|
6
|
+
Project-URL: Repository, https://github.com/VectorSpaceLab/Search-SWE
|
|
7
|
+
Project-URL: Homepage, https://search-swe.github.io/
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
12
|
+
Requires-Python: >=3.12
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Requires-Dist: harbor==0.22.0
|
|
16
|
+
Requires-Dist: huggingface_hub<2.0,>=1.0
|
|
17
|
+
Requires-Dist: questionary<3,>=2.1
|
|
18
|
+
Requires-Dist: prompt_toolkit<4,>=3.0.48
|
|
19
|
+
Requires-Dist: python-dotenv<2,>=1.0
|
|
20
|
+
Requires-Dist: psutil<8,>=7
|
|
21
|
+
Requires-Dist: PyYAML<7,>=6
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
# Search-SWE CLI
|
|
25
|
+
|
|
26
|
+
Configure coding-agent evaluations interactively, restore fixed inputs, and run
|
|
27
|
+
one model setting across selected Search-SWE tasks sequentially or concurrently.
|
|
28
|
+
For agent-driven operation, install the [evaluation skill](https://github.com/VectorSpaceLab/Search-SWE/blob/main/docs/agent-evaluations.md)
|
|
29
|
+
and describe the settings and tasks to your agent.
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
The distribution name and command are both `search-swe`. Install from PyPI:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
python -m pip install search-swe
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
For local CLI development, install from the repository root:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python -m pip install -e .
|
|
43
|
+
search-swe --help
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Python 3.12+ is required. Package dependencies are declared in
|
|
47
|
+
`pyproject.toml`, including the pinned Harbor version. Use a virtual
|
|
48
|
+
environment to isolate these dependencies. The wheel contains the CLI; task
|
|
49
|
+
definitions, Docker integration and fixed assets live in a Search-SWE checkout.
|
|
50
|
+
Start the wizard to choose or prepare that checkout:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
search-swe run
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
When no checkout is found, interactive `run` and `configure` offer three choices:
|
|
57
|
+
clone to `~/Search-SWE`, clone to a custom path, or select an existing checkout.
|
|
58
|
+
Git is required for cloning. Accept the clone destination to download the
|
|
59
|
+
repository's latest `main` snapshot with a shallow clone, then continue with model configuration. A valid
|
|
60
|
+
checkout at the chosen path is reused; cloning uses a new or empty directory.
|
|
61
|
+
|
|
62
|
+
The selected path is saved in `$XDG_CONFIG_HOME/search-swe/repository.json`
|
|
63
|
+
(default `~/.config/search-swe/repository.json`) and reused by future commands.
|
|
64
|
+
Repository setup completes before model configuration; task assets and results
|
|
65
|
+
belong to the selected checkout, while the CLI stays in the Python environment.
|
|
66
|
+
|
|
67
|
+
Repository discovery uses `--repo`, then `SEARCH_SWE_REPO`, then the current
|
|
68
|
+
directory and its parents. Editable installations also recognize their source
|
|
69
|
+
checkout, followed by the remembered path. To override discovery, use
|
|
70
|
+
`search-swe --repo /path/to/Search-SWE run`. Scripted commands (`--yes`), dry runs,
|
|
71
|
+
`list` and `doctor` require an existing checkout. With `--offline`, the interactive
|
|
72
|
+
selector offers existing checkouts only.
|
|
73
|
+
|
|
74
|
+
## Interactive setup
|
|
75
|
+
|
|
76
|
+
`search-swe` or `search-swe run` opens the terminal wizard:
|
|
77
|
+
|
|
78
|
+
1. Choose the harness, then a supported provider. Search/select an OpenRouter
|
|
79
|
+
model, enter a direct-endpoint model ID, or select a supported Pi model.
|
|
80
|
+
Then choose its reasoning or thinking level.
|
|
81
|
+
2. Enter the coding-agent API key using hidden input, or retain an existing key.
|
|
82
|
+
3. Filter and select tasks with Space, then press Enter. The menu shows their
|
|
83
|
+
CPU, RAM, GPU and asset requirements.
|
|
84
|
+
4. Configure the selected tasks' required judge credentials. Optional APIs for
|
|
85
|
+
submitted programs have a separate opt-in prompt.
|
|
86
|
+
5. Choose sequential execution or a maximum parallelism, review the setting and
|
|
87
|
+
resource requirements, select an idle GPU pool for GPU tasks, then confirm
|
|
88
|
+
saving and starting.
|
|
89
|
+
|
|
90
|
+
`search-swe configure` uses the same configuration flow without starting an
|
|
91
|
+
evaluation. Model/harness compatibility follows the existing backend: Codex
|
|
92
|
+
supports OpenRouter and direct endpoints; Claude Code supports its direct
|
|
93
|
+
Anthropic API and Anthropic models through OpenRouter; Pi uses the repository's
|
|
94
|
+
DeepSeek/Z.ai direct adapters.
|
|
95
|
+
|
|
96
|
+
The default is Codex + OpenRouter + `openai/gpt-6-luna`, with `max` reasoning.
|
|
97
|
+
Custom models must support the selected harness/API; choosing a model does not
|
|
98
|
+
perform a paid connectivity test. Existing task-specific verifier models and
|
|
99
|
+
network allowlists continue to apply.
|
|
100
|
+
|
|
101
|
+
### OpenRouter model search
|
|
102
|
+
|
|
103
|
+
The model field searches the public OpenRouter directory by name and model ID
|
|
104
|
+
as you type, including multiple keywords. Use ↓/↑ to highlight a result and
|
|
105
|
+
Enter to select its full ID; matching rows show the name and context length.
|
|
106
|
+
Enter on an empty field keeps the displayed current/default model. A complete
|
|
107
|
+
model ID can also be typed manually for newly available or custom models.
|
|
108
|
+
|
|
109
|
+
The directory is fetched once and searched locally; typing does not issue API
|
|
110
|
+
requests. Metadata is cached for 24 hours under
|
|
111
|
+
`$XDG_CACHE_HOME/search-swe/openrouter-models.json` (default
|
|
112
|
+
`~/.cache/search-swe/openrouter-models.json`). Use `search-swe run --refresh-models`
|
|
113
|
+
to refresh it, or `--offline` to use the cache without a catalog request. If the
|
|
114
|
+
directory is unavailable, cached results or manual model input remain usable.
|
|
115
|
+
Catalog requests use the public endpoint and carry no API keys.
|
|
116
|
+
|
|
117
|
+
Suggestions use the selected harness and available text/tool/API metadata;
|
|
118
|
+
Claude Code suggestions are limited to Anthropic models. Metadata filtering
|
|
119
|
+
does not replace an actual harness/model compatibility test. The directory may
|
|
120
|
+
not expose every supported reasoning level. When selecting a new model, the
|
|
121
|
+
wizard starts with **Model/config default**, which omits the explicit effort
|
|
122
|
+
override. Models that list no reasoning support use that setting automatically.
|
|
123
|
+
Other models offer an explicit level selection; choose a level supported by the
|
|
124
|
+
model/provider. The saved model setting is reused on subsequent runs.
|
|
125
|
+
|
|
126
|
+
`--reasoning-effort default` selects the same behavior in scripted runs. This
|
|
127
|
+
uses the model/harness configuration, including any custom Codex configuration;
|
|
128
|
+
it does not mean that reasoning is disabled. Catalog selection and configuration
|
|
129
|
+
do not start paid model requests.
|
|
130
|
+
|
|
131
|
+
## Credentials and configuration
|
|
132
|
+
|
|
133
|
+
Configuration is read from the checkout `.env`, or `--env-file PATH`. Command-line
|
|
134
|
+
and explicit wizard answers take priority over exported variables, then file
|
|
135
|
+
values, then defaults. A saved configuration does not override exported shell
|
|
136
|
+
variables in a later invocation; the wizard identifies conflicting variable names.
|
|
137
|
+
|
|
138
|
+
Keys are hidden during entry and summaries contain no key values. Saving uses an
|
|
139
|
+
atomic replacement with mode `0600`, preserves unrelated dotenv settings/comments,
|
|
140
|
+
and treats values literally. Saved environment files inside the checkout must be
|
|
141
|
+
Git-ignored. Cancelling before the final confirmation leaves the
|
|
142
|
+
file unchanged. Choose not to save to use entered values only for this run.
|
|
143
|
+
|
|
144
|
+
`SEARCH_SWE_AGENT`, `SEARCH_SWE_PROVIDER`, `AGENT_MODEL`,
|
|
145
|
+
`AGENT_REASONING_EFFORT` / `PI_THINKING`, and `SEARCH_SWE_CONCURRENCY` hold the
|
|
146
|
+
selected defaults. Keys retain their existing purpose-specific variable names.
|
|
147
|
+
Reusing the OpenRouter agent key for the trajectory judge requires an explicit
|
|
148
|
+
choice; submitted programs receive only their task-declared credentials.
|
|
149
|
+
|
|
150
|
+
## Scripted runs
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
search-swe run reasoning-query-rewriting --yes
|
|
154
|
+
search-swe run agentic-search agentic-search-vectorless \
|
|
155
|
+
--agent codex --provider openrouter --model openai/gpt-6-luna \
|
|
156
|
+
--reasoning-effort max --concurrency 2 --yes
|
|
157
|
+
search-swe run code-embedding-finetuning --gpu-devices 0 --yes
|
|
158
|
+
search-swe run reasoning-query-rewriting --dry-run
|
|
159
|
+
search-swe list --hardware cpu
|
|
160
|
+
search-swe list --json
|
|
161
|
+
search-swe doctor
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
`--task NAME` may also be repeated. Non-interactive runs use `--yes`; missing keys
|
|
165
|
+
produce a configuration error instead of waiting for input. `--dry-run` previews
|
|
166
|
+
configuration and commands without writing files, downloading assets, allocating
|
|
167
|
+
devices or calling model APIs. `--offline` uses local asset caches; evaluation
|
|
168
|
+
still requires access to the selected model APIs. Asset restoration verifies
|
|
169
|
+
SHA-256 and replaces corrupt manifest-owned files with verified copies.
|
|
170
|
+
|
|
171
|
+
## Parallel execution and results
|
|
172
|
+
|
|
173
|
+
`--concurrency N` limits simultaneous tasks. The scheduler allocates disjoint
|
|
174
|
+
logical CPU sets and one idle physical GPU per GPU task, and admits tasks only
|
|
175
|
+
within the RAM pool. It preserves each task's CPU quota, memory cap, storage and
|
|
176
|
+
scoring rules. Fixed task CPU-set environment variables remain respected.
|
|
177
|
+
Use `--cpu-set 0-31`, `--gpu-devices 0,1`, and `--memory-gb 64` to bound the pool.
|
|
178
|
+
RAM accounting leaves 2 GiB for the host and 512 MiB per running task for trusted
|
|
179
|
+
infrastructure. GPUs with more than 512 MiB used or over 5% utilization are
|
|
180
|
+
considered busy at startup.
|
|
181
|
+
GPU availability is checked again while scheduling, so a GPU taken by another
|
|
182
|
+
process during asset preparation stays out of the next allocation.
|
|
183
|
+
|
|
184
|
+
Allocations coordinate this CLI invocation. They do not reserve the machine
|
|
185
|
+
against other users or independent launchers; select a dedicated resource pool
|
|
186
|
+
on shared hosts. CPU placement can affect timing, so retain allocations when
|
|
187
|
+
reproducing performance measurements.
|
|
188
|
+
|
|
189
|
+
Runs use fresh `jobs/evaluations/<unique-run>/` directories, or a new `--output`
|
|
190
|
+
directory. `run.json` records the model setting, checkout revision/dirty state,
|
|
191
|
+
per-task resource allocation, process status, log and result paths. A `completed`
|
|
192
|
+
status means the launcher exited successfully; inspect Harbor results for task
|
|
193
|
+
scores and verifier health. Asset logs and evaluation logs are under `logs/`.
|
|
194
|
+
|
|
195
|
+
Ctrl-C / SIGTERM stops launching new tasks, forwards cancellation to running
|
|
196
|
+
launchers and allows teardown before releasing managed storage. Retained Docker
|
|
197
|
+
containers prevent storage unmounting and produce a recovery instruction.
|
|
198
|
+
Tasks using bounded filesystems need the host prerequisites described in the
|
|
199
|
+
repository evaluation guide. Their storage helpers run with root/sudo while
|
|
200
|
+
Harbor retains the invoking user's identity. For unattended runs, arrange
|
|
201
|
+
non-interactive sudo access in advance.
|
|
202
|
+
|
|
203
|
+
## Building for publication
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
python -m pip install build twine
|
|
207
|
+
python -m build
|
|
208
|
+
python -m twine check --strict dist/*
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Inspect both wheel and sdist before publishing. They should contain the CLI,
|
|
212
|
+
metadata, license and documentation, with no `.env`, task datasets, trajectories
|
|
213
|
+
or job outputs. Keep `pyproject.toml` and `src/search_swe/__init__.py` versions
|
|
214
|
+
aligned before building.
|
|
215
|
+
Upload the checked wheel and sdist with Twine using a PyPI API token.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/hero.png" alt="Search-SWE — Benchmarking coding agents on building search engines">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">
|
|
6
|
+
Search-SWE
|
|
7
|
+
<br>
|
|
8
|
+
<sub>🔍 Benchmarking coding agents on building search engines. 🤖</sub>
|
|
9
|
+
</h1>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://search-swe.github.io/"><img src="https://img.shields.io/badge/Homepage-Search--SWE-0E9B9B?style=for-the-badge&logo=githubpages&logoColor=white" alt="Search-SWE homepage"></a>
|
|
13
|
+
<a href="https://search-swe.github.io/tasks.html"><img src="https://img.shields.io/badge/Task_Gallery-Browse-5865F2?style=for-the-badge" alt="Search-SWE task gallery"></a>
|
|
14
|
+
<a href="https://huggingface.co/datasets/search-swe/Search-SWE"><img src="https://img.shields.io/badge/HuggingFace-Search--SWE-FFD21E?style=for-the-badge&logo=huggingface&logoColor=black" alt="Search-SWE dataset on Hugging Face"></a>
|
|
15
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-lightgrey?style=for-the-badge&logo=apache&logoColor=white" alt="License: Apache 2.0"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<b>English</b> · <a href="README_zh.md">简体中文</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
> *Note: Search-SWE is an ongoing project; tasks, documentation, and results
|
|
23
|
+
> are still evolving.*
|
|
24
|
+
|
|
25
|
+
## 📖 Overview
|
|
26
|
+
|
|
27
|
+
Search-SWE evaluates whether coding agents can **implement and optimize** real
|
|
28
|
+
search systems under fixed resource constraints. Agents inspect an environment,
|
|
29
|
+
write and run code, test their systems, and iterate toward an executable
|
|
30
|
+
submission. Evaluation measures the behavior of the resulting system, including
|
|
31
|
+
retrieval quality, functional correctness, and resource use.
|
|
32
|
+
|
|
33
|
+
Tasks cover reasoning-assisted retrieval, memory-constrained vector search,
|
|
34
|
+
long-document reranking, embedding fine-tuning, and query-encoder alignment.
|
|
35
|
+
|
|
36
|
+
Each task specifies its inputs, submission interface, evaluation criteria, and
|
|
37
|
+
resource budget. See the [benchmark design](docs/benchmark.md) for how
|
|
38
|
+
evaluation works, how the repository is organized, and where fixed data and
|
|
39
|
+
models come from.
|
|
40
|
+
|
|
41
|
+
## 🚀 Quick Start
|
|
42
|
+
|
|
43
|
+
Install the `search-swe` CLI from PyPI in a Python 3.12+ environment:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python -m pip install search-swe
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Run with the CLI
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
search-swe run
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
On first use, choose where to keep the task repository: accept `~/Search-SWE`,
|
|
56
|
+
enter a custom clone path, or select an existing checkout. Git is needed for
|
|
57
|
+
cloning. The CLI remembers the selected path for later commands; task assets and
|
|
58
|
+
results are stored in that checkout. An existing checkout in the current
|
|
59
|
+
directory is used directly.
|
|
60
|
+
|
|
61
|
+
The wizard guides you through harness, provider, searchable model selection,
|
|
62
|
+
reasoning level and API keys, followed by tasks and sequential or parallel execution. Its
|
|
63
|
+
default setting is **Codex + OpenRouter + GPT-6 Luna (max)**. Keys use hidden
|
|
64
|
+
input; configuration is saved to the ignored `.env` only after confirmation.
|
|
65
|
+
You can also keep entered credentials only for the current run.
|
|
66
|
+
|
|
67
|
+
Use a native Linux x86_64 Docker host with enough CPU, RAM, disk and optional GPU
|
|
68
|
+
capacity. The CLI restores and checks selected task assets, assigns resources,
|
|
69
|
+
and prepares bounded task storage when needed. Those tasks require root/sudo
|
|
70
|
+
and FUSE; see [host setup](docs/evaluation.md#bounded-task-storage).
|
|
71
|
+
|
|
72
|
+
After configuration, scripted runs are short:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
search-swe run reasoning-query-rewriting --yes
|
|
76
|
+
search-swe run agentic-search agentic-search-vectorless --concurrency 2 --yes
|
|
77
|
+
search-swe run code-embedding-finetuning --gpu-devices 0 --yes
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Parallel tasks receive separate CPU sets and GPUs within the selected resource
|
|
81
|
+
pool. Results, per-task logs and a `run.json` summary are written to a fresh
|
|
82
|
+
`jobs/evaluations/` directory. Use `search-swe list` to browse tasks,
|
|
83
|
+
`search-swe configure` to save settings without running, and `--dry-run` to
|
|
84
|
+
preview. Task definitions remain in the checkout; use `--repo PATH` when running
|
|
85
|
+
an installed CLI from elsewhere.
|
|
86
|
+
|
|
87
|
+
See the [quick start](docs/quickstart.md), [CLI reference](docs/cli.md), and
|
|
88
|
+
[full evaluation guide](docs/evaluation.md) for custom providers, resource pools,
|
|
89
|
+
network configuration and the underlying single-task launcher.
|
|
90
|
+
For local CLI development, use `python -m pip install -e .` from the repository root.
|
|
91
|
+
|
|
92
|
+
### Run through your agent
|
|
93
|
+
|
|
94
|
+
Install [run-searchswe-evaluation](skills/run-searchswe-evaluation/SKILL.md) into
|
|
95
|
+
your coding agent, then tell it which settings and tasks to run. Use either
|
|
96
|
+
installer (Codex shown here):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npx skills add VectorSpaceLab/Search-SWE --skill run-searchswe-evaluation -a codex
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
gh skill install VectorSpaceLab/Search-SWE skills/run-searchswe-evaluation --agent codex
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Then ask your agent:
|
|
107
|
+
|
|
108
|
+
> Use run-searchswe-evaluation with my Search-SWE checkout. Run agentic-search
|
|
109
|
+
> and agentic-search-vectorless with Codex + OpenRouter + openai/gpt-6-luna,
|
|
110
|
+
> max reasoning and concurrency 2. Reuse my .env, monitor the runs and report
|
|
111
|
+
> scores, verifier health and result paths.
|
|
112
|
+
|
|
113
|
+
The skill guides setup, resource checks, execution and monitoring through the
|
|
114
|
+
same CLI. It prompts you to configure missing keys locally. The
|
|
115
|
+
[agent evaluation guide](docs/agent-evaluations.md) covers local checkout
|
|
116
|
+
installation, other agents, user-wide installation and installer prerequisites.
|
|
117
|
+
|
|
118
|
+
## 📚 Documentation
|
|
119
|
+
|
|
120
|
+
| Document | Contents |
|
|
121
|
+
| --- | --- |
|
|
122
|
+
| [Quick start guide](docs/quickstart.md) | A first CPU evaluation, end to end |
|
|
123
|
+
| [Run with your agent](docs/agent-evaluations.md) | Install the evaluation skill and describe settings/tasks |
|
|
124
|
+
| [Evaluation guide](docs/evaluation.md) | Credential setup, coding agents, GPU, network policy, and custom providers |
|
|
125
|
+
| [Network policy](docs/network-policy.md) | Phase-specific allowlists, default direct gateway, and optional proxy egress |
|
|
126
|
+
| [Asset guide](docs/assets.md) | Downloading, verifying, and restoring fixed data and models |
|
|
127
|
+
| [Benchmark design](docs/benchmark.md) | Evaluation, repository layout, and data provenance |
|
|
128
|
+
| [Contributing guide](docs/contributing.md) | Task-authoring workflow, validation, and PR expectations |
|
|
129
|
+
|
|
130
|
+
For task descriptions and results, visit the
|
|
131
|
+
[project website](https://search-swe.github.io/), maintained in a
|
|
132
|
+
[separate repository](https://github.com/search-swe/search-swe.github.io).
|
|
133
|
+
|
|
134
|
+
## 🤝 Contributing
|
|
135
|
+
|
|
136
|
+
Contributions are welcome. For new or substantially revised tasks, start with
|
|
137
|
+
the workflow and skills in [`.agents/`](.agents/AGENTS.md), including
|
|
138
|
+
[`create-searchswe-task`](.agents/skills/create-searchswe-task/SKILL.md) for task authoring
|
|
139
|
+
and [`maintain-searchswe-task`](.agents/skills/maintain-searchswe-task/SKILL.md) for
|
|
140
|
+
PR review and publication. See the
|
|
141
|
+
[contribution entry](CONTRIBUTING.md) and [guide](docs/contributing.md) for validation and PR requirements.
|
|
142
|
+
|
|
143
|
+
Task authoring includes running a configured coding model, inspecting its
|
|
144
|
+
trajectory and evaluation results, and using that feedback to refine the task
|
|
145
|
+
setting. Revalidate any changes that affect the task or scoring and report the
|
|
146
|
+
final tested revision. If required API keys are missing, the authoring agent
|
|
147
|
+
asks the contributor to configure them locally before the trial.
|
|
148
|
+
|
|
149
|
+
Create tasks directly at `tasks/<task-name>` in your contribution branch. Choose
|
|
150
|
+
a descriptive name of at most five lowercase, hyphen-separated words, and use
|
|
151
|
+
it for the package and its official data. One PR may add multiple tasks. Review
|
|
152
|
+
and validate each package, then merge with a merge commit to preserve original
|
|
153
|
+
authors.
|
|
154
|
+
|
|
155
|
+
Public upstream HF datasets may be used directly with immutable commit pins,
|
|
156
|
+
exact filenames, sizes and SHA-256 hashes. Verify downloads, provenance and usage
|
|
157
|
+
terms before merging; official re-upload is optional. When official publication
|
|
158
|
+
is needed, publish under `tasks/<task-name>/` and pin the merged HF SHA first.
|
|
159
|
+
Use `--task <task-name>` for downloads and local trials.
|
|
160
|
+
|
|
161
|
+
## Citation
|
|
162
|
+
|
|
163
|
+
TBA
|