Parea AI works seamlessly with LiteLLM proxy using the wrap_openai_client/patchOpenAI methods.


Assuming you had a liteLLM config.yaml file with the following content:

  - model_name: gpt-4o # user-facing model alias
    litellm_params: # all params accepted by litellm.completion() -
      model: gpt-4o
      api_key: OPENAI_API_KEY
  - model_name: claude-3-haiku-20240307 # user-facing model alias
      model: claude-3-haiku-20240307
      api_key: ANTHROPIC_API_KEY
  - model_name: azure_gpt-3.5-turbo
      model: azure/<azure_model_name>
      api_key: AZURE_API_KEY
      api_base: https://<url>
  - model_name: anthropic.claude-3-haiku-20240307-v1:0
      model: bedrock/anthropic.claude-3-haiku-20240307-v1:0
      aws_access_key_id: AWS_ACCESS_KEY_ID
      aws_secret_access_key: AWS_SECRET_ACCESS_KEY
      aws_region_name: us-west-2

You could wrap the OpenAI client with Parea AI as follows:

import openai
from parea import Parea, trace

p = Parea(api_key="PAREA_API_KEY")

client = openai.OpenAI(api_key="litellm", base_url="<LiteLLM_URL, e.g.>")

def llm_call(model: str):
    return, messages=[
        {"role": "user", "content": "this is a test request, write a short poem"}

def main():
    # request sent to model set on litellm proxy using config.yaml, `litellm --config config.yaml`
    response = llm_call(model="claude-3-haiku-20240307")
    response2 = llm_call(model="gpt-4o")
    response3 = llm_call(model="azure_gpt-3.5-turbo")
    response4 = llm_call(model="anthropic.claude-3-haiku-20240307-v1:0")
    return {"claude": response, "gpt": response2, "azure": response3, "bedrock": response4}

if __name__ == "__main__":

Visualizing your traces

In your Parea logs dashboard, you can visualize your traces and see the detailed steps the LLM took across the various models.