Skip to main content

Composo Python SDK

Project description

Composo provides a Python SDK for Composo evaluation, with:

  • Dual Client Support: Both synchronous and asynchronous clients
  • Convenient Format: Compatible with python dictionaries and results objects from OpenAI and Anthropic
  • HTTP Goodies: Connection pooling + retry logic

Note: This SDK is for Python users. If you're using TypeScript, JavaScript, or other languages, please refer to the REST API Reference to call the API directly.

Installation

Install the SDK using pip:

pip install composo

Quick Start

Let's run a simple Hello World evaluation to get started with Composo evaluation.

from composo import Composo

composo_client = Composo()

result = composo_client.evaluate(
    messages=[
        {"role": "user", "content": "Hello"},
        {"role": "assistant", "content": "Hello! How can I help you today?"}
    ],
    criteria="Reward responses that are friendly"
)

print(f"Score: {result.score}")
print(f"Explanation: {result.explanation}")

Reference

Client Parameters

Both Composo and AsyncComposo clients accept the following parameters during instantiation:

Parameter Type Required Default Description
api_key str No* None Your Composo API key. If not provided, will use COMPOSO_API_KEY environment variable
num_retries int No 1 Number of retry attempts for failed requests

*Required if COMPOSO_API_KEY environment variable is not set.

Evaluation Method Parameters

The evaluate() method accepts the following parameters:

Parameter Type Required Description
messages List[Dict] Yes List of message dictionaries with 'role' and 'content' keys
criteria str or List[str] Yes Evaluation criteria (single string or list of criteria)
tools List[Dict] No Tool definitions for evaluating tool calls
result OpenAI/Anthropic Result Object No Pre-computed LLM result object to evaluate

Environment Variables

The SDK supports the following environment variables:

  • COMPOSO_API_KEY: Your Composo API key (used when api_key parameter is not provided)

Response Format

The evaluate method returns an EvaluationResponse object:

class EvaluationResponse:
    score: Optional[float]      # Score from 0-1
    explanation: str            # Evaluation explanation

Async Evaluation

Use the async client when you need to run multiple evaluations concurrently or integrate with async workflows.

import asyncio
from composo import AsyncComposo

async def main():
    composo_client = AsyncComposo()
    result = await composo_client.evaluate(
        messages=[
            {"role": "user", "content": "Hello"},
            {"role": "assistant", "content": "Hello! How can I help you today?"}
        ],
        criteria="Reward responses that are friendly"
    )
    
    print(f"Score: {result.score}")
    print(f"Explanation: {result.explanation}")

asyncio.run(main())

Multiple Criteria Evaluation

When evaluating against multiple criteria, the async client runs all evaluations concurrently for better performance.

import os
from composo import Composo

composo_client = Composo()

messages = [
    {"role": "user", "content": "Explain quantum computing in simple terms"},
    {"role": "assistant", "content": "Quantum computing uses quantum mechanics to process information..."}
]

criteria = [
    "Reward responses that explain complex topics in simple terms",
    "Reward responses that provide accurate technical information",
    "Reward responses that are engaging and easy to understand"
]

results = composo_client.evaluate(messages=messages, criteria=criteria)

for i, result in enumerate(results):
    print(f"Criteria {i+1}: Score = {result.score}")
    print(f"Explanation: {result.explanation}\n")

Evaluating OpenAI/Anthropic Outputs

You can directly evaluate the result of a call to the OpenAI SDK by passing the return of completions.create to composo evaluate. N.B. Composo will always evaluate choices[0].

import os
import openai
from composo import Composo

composo_client = Composo()

openai_composo_client = openai.OpenAI(api_key="your-openai-key")
openai_result = openai_composo_client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "What is machine learning?"}]
)

result = composo_client.evaluate(
    messages=[{"role": "user", "content": "What is machine learning?"}],
    result=openai_result,
    criteria="Reward accurate technical explanations"
)

print(f"Score: {result.score}")

Error Handling

The SDK provides specific exception types:

from composo import (
    ComposoError,
    RateLimitError,
    MalformedError,
    APIError,
    AuthenticationError
)

try:
    result = composo_client.evaluate(messages=messages, criteria=criteria)
except RateLimitError:
    print("Rate limit exceeded")
except AuthenticationError:
    print("Invalid API key")
except ComposoError as e:
    print(f"Composo error: {e}")

Logging

The SDK uses Python's standard logging module. Configure logging level:

import logging
logging.getLogger("composo").setLevel(logging.INFO)

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

composo-0.2.23.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

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

composo-0.2.23-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file composo-0.2.23.tar.gz.

File metadata

  • Download URL: composo-0.2.23.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for composo-0.2.23.tar.gz
Algorithm Hash digest
SHA256 4f010c66bb7018c7f1bf9b3f05e1d545d9d4018e10ae632168a6efc0e8d7e20c
MD5 6afe2222ae19ec2819787352c92bc513
BLAKE2b-256 d12d390cbc9d42702232e25a9069ef1e41c420f7dec9930dd9948b9eb8a9156e

See more details on using hashes here.

File details

Details for the file composo-0.2.23-py3-none-any.whl.

File metadata

  • Download URL: composo-0.2.23-py3-none-any.whl
  • Upload date:
  • Size: 19.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for composo-0.2.23-py3-none-any.whl
Algorithm Hash digest
SHA256 e548394b941d0beb4c4aa2656d8f6c58555af1b7a59f77f01457f89658c02982
MD5 463f7d92d0ab6ca5f97be078a628333d
BLAKE2b-256 f815fec62c61fb2f8dc4e7e6ab656ab5f04e65d1561a4f3e53de47bab1c7c681

See more details on using hashes here.

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