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.