Skip to main content

A wrapper around Ollama Python SDK for text classification with constrained output and confidence scoring

Project description

ollama-classifier

A Python wrapper around the Ollama Python SDK for text classification with constrained output and confidence scoring.

Features

  • Constrained Output: Uses JSON schema with enum constraints to ensure only valid choices are generated
  • Confidence Scoring: Multi-call evaluation with softmax for calibrated probabilities
  • Sync & Async: Full support for both synchronous and asynchronous operations
  • Batch Processing: Classify multiple texts efficiently
  • Flexible Choices: Support for simple labels or labels with descriptions
  • Custom Prompts: Override the default system prompt for specialized tasks

Installation

pip install ollama-classifier

Or with uv:

uv add ollama-classifier

Prerequisites

  • Ollama installed and running
  • A model pulled (e.g., ollama pull llama3.2)

Quick Start

from ollama import Client
from ollama_classifier import OllamaClassifier

client = Client()
classifier = OllamaClassifier(client, model="llama3.2")

result = classifier.classify(
    text="I love this product!",
    choices=["positive", "negative", "neutral"]
)

print(f"Prediction: {result.prediction}")
print(f"Confidence: {result.confidence:.2%}")
print(f"Probabilities: {result.probabilities}")

Usage

Basic Classification

from ollama import Client
from ollama_classifier import OllamaClassifier

client = Client()
classifier = OllamaClassifier(client, model="llama3.2")

result = classifier.classify(
    text="The goalkeeper made an incredible save!",
    choices=["sports", "politics", "technology", "entertainment"]
)

Classification with Label Descriptions

Providing descriptions helps the model understand each category better:

choices = {
    "positive": "Text expresses happiness, satisfaction, or approval",
    "negative": "Text expresses anger, disappointment, or disapproval",
    "mixed": "Text contains both positive and negative sentiments",
    "neutral": "Text is factual without strong emotional content",
}

result = classifier.classify(
    text="The food was amazing but the service was terrible.",
    choices=choices
)

Custom System Prompt

result = classifier.classify(
    text="The quarterly earnings exceeded analyst expectations.",
    choices=["bullish", "bearish", "neutral"],
    system_prompt="You are a financial sentiment analyzer. "
                  "Classify financial news based on market sentiment."
)

Scoring (Multi-Call with Softmax)

Get calibrated probability distribution over all choices. Makes N API calls for N choices:

result = classifier.score(
    text="The movie was fantastic!",
    choices=["positive", "negative", "neutral"]
)

Generate Only (Fastest)

When you only need the prediction without confidence scores:

prediction = classifier.generate(
    text="The team won the championship!",
    choices=["sports", "finance", "politics"]
)

Batch Classification

texts = [
    "The goalkeeper made an incredible save!",
    "The central bank raised interest rates.",
    "The new smartphone features a revolutionary camera.",
]

results = classifier.batch_classify(
    texts=texts,
    choices=["sports", "finance", "technology"]
)

for text, result in zip(texts, results):
    print(f"{text} -> {result.prediction} ({result.confidence:.2%})")

Async Usage

import asyncio
from ollama import AsyncClient
from ollama_classifier import OllamaClassifier

async def main():
    client = AsyncClient()
    classifier = OllamaClassifier(client, model="llama3.2")
    
    # Single classification
    result = await classifier.aclassify(
        text="The concert was amazing!",
        choices=["positive", "negative", "neutral"]
    )
    
    # Batch classification (concurrent)
    results = await classifier.abatch_classify(
        texts=["Text 1", "Text 2", "Text 3"],
        choices=["positive", "negative", "neutral"]
    )

asyncio.run(main())

API Reference

ClassificationResult

@dataclass
class ClassificationResult:
    prediction: str              # The predicted choice label
    confidence: float            # Confidence score (0.0 to 1.0)
    probabilities: Dict[str, float]  # Probability distribution over all choices
    raw_response: Dict           # Raw Ollama response for debugging

OllamaClassifier Methods

Method Async Description
generate(text, choices, system_prompt) agenerate Constrained output only (fastest)
score(text, choices, system_prompt) ascore Multi-call evaluation with softmax
classify(text, choices, system_prompt) aclassify Full classification with confidence scores
batch_generate(texts, choices, system_prompt) abatch_generate Batch constrained output
batch_score(texts, choices, system_prompt) abatch_score Batch scoring
batch_classify(texts, choices, system_prompt) abatch_classify Batch classification

Parameters

  • text (str): The text to classify
  • texts (List[str]): List of texts to classify (batch methods)
  • choices (Union[List[str], Dict[str, str]]): Either a list of choice labels, or a dict mapping labels to descriptions
  • system_prompt (str | None): Optional custom system prompt

Choosing a Method

Use Case Recommended Method
Speed is critical, no confidence needed generate
Accurate confidence scores classify / score
Batch processing batch_classify or batch_score
Concurrent processing Async variants (aclassify, etc.)

License

MIT License

Development

This project just started! Looking forward to suggestions, issues, and pull requests!

Project details


Download files

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

Source Distribution

ollama_classifier-0.2.0.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

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

ollama_classifier-0.2.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file ollama_classifier-0.2.0.tar.gz.

File metadata

  • Download URL: ollama_classifier-0.2.0.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ollama_classifier-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4baaebd98a1a3e65199345f6a1614a3ad1eb6c3ff96fbf87aac8a96deffdc6ed
MD5 cc74c12ff073744d963121dc132da12e
BLAKE2b-256 e30b9483b51991c9423c05a1110cf94ae1b0fd6e474eb9d04f691c2671003c7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ollama_classifier-0.2.0.tar.gz:

Publisher: python-publish.yml on paluigi/ollama-classifier

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ollama_classifier-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ollama_classifier-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 155a8827e42ca06fb7415d3e409fbcae15a93a57260dc8c7e641f72eb66541ad
MD5 490ac5c60fba555301c83a764a86c100
BLAKE2b-256 f1cff9e61562d06e611a73b7355b2815f67bdb7d08cc6097582947f609f002ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for ollama_classifier-0.2.0-py3-none-any.whl:

Publisher: python-publish.yml on paluigi/ollama-classifier

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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