Skip to main content

Python library for interacting with KoboldCPP API

Project description

KoboldAPI

A Python library for interacting with KoboldCPP APIs, providing high-level abstractions for text processing, image handling, and generation tasks.

Features

  • Text Processing

    • Intelligent text chunking
    • Streaming generation capabilities
    • Token counting and management
  • Image Processing

    • Support for multiple image formats (JPEG, PNG, GIF, TIFF, WEBP, HEIF, RAW)
    • Automatic image resizing and optimization
    • RAW image processing with thumbnail extraction
    • Base64 encoding for API transmission
  • Template Management

    • Flexible template system for different LLM models
    • Custom template directory support
    • Built-in default templates
    • Jinja2 templating integration
  • API Integration

    • Robust error handling
    • Connection management
    • Streaming support
    • Comprehensive API endpoint coverage

Installation

pip install koboldapi

Quick Start

Text Processing Example

from koboldapi import KoboldAPICore, ChunkingProcessor

# Initialize the API client
core = KoboldAPICore(api_url="http://localhost:5001")

# Create a chunking processor
chunker = ChunkingProcessor(core.api_client, max_chunk_length=2048)

# Process text
chunks, metadata = chunker.chunk_file("document.txt")
for chunk, token_count in chunks:
    response = core.wrap_and_generate(
        instruction="Summarize this text:",
        content=chunk
    )
    print(response)

Image Processing Example

from koboldapi import KoboldAPICore, ImageProcessor

# Initialize processors
core = KoboldAPICore(api_url="http://localhost:5001")
processor = ImageProcessor(max_dimension=1024)

# Process image
encoded_image, img_path = processor.process_image("image.jpg")
response = core.wrap_and_generate(
    instruction="Describe this image:",
    images=[encoded_image]
)
print(response)

Streaming Generation Example

from koboldapi import KoboldAPICore
import asyncio

async def stream_example():
    core = KoboldAPICore(api_url="http://localhost:5001")
    
    # Stream tokens as they're generated
    async for token in core.api_client.stream_generate(
        prompt="Write a story about a robot:",
        max_length=200
    ):
        print(token, end='', flush=True)
    
    # Or collect all tokens into final result
    result = await core.api_client.generate_sync(
        prompt="Write a story about a robot:",
        max_length=200
    )
    print(result)

if __name__ == "__main__":
    asyncio.run(stream_example())
	

Detailed Documentation

KoboldAPICore

The main interface for interacting with KoboldCPP APIs.

core = KoboldAPICore(
    api_url="http://localhost:5001",
    api_password=None,  # Optional API password
    generation_params={  # Optional generation parameters
        'temp': 0.7,
        'top_k': 40,
        'top_p': 0.9
    },
    templates_directory="path/to/templates"  # Optional custom templates
)

Text Processing

The ChunkingProcessor class handles text segmentation and processing:

chunker = ChunkingProcessor(
    api_client,  # KoboldAPI instance
    max_chunk_length=2048,  # Maximum tokens per chunk
    max_total_chunks=1000  # Maximum number of chunks
)

# Process a file
chunks, metadata = chunker.chunk_file("document.txt")

# Process raw text
chunks = chunker.chunk_text("Your text content here")

Image Processing

The ImageProcessor class handles image preparation and optimization:

processor = ImageProcessor(
    max_dimension=1024,  # Maximum image dimension
    patch_sizes=[8, 14, 16, 32],  # Patch size options
    max_file_size=50 * 1024 * 1024  # Maximum file size in bytes
)

# Process an image
encoded_image, path = processor.process_image("image.jpg")

Template Management

Custom templates can be provided in JSON format:

{
    "template_name": {
        "name": ["model_name_pattern"],
        "system_start": "\nSystem: ",
        "system_end": "\n",
        "user_start": "User: ",
        "user_end": "\n",
        "assistant_start": "Assistant: "
    }
}

Error Handling

The library provides custom exceptions for error handling:

try:
    result = core.wrap_and_generate(instruction="Your instruction")
except KoboldAPIError as e:
    print(f"API Error: {e}")

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the GPLv3 License - see the LICENSE file for details.

Source

Github Link.

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

koboldapi-0.5.2.tar.gz (30.5 kB view details)

Uploaded Source

Built Distribution

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

koboldapi-0.5.2-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file koboldapi-0.5.2.tar.gz.

File metadata

  • Download URL: koboldapi-0.5.2.tar.gz
  • Upload date:
  • Size: 30.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for koboldapi-0.5.2.tar.gz
Algorithm Hash digest
SHA256 e225adfda1dc319e5136db4e4607eb9454cbf66bf9de625f9a8d03c9ebd8d14e
MD5 4dc5506c5b75ad5c574c6c7c0f272a40
BLAKE2b-256 6019929fdfef0c8e73b8e1b5b534afb51c358b14dd5a2b5177a4d6ba009882f6

See more details on using hashes here.

File details

Details for the file koboldapi-0.5.2-py3-none-any.whl.

File metadata

  • Download URL: koboldapi-0.5.2-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for koboldapi-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 aa805cca05ff62fe3b10e2516d98a6073a3e58f971083ba4f25396b6756ae218
MD5 e8acfc5bf9593a765d5fccaaec86cf25
BLAKE2b-256 2da9f713926214311d6a1385d68ea9ae962685d9d814ae75ff73a7f439e9ec62

See more details on using hashes here.

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