Skip to main content

Reaction. ML serving & microservices.

Project description

Reaction logo

Convenient DL serving

Build Status Pipi version Docs PyPI Status Github contributors

Twitter Telegram Spectrum Slack

Part of Catalyst Ecosystem. Project manifest.


Installation

Common installation:

pip install -U reaction

Getting started

consumer.py:

import asyncio
from typing import List, Any
from reaction.rpc import RabbitRPC


class rpc(RabbitRPC):
    URL = 'amqp://user:password@host'


@rpc()
def sync_square(*values) -> List[float]:
    return [v ** 2 for v in values]


@rpc()
async def async_square(*values) -> List[float]:
    await asyncio.sleep(1)
    return [v ** 2 for v in values]


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.create_task(sync_square.consume())
    loop.create_task(async_square.consume())
    loop.run_forever()

client.py:

import asyncio
from consumer import sync_square, async_square

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    x = loop.run_until_complete(sync_square.call(2, 3))
    y = loop.run_until_complete(async_square.call(4, 5, 6))
    print(x)  # 4, 9
    print(y)  # 16, 25, 36
    loop.close()

Example

  • Register telegram bot, achieve token
  • cd example && TG_TOKEN="telegram bot token goes here" docker-compose up --force-recreate --build
  • RabbitMQ web ui: http://127.0.0.1:15672/#/
    • user: admin
    • password: j8XfG9ZDT5ZZrWTzw62q
  • Docs (you can submit requests from web ui): http://127.0.0.1:8000/docs#/
  • Redoc: http://127.0.0.1:8000/redoc
  • Telegram bot is ready to classify ants & bees, but you have to send files "as a photo"

Telegram bot quick howto

Install async telegram client first:

$ pip install aiotg

Then create your bot:

tgbot.py

from consumer import async_square
from aiotg import Bot, Chat

bot = Bot(api_token='telegram bot token goes here')


@bot.command('/start')
async def start(chat: Chat, match):
    return chat.reply('Send me /square command with one float argument')


@bot.command(r"/square (.+)")
async def square_command(chat: Chat, match):
    val = match.group(1)
    try:
        val = float(val)
        square = await async_square.call(val)
        resp = f'Square for {val} is {square}'
    except:
        resp = 'Invalid number'
    return chat.reply(resp)


bot.run()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for reaction, version 20.2
Filename, size File type Python version Upload date Hashes
Filename, size reaction-20.2-py2.py3-none-any.whl (10.9 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size reaction-20.2.tar.gz (6.6 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page