LLM API Reference

Message explanation and generation, and the provider layer. Generated from the package docstrings.

iso8583sim.llm

LLM-powered features for ISO 8583 message handling.

This module provides AI-powered tools for explaining and generating ISO 8583 messages using various LLM providers.

Features:

  • MessageExplainer: Explain messages in plain English
  • MessageGenerator: Generate messages from natural language

Supported Providers:

  • Anthropic (Claude)
  • OpenAI (GPT)
  • Google (Gemini)
  • Ollama (local models)

Example:  »> from iso8583sim.llm import MessageExplainer, MessageGenerator  »>  »> # Explain a message  »> explainer = MessageExplainer() # Auto-detects provider  »> print(explainer.explain(message))  »>  »> # Generate a message  »> generator = MessageGenerator(provider=”anthropic”)  »> message = generator.generate(“$100 VISA purchase”)

Installation: # Install with all LLM providers pip install iso8583sim[llm]

# Or install specific providers
pip install iso8583sim[anthropic]
pip install iso8583sim[openai]
pip install iso8583sim[google]
pip install iso8583sim[ollama]

iso8583sim.llm.base

Base classes for LLM providers.

This module defines the abstract base class for LLM providers, allowing multiple backend implementations (Anthropic, OpenAI, Google, Ollama).

class LLMResponse

Response from an LLM provider.

LLMResponse(content: 'str', model: 'str', provider: 'str', usage: 'dict[str, int] | None' = None) -> None

class LLMError

Base exception for LLM-related errors.

class ProviderNotAvailableError

Raised when a provider’s dependencies are not installed.

ProviderNotAvailableError(provider: 'str', package: 'str')

class ProviderConfigError

Raised when provider configuration is invalid.

class GenerationError

Raised when message generation fails.

class LLMProvider

Abstract base class for LLM providers.

All LLM providers must implement this interface to be compatible with MessageExplainer and MessageGenerator.

Example:  »> class MyProvider(LLMProvider): … def complete(self, prompt, system=None): … return “response” … @property … def name(self): … return “my-provider”

complete(prompt: 'str', system: 'str | None' = None) -> 'str'

Send a prompt to the LLM and return the response text.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: The LLM’s response text

Raises: LLMError: If the API call fails

complete_with_metadata(prompt: 'str', system: 'str | None' = None) -> 'LLMResponse'

Send a prompt and return response with metadata.

Default implementation wraps complete(). Providers can override for more detailed metadata.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: LLMResponse with content and metadata

model (property)

Return the model name being used.

name (property)

Return the provider name for logging/display.

iso8583sim.llm.explainer

Message Explainer using LLM to provide human-readable explanations.

class MessageExplainer

Explains ISO 8583 messages in plain English using an LLM.

This class uses an LLM provider to generate human-readable explanations of ISO 8583 messages, making them easier to understand for developers and analysts.

Example:  »> explainer = MessageExplainer() # Auto-detects provider  »> message = parser.parse(“0100…”)  »> print(explainer.explain(message)) “This is a VISA authorization request for $100.00…”

>>> # Or explain a raw message string
>>> print(explainer.explain("0100702406C120E09000..."))

>>> # Use a specific provider
>>> explainer = MessageExplainer(provider="anthropic")
MessageExplainer(provider: 'LLMProvider | str | None' = None)

explain(message: 'ISO8583Message | str', verbose: 'bool' = False) -> 'str'

Explain an ISO 8583 message in plain English.

Args: message: ISO8583Message object or raw message string to explain verbose: If True, include more technical details

Returns: Human-readable explanation of the message

explain_error(error: 'str', message: 'ISO8583Message | str') -> 'str'

Explain a validation or parsing error in context.

Args: error: The error message to explain message: The message that caused the error

Returns: Human-readable explanation of the error and how to fix it

explain_field(field_number: 'int', value: 'str') -> 'str'

Explain a specific ISO 8583 field value.

Args: field_number: The field number (e.g., 2, 39, 55) value: The field value to explain

Returns: Human-readable explanation of the field and its value

explain_response_code(code: 'str') -> 'str'

Explain an ISO 8583 response code.

Args: code: The response code (e.g., “00”, “51”, “05”)

Returns: Human-readable explanation of the response code

provider (property)

Return the LLM provider being used.

iso8583sim.llm.generator

Message Generator using LLM to create ISO 8583 messages from natural language.

class MessageGenerator

Generates ISO 8583 messages from natural language descriptions.

This class uses an LLM to interpret natural language descriptions and generate valid ISO 8583 messages.

Example:  »> generator = MessageGenerator()  »> message = generator.generate(“$100 VISA purchase at a gas station”)  »> print(message.mti) # “0100”  »> print(message.fields[4]) # “000000010000”

>>> # Generate without validation
>>> message = generator.generate("refund $50", validate=False)
MessageGenerator(provider: 'LLMProvider | str | None' = None)

generate(description: 'str', validate: 'bool' = True) -> 'ISO8583Message'

Generate an ISO 8583 message from a natural language description.

Args: description: Natural language description of the desired message (e.g., “$100 VISA purchase at a gas station in NYC”) validate: Whether to validate the generated message

Returns: Valid ISO8583Message object

Raises: GenerationError: If the message cannot be generated or validated

provider (property)

Return the LLM provider being used.

suggest_fields(partial_message: 'ISO8583Message') -> 'dict[int, str]'

Suggest missing fields for a partial message.

Args: partial_message: Partial ISO8583Message with some fields populated

Returns: Dictionary of suggested field values

iso8583sim.llm.providers

LLM provider factory and auto-detection.

This module provides a factory function to create LLM providers and auto-detect available providers based on installed packages and configured API keys.

Functions

get_provider(name: 'str | None' = None, **kwargs) -> 'LLMProvider'

Get an LLM provider instance.

If name is provided, creates that specific provider. If name is None, auto-detects the first available provider.

Args: name: Provider name (‘anthropic’, ‘openai’, ‘google’, ‘ollama’) or None for auto-detection **kwargs: Additional arguments passed to the provider constructor

Returns: An initialized LLMProvider instance

Raises: ProviderConfigError: If no provider is available or configured

Example:  »> provider = get_provider() # Auto-detect  »> provider = get_provider(“anthropic”) # Specific provider  »> provider = get_provider(“openai”, model=”gpt-4-turbo”)

list_available_providers() -> 'list[str]'

List all available and configured providers.

Returns: List of provider names that are installed and configured

list_installed_providers() -> 'list[str]'

List all installed providers (may not be configured).

Returns: List of provider names that have their packages installed

iso8583sim.llm.providers.anthropic

Anthropic (Claude) LLM provider implementation.

class AnthropicProvider

LLM provider using Anthropic’s Claude API.

Example:  »> provider = AnthropicProvider() # Uses ANTHROPIC_API_KEY env var  »> response = provider.complete(“Explain ISO 8583”)  »> print(response)

>>> # Or with explicit API key
>>> provider = AnthropicProvider(api_key="sk-ant-...")
AnthropicProvider(api_key: 'str | None' = None, model: 'str | None' = None, max_tokens: 'int | None' = None)

complete(prompt: 'str', system: 'str | None' = None) -> 'str'

Send a prompt to Claude and return the response.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: The response text from Claude

Raises: LLMError: If the API call fails

complete_with_metadata(prompt: 'str', system: 'str | None' = None) -> 'LLMResponse'

Send a prompt and return response with metadata.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: LLMResponse with content and usage metadata

model (property)

Return the model name being used.

name (property)

Return the provider name.

Functions

is_available() -> 'bool'

Check if Anthropic provider is available.

Returns: True if anthropic package is installed and API key is configured.

iso8583sim.llm.providers.openai

OpenAI (GPT) LLM provider implementation.

class OpenAIProvider

LLM provider using OpenAI’s GPT API.

Example:  »> provider = OpenAIProvider() # Uses OPENAI_API_KEY env var  »> response = provider.complete(“Explain ISO 8583”)  »> print(response)

>>> # Or with explicit API key
>>> provider = OpenAIProvider(api_key="sk-...")
OpenAIProvider(api_key: 'str | None' = None, model: 'str | None' = None, max_tokens: 'int | None' = None)

complete(prompt: 'str', system: 'str | None' = None) -> 'str'

Send a prompt to GPT and return the response.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: The response text from GPT

Raises: LLMError: If the API call fails

complete_with_metadata(prompt: 'str', system: 'str | None' = None) -> 'LLMResponse'

Send a prompt and return response with metadata.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: LLMResponse with content and usage metadata

model (property)

Return the model name being used.

name (property)

Return the provider name.

Functions

is_available() -> 'bool'

Check if OpenAI provider is available.

Returns: True if openai package is installed and API key is configured.

iso8583sim.llm.providers.google

Google (Gemini) LLM provider implementation.

class GoogleProvider

LLM provider using Google’s Gemini API.

Example:  »> provider = GoogleProvider() # Uses GOOGLE_API_KEY env var  »> response = provider.complete(“Explain ISO 8583”)  »> print(response)

>>> # Or with explicit API key
>>> provider = GoogleProvider(api_key="...")
GoogleProvider(api_key: 'str | None' = None, model: 'str | None' = None)

complete(prompt: 'str', system: 'str | None' = None) -> 'str'

Send a prompt to Gemini and return the response.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: The response text from Gemini

Raises: LLMError: If the API call fails

complete_with_metadata(prompt: 'str', system: 'str | None' = None) -> 'LLMResponse'

Send a prompt and return response with metadata.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: LLMResponse with content and metadata

model (property)

Return the model name being used.

name (property)

Return the provider name.

Functions

is_available() -> 'bool'

Check if Google provider is available.

Returns: True if google-generativeai package is installed and API key is configured.

iso8583sim.llm.providers.ollama

Ollama (local) LLM provider implementation.

class OllamaProvider

LLM provider using local Ollama server.

Example:  »> provider = OllamaProvider() # Uses llama3.2 on localhost  »> response = provider.complete(“Explain ISO 8583”)  »> print(response)

>>> # Or with custom model and host
>>> provider = OllamaProvider(model="mistral", host="http://192.168.1.100:11434")
OllamaProvider(model: 'str | None' = None, host: 'str | None' = None)

complete(prompt: 'str', system: 'str | None' = None) -> 'str'

Send a prompt to Ollama and return the response.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: The response text from Ollama

Raises: LLMError: If the API call fails

complete_with_metadata(prompt: 'str', system: 'str | None' = None) -> 'LLMResponse'

Send a prompt and return response with metadata.

Args: prompt: The user prompt to send system: Optional system prompt for context

Returns: LLMResponse with content and metadata

model (property)

Return the model name being used.

name (property)

Return the provider name.

Functions

is_available() -> 'bool'

Check if Ollama provider is available.

Returns: True if ollama package is installed. Note: doesn’t check if server is running.