Skip to main content

dazllm 🚀

Simple, unified interface for all major LLMs

Stop juggling different APIs and libraries. dazllm gives you a clean, consistent way to chat with any LLM - from GPT-4 and Claude to local Ollama or LM Studio models.

Features

✨ Unified API - Same interface for OpenAI, Anthropic, Google, and local models (Ollama, LM Studio) 🔧 Smart Model Selection - Choose by name, type, or let it auto-select
🔐 Secure Configuration - API keys stored safely in system keyring
📝 Structured Output - Get Pydantic models directly from LLM responses
🎨 Image Generation - Create images with DALL-E and more
💻 CLI & Python API - Use from command line or import in your code

Quick Start

Installation

pip install dazllm

Setup

Configure your API keys using keyring:

keyring set dazllm openai_api_key YOUR_OPENAI_KEY
keyring set dazllm anthropic_api_key YOUR_ANTHROPIC_KEY
keyring set dazllm google_api_key YOUR_GOOGLE_KEY
keyring set dazllm ollama_url http://localhost:11434
keyring set dazllm lmstudio_url http://localhost:1234

Check everything is working:

dazllm --check

Usage

Command Line

# Simple chat
dazllm chat "What's the capital of France?"

# Use specific model  
dazllm chat --model openai:gpt-4 "Explain quantum computing"

# Use model type (auto-selects best available)
dazllm chat --model-type paid_best "Write a poem"

# Use provider default
dazllm chat --model openai "Tell me about AI"

# Structured output
dazllm structured "List 3 colors" --schema '{"type":"array","items":{"type":"string"}}'

# Generate images
dazllm image "a red cat wearing a hat" cat.png

# From file
dazllm chat --file prompt.txt --output response.txt

Python API

from dazllm import Llm, ModelType
from pydantic import BaseModel

# Instance-based usage
llm = Llm("openai:gpt-4")
response = llm.chat("Hello!")

# Static/module-level usage
response = Llm.chat("Hello!", model="anthropic:claude-3-5-sonnet-20241022")
response = Llm.chat("Hello!", model_type=ModelType.PAID_BEST)

# Structured output with Pydantic
class ColorList(BaseModel):
    colors: list[str]

result = Llm.chat_structured("List 3 colors", ColorList)
print(result.colors)  # ['red', 'green', 'blue']

# Image generation
Llm.image("a sunset over mountains", "sunset.png")

# Conversation history
conversation = [
    {"role": "user", "content": "Hello"},
    {"role": "assistant", "content": "Hi there!"},
    {"role": "user", "content": "What's your name?"}
]
response = Llm.chat(conversation, model="ollama:mistral-small")

Model Types

Instead of remembering model names, use semantic types:

  • local_small - ~1B parameter models (fast, basic)
  • local_medium - ~7B parameter models (good balance)
  • local_large - ~14B parameter models (best local quality)
  • paid_cheap - Cost-effective cloud models
  • paid_best - Highest quality cloud models

Model Format

All models use the format provider:model:

  • OpenAI: openai:gpt-4o, openai:gpt-4o-mini, openai:dall-e-3
  • Anthropic: anthropic:claude-3-5-sonnet-20241022, anthropic:claude-3-haiku-20240307
  • Google: google:gemini-pro, google:gemini-flash
  • Ollama: ollama:mistral-small, ollama:llama3:8b, ollama:codellama:7b
  • LM Studio: lm-studio:mistral, lm-studio:llama3

You can also use just the provider name (e.g., openai) to use that provider's default model.

Configuration

API keys are stored securely in your system keyring:

# Set API keys
keyring set dazllm openai_api_key YOUR_OPENAI_KEY
keyring set dazllm anthropic_api_key YOUR_ANTHROPIC_KEY
keyring set dazllm google_api_key YOUR_GOOGLE_KEY
keyring set dazllm ollama_url http://localhost:11434
keyring set dazllm lmstudio_url http://localhost:1234

# Set default model (optional)
keyring set dazllm default_model openai:gpt-4o

# Check what's configured
dazllm --check

Examples

Building a Chatbot

from dazllm import Llm

def chatbot():
    llm = Llm.model_named("openai:gpt-4o")
    conversation = []
    
    while True:
        user_input = input("You: ")
        if user_input.lower() == 'quit':
            break
            
        conversation.append({"role": "user", "content": user_input})
        response = llm.chat(conversation)
        conversation.append({"role": "assistant", "content": response})
        
        print(f"AI: {response}")

chatbot()

Data Extraction

from dazllm import Llm
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    city: str

class People(BaseModel):
    people: list[Person]

text = "John Doe, age 30, lives in New York. Jane Smith, age 25, lives in LA."

result = Llm.chat_structured(
    f"Extract people info from: {text}",
    People,
    model="openai:gpt-4o-mini"
)

for person in result.people:
    print(f"{person.name} is {person.age} years old and lives in {person.city}")

Image Generation Pipeline

from dazllm import Llm

# Generate image description
description = Llm.chat(
    "Describe a serene mountain landscape in detail",
    model_type="paid_cheap"
)

# Generate the image
image_path = Llm.image(description, "mountain.png", width=1024, height=768)
print(f"Image saved to {image_path}")

Requirements

  • Python 3.8+
  • API keys for desired providers (OpenAI, Anthropic, Google)
  • Ollama or LM Studio installed for local models

License

MIT License

Contributing

Contributions welcome! Please see the GitHub repository for guidelines.


dazllm - Making LLMs accessible to everyone! 🚀

Metadata

Release files for dazllm 0.39.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dazllm 0.39.0
File Size Uploaded
dazllm-0.39.0.tar.gz 69.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dazllm 0.39.0
File Interpreter ABI Platform
dazllm-0.39.0-py3-none-any.whl Python 3 none any Details

Total release size: 160.9 kB

Release files / dazllm-0.39.0.tar.gz

Download URL dazllm-0.39.0.tar.gz
Size 69.4 kB
Tags Source
SHA-256 checksum
How to use checksums
85ac117296a5b7908c75e1638f5b389e4afd967245bc3f7318648f813caeac74
BLAKE2b-256 checksum
How to use checksums
9e91bb05f1ca3c9192648affade82ad562dee589a90e537eb2fe04589f70ea4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / dazllm-0.39.0-py3-none-any.whl

Download URL dazllm-0.39.0-py3-none-any.whl
Size 91.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cacc791c72b3af57da57cec732d194a47a14d0b297dde2797d3ab8ade4047f7c
BLAKE2b-256 checksum
How to use checksums
0e9b0096859268042319e5b1986a036b391b2bd7eaec4d95b0b7e45687369460
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.39.0 This release

2 release files

0.38.0

2 release files

0.37.0

2 release files

0.36.0

2 release files

0.35.0

2 release files

0.34.0

2 release files

0.33.0

2 release files

0.32.0

2 release files

0.31.0

2 release files

0.30.0

2 release files

0.29.0

2 release files

0.28.0

2 release files

0.27.0

2 release files

0.26.0

2 release files

0.25.0

2 release files

0.24.0

2 release files

0.22.0

2 release files

0.21.0

2 release files

0.20.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page