Skip to main content

A Python package to serve python functions, classes, or .py files on a local server or cloud-based environment.

Project description

About

Okik is a command-line interface (CLI) that allows users to run various inference services such as LLM, RAG(WIP), or anything in between using various frameworks on any *cloud. With Okik, you can easily run these services directly on any cloud without the hassle of managing your own infra.

Installation

Using pip

pip install okik

Or To install Okik, follow these steps:

  1. Clone the repository: git clone https://github.com/okikorg/okik.git
  2. Navigate to the project directory: cd okik
  3. Install Okik using pip: pip install .

Quick Start

To run Okik, simply execute the following command in your terminal: okik

██████  ██   ██ ██ ██   ██
██    ██ ██  ██  ██ ██  ██
██    ██ █████   ██ █████
██    ██ ██  ██  ██ ██  ██
██████  ██   ██ ██ ██   ██



Simplify. Deploy. Scale.
Type 'okik --help' for more commands.

Initialise the project

okik init

Quick Example

Write this in your main.py file:

from okik.endpoints import service, endpoint, app
import asyncio
from typing import Any
from sentence_transformers import SentenceTransformer
import sentence_transformers
from torch.nn.functional import cosine_similarity as cosine
import torch
import random

# your service configuration
@service(
    replicas=1,
    resources={"accelerator": {"type": "A40", "device": "cuda", "count": 1, "memory": 4}},
    backend="okik" # <- provisioning backend is okik
)
class Embedder:
    def __init__(self):
        self.model = SentenceTransformer("paraphrase-MiniLM-L6-v2", cache_folder=".okik/cache")

    @endpoint()
    def embed(self, sentence: str):
        logits = self.model.encode(sentence)
        return logits

    @endpoint()
    def similarity(self, sentence1: str, sentence2: str):
        logits1 = self.model.encode(sentence1, convert_to_tensor=True)
        logits2 = self.model.encode(sentence2, convert_to_tensor=True)
        return cosine(logits1.unsqueeze(0), logits2.unsqueeze(0))

    @endpoint()
    def version(self):
        return sentence_transformers.__version__

    @endpoint(stream=True)
    async def stream_data(self) -> Any:
        async def data_generator():
            for i in range(10):
                yield f"data: {i}\n"
                await asyncio.sleep(1)
        return data_generator()

# Mock LLM Service Example
@service(replicas=1)
class MockLLM:
    def __init__(self):
        pass

    @endpoint(stream=True) # <- streaming response enabled for use cases like chatbot
    async def stream_random_words(self, prompt: str = "Hello"):
        async def word_generator():
            words = ["hello", "world", "fastapi", "stream", "test", "random", "words", "python", "async", "response"]
            for _ in range(10):
                word = random.choice(words)
                yield f"{word}\n"
                await asyncio.sleep(0.4)
        return word_generator()

Verify the routes

# run the okik routes to check all available routes
okik routes

Serving the app

# run the okik run to start the server in production mode
okik server
# or run in dev mode
okik server --dev --reload
#or
okik server -d -r

Test the app

curl -X POST http://0.0.0.0:3000/embedder/version
# or if you like to use httpie then
http POST 0.0.0.0:3000/embedder/version

# or test the stream endpoint
curl -X POST http://0.0.0.0:3000/mockllm/stream_random_words -d '{"prompt": "Hello"}'
# or if you like to use httpie then
http POST 0.0.0.0:3000/mockllm/stream_random_words prompt="hello" --stream

Build the app

okik build -a "your_awesome_app" -t latest

Status

Okik is currently in development so expect sharp edges and bugs. Feel free to contribute to the project by submitting a pull request.

Roadmap

  • Add support for various inference engines such as vLLM, TGI, etc.
  • Add support for various cloud providers such as AWS, GCP, Azure, etc.

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

okik-0.0.32.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

okik-0.0.32-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file okik-0.0.32.tar.gz.

File metadata

  • Download URL: okik-0.0.32.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Darwin/23.0.0

File hashes

Hashes for okik-0.0.32.tar.gz
Algorithm Hash digest
SHA256 4cbd25b906730d41edf200787fa1c788ce86f380f687373aff697208dfbcfc52
MD5 92dcc23faea2e7eb892fdca8edf7ef21
BLAKE2b-256 8cd4153df4c84a573faa2e1e5c4c5a2d36eeff24cccd581d47d7e661d0354c70

See more details on using hashes here.

File details

Details for the file okik-0.0.32-py3-none-any.whl.

File metadata

  • Download URL: okik-0.0.32-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Darwin/23.0.0

File hashes

Hashes for okik-0.0.32-py3-none-any.whl
Algorithm Hash digest
SHA256 5f1526e12f067bc93e3c86d5e7aff9feead139aeef08fc6768532e913ca7510e
MD5 000bc67d862d49bf0ab08ff28395b1a4
BLAKE2b-256 b80715ab0e1a93fcd017fe7e09758a5b844210ff47ab45ccefbfd35f6dc78b33

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page