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:
- Clone the repository:
git clone https://github.com/okikorg/okik.git
- Navigate to the project directory:
cd okik
- 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
# output should be similar to this
main.py Application Routes
├── <HOST>/health/
│ └── /health | GET
├── <HOST>/embedder/
│ ├── /embedder/embed | POST
│ ├── /embedder/similarity | POST
│ ├── /embedder/stream_data | POST
│ └── /embedder/version | POST
└── <HOST>/mockllm/
└── /mockllm/stream_random_words | POST
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
Deploy the app
okik deploy
Monitor the app
# similar to kubectl commands, infact you can use kubectl commands as well
okik get deployments # for deployments
okik get services # for services
Delete the app
okik delete deployment "your_awesome_app"
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file okik-0.0.341.tar.gz
.
File metadata
- Download URL: okik-0.0.341.tar.gz
- Upload date:
- Size: 21.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.3 Darwin/24.0.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 262c6d3451dd3361f7627baff9795677149a8347e57f536b521d9e0ada32643d |
|
MD5 | b304108399512f3095771f7ec75ad16d |
|
BLAKE2b-256 | 1dd731e34700dc73b3b0554a9c4141a8c42258e77eff47f4cd927e994eb22547 |
File details
Details for the file okik-0.0.341-py3-none-any.whl
.
File metadata
- Download URL: okik-0.0.341-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.3 Darwin/24.0.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b435390981bc4e1e986a546191bbddf1f0e7e06a1bc9134f286552e529dce7c3 |
|
MD5 | ca8d5ec478052d0b993fffc209165083 |
|
BLAKE2b-256 | 906656283132c64ca0992dd04a110d5dca6bb4b14fae4994a547466ea6bdfd47 |