Skip to main content

LLM-based negotiators for the negmas negotiation framework

Project description

negmas-llm

LLM-based negotiators for the negmas negotiation framework.

Documentation Status PyPI version Python 3.11+

Overview

negmas-llm integrates Large Language Models with the negmas negotiation framework, allowing you to create negotiators that use LLMs for decision-making. The library supports multiple LLM providers through litellm, including:

  • Cloud providers: OpenAI, Anthropic, Google Gemini, Cohere, Mistral, Groq, Together AI, Azure OpenAI, AWS Bedrock, OpenRouter, DeepSeek, Hugging Face
  • Local models: Ollama, vLLM, LM Studio, text-generation-webui

Installation

pip install negmas-llm

Or with uv:

uv add negmas-llm

Quick Start

from negmas import SAOMechanism
from negmas.preferences import LinearAdditiveUtilityFunction
from negmas.outcomes import make_issue
from negmas_llm import OllamaNegotiator, OpenAINegotiator

# Define negotiation issues
issues = [
    make_issue("price", (0, 100)),
    make_issue("quantity", (1, 10)),
]

# Create utility functions for each party
seller_ufun = LinearAdditiveUtilityFunction(
    weights=[0.6, 0.4],
    issues=issues,
)
buyer_ufun = LinearAdditiveUtilityFunction(
    weights=[-0.6, 0.4],  # Buyer prefers lower prices
    issues=issues,
)

# Create LLM-based negotiators
seller = OpenAINegotiator(
    model="gpt-4o",
    name="seller",
    ufun=seller_ufun,
)
buyer = OllamaNegotiator(
    model="llama3.2",
    name="buyer",
    ufun=buyer_ufun,
)

# Run the negotiation
mechanism = SAOMechanism(outcome_space=issues, n_steps=20)
mechanism.add(seller)
mechanism.add(buyer)
result = mechanism.run()

print(f"Agreement: {result.agreement}")

Supported Negotiators

Class Provider Default Model
OpenAINegotiator OpenAI gpt-4o
AnthropicNegotiator Anthropic claude-sonnet-4-20250514
GeminiNegotiator Google gemini-2.0-flash
CohereNegotiator Cohere command-r-plus
MistralNegotiator Mistral AI mistral-large-latest
GroqNegotiator Groq llama-3.3-70b-versatile
TogetherAINegotiator Together AI Meta-Llama-3.1-70B-Instruct-Turbo
AzureOpenAINegotiator Azure OpenAI (deployment name)
AWSBedrockNegotiator AWS Bedrock claude-3-sonnet
OpenRouterNegotiator OpenRouter openai/gpt-4o
DeepSeekNegotiator DeepSeek deepseek-chat
HuggingFaceNegotiator Hugging Face Llama-3.2-3B-Instruct
OllamaNegotiator Ollama (local) llama3.2
VLLMNegotiator vLLM (local) (model name)
LMStudioNegotiator LM Studio (local) local-model
TextGenWebUINegotiator text-generation-webui local-model

Customization

You can customize how information is presented to the LLM by subclassing LLMNegotiator and overriding the formatting methods:

from negmas_llm import LLMNegotiator

class CustomNegotiator(LLMNegotiator):
    def format_outcome_space(self, state):
        # Customize how the outcome space is described
        return "Custom outcome space description..."

    def format_own_ufun(self, state):
        # Customize how your utility function is described
        return "Custom utility function description..."

    def format_state(self, state, offer=None):
        # Customize how the negotiation state is presented
        return "Custom state description..."

For complete control over the prompts, override build_system_prompt or build_user_message:

from negmas_llm import LLMNegotiator

class CustomPromptNegotiator(LLMNegotiator):
    def build_system_prompt(self, state):
        # Complete control over the system prompt
        # By default, this combines: format_outcome_space(), format_nmi_info(),
        # format_own_ufun(), format_partner_ufun(), format_response_instructions()
        return f"""You are an aggressive negotiator who never accepts the first offer.

{self.format_outcome_space(state)}
{self.format_own_ufun(state)}
{self.format_response_instructions()}

Always aim for at least 80% of your maximum utility."""

    def build_user_message(self, state, offer, source):
        # Complete control over the per-round user message
        if offer is not None:
            return f"Round {state.step}: Opponent offered {offer}. Counter aggressively."
        return f"Round {state.step}: Make an ambitious opening offer."

Documentation

Full documentation is available at negmas-llm.readthedocs.io.

License

GNU Affero General Public License v3.0 or later - see LICENSE for details.

Related Projects

  • negmas - NEGotiation MAnagement System
  • litellm - Call all LLM APIs using the OpenAI format

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

negmas_llm-0.1.0.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

negmas_llm-0.1.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file negmas_llm-0.1.0.tar.gz.

File metadata

  • Download URL: negmas_llm-0.1.0.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for negmas_llm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0b695897cde06ad06c884631dc5797fb5670718e1ec0c314445fa2e58a5723bb
MD5 f23078146ab201281124b045ae3048d6
BLAKE2b-256 3457ce1e22313dea845a12245017d0ffc9a2fee717705328737324c79f29a53d

See more details on using hashes here.

Provenance

The following attestation bundles were made for negmas_llm-0.1.0.tar.gz:

Publisher: publish.yml on autoneg/negmas-llm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file negmas_llm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: negmas_llm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for negmas_llm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b6e25c389c6d1d47c2c59fa104c822e0c9d7218b06127f60b3524de596b21ce3
MD5 92c52083e7c180e805f0b56ab6aa79b9
BLAKE2b-256 448aae298db015874d80e59b0aafd79d4c362dae520b871202e8e275713d2e2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for negmas_llm-0.1.0-py3-none-any.whl:

Publisher: publish.yml on autoneg/negmas-llm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page