Skip to content
Back to skills

1214 Braintrust Prompt Wrapper Readme 8c917fb4

ASecurity

This directory contains a wrapper server that enables LiteLLM to use prompts from [Braintrust](https://www.braintrust.dev/) through the generic prompt management API.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
devopspythonrustbashfastapidockertestingapidocumentation

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumUses curl or wget to download content
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 1214-braintrust_prompt_wrapper_readme_8c917fb4 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1214 Braintrust Prompt Wrapper Readme 8c917fb4?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1214 Braintrust Prompt Wrapper Readme 8c917fb4
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1214-braintrust-prompt-wrapper-readme-8c917fb4/badge)](https://www.skillsdirectory.com/skills/tools-only-1214-braintrust-prompt-wrapper-readme-8c917fb4)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Braintrust Prompt Wrapper for LiteLLM

This directory contains a wrapper server that enables LiteLLM to use prompts from [Braintrust](https://www.braintrust.dev/) through the generic prompt management API.

## Architecture

```
┌─────────────┐         ┌──────────────────────┐         ┌─────────────┐
│   LiteLLM   │ ──────> │  Wrapper Server      │ ──────> │  Braintrust │
│   Client    │         │  (This Server)       │         │     API     │
└─────────────┘         └──────────────────────┘         └─────────────┘
    Uses generic             Transforms                    Stores actual
    prompt manager        Braintrust format              prompt templates
                         to LiteLLM format
```

## Components

### 1. Generic Prompt Manager (`litellm/integrations/generic_prompt_management/`)

A generic client that can work with any API implementing the `/beta/litellm_prompt_management` endpoint.

**Expected API Response Format:**
```json
{
  "prompt_id": "string",
  "prompt_template": [
    {"role": "system", "content": "You are a helpful assistant"},
    {"role": "user", "content": "Hello {name}"}
  ],
  "prompt_template_model": "gpt-4",
  "prompt_template_optional_params": {
    "temperature": 0.7,
    "max_tokens": 100
  }
}
```

### 2. Braintrust Wrapper Server (`braintrust_prompt_wrapper_server.py`)

A FastAPI server that:
- Implements the `/beta/litellm_prompt_management` endpoint
- Fetches prompts from Braintrust API
- Transforms Braintrust response format to LiteLLM format

## Setup

### Install Dependencies

```bash
pip install fastapi uvicorn httpx litellm
```

### Set Environment Variables

```bash
export BRAINTRUST_API_KEY="your-braintrust-api-key"
```

## Usage

### Step 1: Start the Wrapper Server

```bash
python braintrust_prompt_wrapper_server.py
```

The server will start on `http://localhost:8080` by default.

You can customize the port and host:
```bash
export PORT=8000
export HOST=0.0.0.0
python braintrust_prompt_wrapper_server.py
```

### Step 2: Use with LiteLLM

```python
import litellm
from litellm.integrations.generic_prompt_management import GenericPromptManager

# Configure the generic prompt manager to use your wrapper server
generic_config = {
    "api_base": "http://localhost:8080",
    "api_key": "your-braintrust-api-key",  # Will be passed to Braintrust
    "timeout": 30,
}

# Create the prompt manager
prompt_manager = GenericPromptManager(**generic_config)

# Use with completion
response = litellm.completion(
    model="generic_prompt/gpt-4",
    prompt_id="your-braintrust-prompt-id",
    prompt_variables={"name": "World"},  # Variables to substitute
    messages=[{"role": "user", "content": "Additional message"}]
)

print(response)
```

### Step 3: Direct API Testing

You can also test the wrapper API directly:

```bash
# Test with curl
curl -H "Authorization: Bearer YOUR_BRAINTRUST_TOKEN" \
     "http://localhost:8080/beta/litellm_prompt_management?prompt_id=YOUR_PROMPT_ID"

# Health check
curl http://localhost:8080/health

# Service info
curl http://localhost:8080/
```

## API Documentation

Once the server is running, visit:
- Swagger UI: `http://localhost:8080/docs`
- ReDoc: `http://localhost:8080/redoc`

## Braintrust Format Transformation

The wrapper automatically transforms Braintrust's response format:

**Braintrust API Response:**
```json
{
  "id": "prompt-123",
  "prompt_data": {
    "prompt": {
      "type": "chat",
      "messages": [
        {
          "role": "system",
          "content": "You are a helpful assistant"
        }
      ]
    },
    "options": {
      "model": "gpt-4",
      "params": {
        "temperature": 0.7,
        "max_tokens": 100
      }
    }
  }
}
```

**Transformed to LiteLLM Format:**
```json
{
  "prompt_id": "prompt-123",
  "prompt_template": [
    {
      "role": "system",
      "content": "You are a helpful assistant"
    }
  ],
  "prompt_template_model": "gpt-4",
  "prompt_template_optional_params": {
    "temperature": 0.7,
    "max_tokens": 100
  }
}
```

## Supported Parameters

The wrapper automatically maps these Braintrust parameters to LiteLLM:

- `temperature`
- `max_tokens` / `max_completion_tokens`
- `top_p`
- `frequency_penalty`
- `presence_penalty`
- `n`
- `stop`
- `response_format`
- `tool_choice`
- `function_call`
- `tools`

## Variable Substitution

The generic prompt manager supports simple variable substitution:

```python
# In your Braintrust prompt:
# "Hello {name}, welcome to {place}!"

# In your code:
prompt_variables = {
    "name": "Alice",
    "place": "Wonderland"
}

# Result:
# "Hello Alice, welcome to Wonderland!"
```

Supports both `{variable}` and `{{variable}}` syntax.

## Error Handling

The wrapper provides detailed error messages:

- **401**: Missing or invalid Braintrust API token
- **404**: Prompt not found in Braintrust
- **502**: Failed to connect to Braintrust API
- **500**: Error transforming response

## Production Deployment

For production use:

1. **Use HTTPS**: Deploy behind a reverse proxy with SSL
2. **Authentication**: Add authentication to the wrapper endpoint if needed
3. **Rate Limiting**: Implement rate limiting to prevent abuse
4. **Caching**: Consider caching prompt responses
5. **Monitoring**: Add logging and monitoring

Example with Docker:

```dockerfile
FROM python:3.11-slim

WORKDIR /app

RUN pip install fastapi uvicorn httpx

COPY braintrust_prompt_wrapper_server.py .

ENV PORT=8080
ENV HOST=0.0.0.0

EXPOSE 8080

CMD ["python", "braintrust_prompt_wrapper_server.py"]
```

## Extending to Other Providers

This pattern can be used with any prompt management provider:

1. Create a wrapper server that implements `/beta/litellm_prompt_management`
2. Transform the provider's response to LiteLLM format
3. Use the generic prompt manager to connect

Example providers:
- Langsmith
- PromptLayer
- Humanloop
- Custom internal systems

## Troubleshooting

### "No Braintrust API token provided"
- Set `BRAINTRUST_API_KEY` environment variable
- Or pass token in `Authorization: Bearer TOKEN` header

### "Failed to connect to Braintrust API"
- Check your internet connection
- Verify Braintrust API is accessible
- Check firewall settings

### "Prompt not found"
- Verify the prompt ID exists in Braintrust
- Check that your API token has access to the prompt

## License

This wrapper is part of the LiteLLM project and follows the same license.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.