Metadata-Version: 2.4
Name: freesolo
Version: 0.2.56
Summary: Environment and dataset helpers for Freesolo-generated repos.
Requires-Python: >=3.10
Requires-Dist: typing-extensions>=4.8.0
Provides-Extra: bson
Requires-Dist: pymongo>=4.0.0; extra == 'bson'
Provides-Extra: dev
Requires-Dist: gepa>=0.1.1; (python_version >= '3.10') and extra == 'dev'
Requires-Dist: httpx>=0.27.0; extra == 'dev'
Requires-Dist: jsonschema>=4.0.0; extra == 'dev'
Requires-Dist: mypy>=1.13.0; extra == 'dev'
Requires-Dist: opentelemetry-api>=1.28.0; extra == 'dev'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.28.0; extra == 'dev'
Requires-Dist: opentelemetry-sdk>=1.28.0; extra == 'dev'
Requires-Dist: pymongo>=4.0.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: python-dotenv>=1.0.0; extra == 'dev'
Requires-Dist: ruff>=0.11.0; extra == 'dev'
Requires-Dist: wandb>=0.17.0; (python_version >= '3.10') and extra == 'dev'
Provides-Extra: examples
Requires-Dist: openai>=1.0.0; extra == 'examples'
Provides-Extra: full
Requires-Dist: gepa>=0.1.1; (python_version >= '3.10') and extra == 'full'
Requires-Dist: httpx>=0.27.0; extra == 'full'
Requires-Dist: jsonschema>=4.0.0; extra == 'full'
Requires-Dist: opentelemetry-api>=1.28.0; extra == 'full'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.28.0; extra == 'full'
Requires-Dist: opentelemetry-sdk>=1.28.0; extra == 'full'
Requires-Dist: pymongo>=4.0.0; extra == 'full'
Requires-Dist: python-dotenv>=1.0.0; extra == 'full'
Requires-Dist: wandb>=0.17.0; (python_version >= '3.10') and extra == 'full'
Provides-Extra: gepa
Requires-Dist: gepa>=0.1.1; (python_version >= '3.10') and extra == 'gepa'
Requires-Dist: wandb>=0.17.0; (python_version >= '3.10') and extra == 'gepa'
Provides-Extra: tracing
Requires-Dist: opentelemetry-api>=1.28.0; extra == 'tracing'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.28.0; extra == 'tracing'
Requires-Dist: opentelemetry-sdk>=1.28.0; extra == 'tracing'
Description-Content-Type: text/markdown

# freesolo

`freesolo` is the published Python SDK surface for generated repos:
environments and datasets used for evaluation and task definition.

It is intentionally narrow:

- `freesolo.environments`
- `freesolo.datasets`

Everything else (evaluation, tracing, and internal helpers) is kept in the
repository for internal workflows but is not part of the public SDK contract.

## Install

```bash
pip install freesolo
```

From source:

```bash
cd freesolo-sdk
export PYTHONPATH="$PWD/pypi"
```

## Dataset Contract

Dataset records use `input` and optional `output`.

```json
{"id": "example-1", "input": "Say yes.", "output": "yes"}
```

The SDK does not accept aliases such as `prompt`, `query`, `task`,
`ground_truth`, `expected_output`, or `completion`.

## Environment Contract

Environments are Python modules that expose `load_environment()` and return an
`EnvironmentSingleTurn` or `EnvironmentMultiTurn` instance. Environment code
uses `TaskExample.input` and `TaskExample.output` when building prompts and
scoring responses.

Single-turn environments build their initial episode through `start_episode()`.
The SDK prepends the supplied contract text as a `system` message when the
environment did not already provide one, so SFT rows and local evaluation see
the same policy prompt. Multi-turn environments own their `start_episode()`
implementation and should include any task-specific initial system message
there.

The SDK does not handle remote artifact publishing or resolution.

## Example

```python
from freesolo.datasets import load_dataset
from freesolo.environments import load_environment

dataset = load_dataset("support.jsonl")
environment = load_environment("freesolo/environment.py:load_environment")

print(len(dataset.examples))
print(type(environment).__name__)
```

## API Guidance

Use `freesolo.datasets` for task examples and `freesolo.environments` for environment
loading/scoring interfaces.

- No command-line help surface is published as part of the SDK contract.
- Hidden modules remain available in source history for internal tooling only.
