Skip to content

NegotiateEnv

NegotiateEnv is an OpenEnv-compatible RL environment for training LLM agents to negotiate B2B SaaS contracts.

Core trick

LLM buyer agent negotiates against a rule-based seller with hidden reservation price, trained by TRL LoRA on episode rewards.

Tags

Description

NegotiateEnv is an OpenEnv-compatible RL environment for training LLM agents to negotiate B2B SaaS contracts. Features 200 real scenarios, multi-objective optimization (price, contract length, annual caps), dynamic constraints, and reward shaping. Trained Qwen-1.5B using TRL+LoRA on 500 episodes, achieving 61% loss reduction in 56 seconds on H100.
MadhaviSG/openEnv-negotiateEnv★ 00 forksPythonCreated Mar 8, 2026 · last push Mar 10, 2026

README excerpt

# NegotiateEnv — OpenEnv Hackathon SF

> "We built an OpenEnv-compatible reinforcement learning benchmark where LLM agents learn to negotiate enterprise SaaS contracts under hidden vendor constraints and dynamic market conditions."

An OpenEnv-compatible RL environment where an LLM agent plays a **procurement manager** negotiating a B2B SaaS contract against a rule-based **Account Executive (AE)** opponent with a hidden reservation price.

---

## Why Negotiation?

Every current OpenEnv environment (Wordle, Sudoku, Blackjack) has fully visible state and frequent rewards. Negotiation breaks both assumptions:

| Property | Other Envs | NegotiateEnv |
|---|---|---|
| State visibility | Fully observable | `vendor_floor_price` is always hidden |
| Reward frequency | Every step | Only at deal close or walkaway |
| Opponent | None / fixed | Rule-based AE with 4 distinct strategies |
| Mid-episode change | None | Constraint drift injects at random turn |

This tests **hidden-information multi-turn reasoning** — a capability no current OpenEnv environment covers.

---

## Dataset

Scenarios are loaded from the HuggingFace dataset:
**[mayukareddy/SyntheticSaasDataset](https://huggingface.co/datasets/mayukareddy/SyntheticSaasDataset)**

```
File: saas_buyer_synthetic_200.xlsx  (200 scenarios)

Columns: id, company_size, seat_count, saas_product, vendor,
         list_price, competitor_price, Budget,
         vendor_floor_price_hidden, contract_length_months, urgency
```

`vendor_floor_p

Team