`model_select` vs. `create`

Not Diamond is not a proxy. Its core functionality is to take in an array of messages and a list of LLMs and return a recommendation for which LLM is best-suited to respond. You can then make your LLM calls in whatever way you choose.

In the Not Diamond Python SDK, recommendations are made with the model_select method. For ease of use, the Not Diamond Python SDK also has an additional set of optional dependencies you can include when installing the Not Diamond package which adds the create method. The create method will directly facilitate requests to LLM providers client-side.

When to use model_select

model_select may be the better option if you'd like to use Not Diamond in an existing project. The core notdiamond package is lightweight and reduces the risk of dependency conflicts, and you can use any existing code you've implemented to execute requests to LLMs within your project:

pip install notdiamond
# Using model_select

session_id, provider = client.chat.completions.model_select(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Concisely explain merge sort."}
    ],
  	model=['openai/gpt-4o', 'anthropic/claude-3-5-sonnet-20240620']
)

When to use create

On the other hand, create may be the more useful method if you are spinning up a new project from scratch and don't want to write boilerplate code for executing your LLM calls:

pip install notdiamond[create]
# Using create

result, session_id, provider = client.chat.completions.create(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Concisely explain merge sort."}
    ],
  	model=['openai/gpt-4o', 'anthropic/claude-3-5-sonnet-20240620']
)

Most Python examples in our docs use the create method, but you can switch this out for model_select at any point if you prefer.