PyWeb AI Moderator API (V2)

Методы API

/api/v2/predict/text - Классификация текста

Классифицирует текст с помощью выбранной модели

Входные данные:

{
    "api_token": "string",
    "text": "string",
    "model": "string" // опционально
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "class": 0,
    "time_taken": 0.15,
    "class_names": {
        "0": "clean",
        "1": "spam"
    },
    "confidence": 0.95,
    "unique_id": "string",
    "balance": 100.0,
    "tokens_count": 128,
    "price": 0.001
}
import aiohttp
import asyncio

async def predict_text():
    url = "https://moderator.pysols.ru/api/v2/predict/text"
    payload = {
        "api_token": "your_api_token",
        "text": "текст для проверки",
        "model": "bert"  # опционально
    }
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=payload) as response:
            print(await response.json())

asyncio.run(predict_text())
curl -X POST https://moderator.pysols.ru/api/v2/predict/text \
-H "Content-Type: application/json" \
-d '{"api_token": "your_api_token", "text": "текст для проверки", "model": "bert"}'
/api/v2/predict/profile - Классификация профиля

Классифицирует профиль пользователя на предмет спама

Входные данные:

{
    "api_token": "string",
    "username": "string",
    "first_name": "string",
    "last_name": "string", // опционально
    "description": "string", // опционально
    "channel_title": "string", // опционально
    "is_premium": false,
    "model": "string" // опционально
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "class": 0,
    "time_taken": 0.15,
    "class_names": {
        "0": "clean",
        "1": "suspicious"
    },
    "confidence": 0.95,
    "unique_id": "string",
    "balance": 100.0,
    "tokens_count": 128,
    "price": 0.001
}
import aiohttp
import asyncio

async def predict_profile():
    url = "https://moderator.pysols.ru/api/v2/predict/profile"
    payload = {
        "api_token": "your_api_token",
        "username": "user123",
        "first_name": "John",
        "last_name": "Doe",
        "description": "Bio text",
        "channel_title": "Channel title",
        "is_premium": False,
        "model": "bert"  # опционально
    }
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=payload) as response:
            print(await response.json())

asyncio.run(predict_profile())
curl -X POST https://moderator.pysols.ru/api/v2/predict/profile \
-H "Content-Type: application/json" \
-d '{"api_token": "your_api_token", "username": "user123", "first_name": "John", "last_name": "Doe", "description": "Bio text", "channel_title": "Channel title", "is_premium": false}'
/api/v2/predict/image - Классификация изображения

Классифицирует изображение с помощью выбранной модели (например, для определения NSFW контента)

Входные данные:

{
    "api_token": "string",
    "image": "string", // изображение в формате base64
    "model": "string" // опционально
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "class": 0,
    "time_taken": 0.15,
    "class_names": {
        "0": "safe",
        "1": "nsfw"
    },
    "confidence": 0.95,
    "balance": 100.0,
    "price": 0.001
}
import aiohttp
import asyncio
import base64

async def predict_image():
    url = "https://moderator.pysols.ru/api/v2/predict/image"
    
    # Читаем изображение и конвертируем в base64
    with open("image.jpg", "rb") as image_file:
        image_data = base64.b64encode(image_file.read()).decode()
    
    payload = {
        "api_token": "your_api_token",
        "image": image_data,
        "model": "nsfw_detector"  # опционально
    }
    
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=payload) as response:
            print(await response.json())

asyncio.run(predict_image())
curl -X POST https://moderator.pysols.ru/api/v2/predict/image \
-H "Content-Type: application/json" \
-d '{
    "api_token": "your_api_token",
    "image": "base64_encoded_image_data",
    "model": "nsfw_detector"
}'
/api/v2/predict/ocr - Извлечение текста из изображения

Извлекает текст из изображения с помощью OCR

Входные данные:

{
    "api_token": "string",
    "image": "string" // изображение в формате base64
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "text": "extracted text",
    "num_of_pixels": 12345,
    "price": 0.001,
    "balance": 100.0,
    "time_taken": 0.01
}
import aiohttp
import asyncio
import base64

async def extract_text():
    url = "https://moderator.pysols.ru/api/v2/predict/ocr"
    
    # Читаем изображение и конвертируем в base64
    with open("image.jpg", "rb") as image_file:
        image_data = base64.b64encode(image_file.read()).decode("utf-8")
    
    payload = {
        "api_token": "your_api_token",
        "image": image_data
    }
    
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=payload) as response:
            print(await response.json())

asyncio.run(extract_text())
curl -X POST https://moderator.pysols.ru/api/v2/predict/ocr \
-H "Content-Type: application/json" \
-d '{
    "api_token": "your_api_token",
    "image": "base64_encoded_image_data"
}'
/api/v2/predict/multimodal_text - Мультимодальная классификация

Классифицирует текст и изображения

Входные данные:

{
    "api_token": "string",
    "text": "string", // опционально
    "images": ["string"], // массив изображений в формате base64
    "model": "string" // опционально
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "class": 0,
    "time_taken": 0.15,
    "class_names": {
        "0": "clean",
        "1": "spam"
    },
    "confidence": 0.95,
    "unique_id": "string",
    "balance": 100.0,
    "tokens_count": 128,
    "price": 0.001
}
import aiohttp
import asyncio
import base64

async def predict_multimodal():
    url = "https://moderator.pysols.ru/api/v2/predict/multimodal_text"
    
    # Читаем изображения и конвертируем в base64
    images = []
    for image_path in ["image1.jpg", "image2.jpg"]:
        with open(image_path, "rb") as image_file:
            image_data = base64.b64encode(image_file.read()).decode()
            images.append(image_data)
    
    payload = {
        "api_token": "your_api_token",
        "text": "текст для проверки", # опционально
        "images": images,
        "model": "bert"  # опционально
    }
    
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=payload) as response:
            print(await response.json())

asyncio.run(predict_multimodal())
curl -X POST https://moderator.pysols.ru/api/v2/predict/multimodal_text \
-H "Content-Type: application/json" \
-d '{
    "api_token": "your_api_token",
    "text": "текст для проверки",
    "images": ["base64_encoded_image_data1", "base64_encoded_image_data2"],
    "model": "bert"
}'
/api/v2/stats - Получение статистики использования

Возвращает статистику использования API за определенный период

Входные данные:

{
    "api_token": "string",
    "limit": 10 // опционально
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "stats": [
        {
            "date": "2024-03-20",
            "money_spent": 0.15,
            "queries": 100
        }
    ],
    "date_format": "YYYY-MM-DD"
}
import aiohttp
import asyncio

async def get_stats():
    url = "https://moderator.pysols.ru/api/v2/stats"
    payload = {
        "api_token": "your_api_token",
        "limit": 10  # опционально
    }
    async with aiohttp.ClientSession() as session:
        async with session.get(url, json=payload) as response:
            print(await response.json())

asyncio.run(get_stats())
curl -X GET https://moderator.pysols.ru/api/v2/stats \
-H "Content-Type: application/json" \
-d '{"api_token": "your_api_token", "limit": 10}'
/api/v2/key - Получение информации о ключе API

Возвращает информацию о балансе API ключа

Входные данные:

{
    "api_token": "string"
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "balance": 100.0
}
import aiohttp
import asyncio

async def get_key_info():
    url = "https://moderator.pysols.ru/api/v2/key"
    payload = {
        "api_token": "your_api_token"
    }
    async with aiohttp.ClientSession() as session:
        async with session.get(url, json=payload) as response:
            print(await response.json())

asyncio.run(get_key_info())
curl -X GET https://moderator.pysols.ru/api/v2/key \
-H "Content-Type: application/json" \
-d '{"api_token": "your_api_token"}'
/api/v2/prediction - Получение результата предсказания по ID

Возвращает результат предыдущего предсказания по его unique_id

Входные данные:

{
    "api_token": "string",
    "unique_id": "string"
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "text": "string",
    "class": 0,
    "confidence": 0.95,
    "model": "string"
}
import aiohttp
import asyncio

async def get_prediction():
    url = "https://moderator.pysols.ru/api/v2/prediction"
    payload = {
        "api_token": "your_api_token",
        "unique_id": "prediction_id"
    }
    async with aiohttp.ClientSession() as session:
        async with session.get(url, json=payload) as response:
            print(await response.json())

asyncio.run(get_prediction())
curl -X GET https://moderator.pysols.ru/api/v2/prediction \
-H "Content-Type: application/json" \
-d '{"api_token": "your_api_token", "unique_id": "prediction_id"}'
/api/v2/ips - Получение списка IP адресов

Возвращает список IP адресов, с которых были запросы с данным API ключом

Входные данные:

{
    "api_token": "string"
}

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "ips": ["127.0.0.1", "192.168.1.1"]
}
import aiohttp
import asyncio

async def get_ips():
    url = "https://moderator.pysols.ru/api/v2/ips"
    payload = {
        "api_token": "your_api_token"
    }
    async with aiohttp.ClientSession() as session:
        async with session.get(url, json=payload) as response:
            print(await response.json())

asyncio.run(get_ips())
curl -X GET https://moderator.pysols.ru/api/v2/ips \
-H "Content-Type: application/json" \
-d '{"api_token": "your_api_token"}'
/api/v2/price - Получение информации о ценах и моделях

Возвращает информацию о доступных моделях и их ценах
*Цены для текстовых моделей указаны за 128 токенов

Выходные данные:

{
    "ok": true,
    "code": 200,
    "message": "Ok",
    "text_classification": [
        {
            "name": "string",
            "price": 0.0,
            "class_names": {
                "0": "clean",
                "1": "spam"
            }
        }
    ],
    "image_classification": [],
    "profile_classification": []
}
import aiohttp
import asyncio

async def get_prices():
    url = "https://moderator.pysols.ru/api/v2/price"
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            print(await response.json())

asyncio.run(get_prices())
curl https://moderator.pysols.ru/api/v2/price

Коды состояния

Код Описание
200 Успешное выполнение запроса
400 Неверный JSON или неверная модель
401 Неверный API токен
402 Недостаточно средств на балансе
403 Доступ запрещен
404 Маршрут не найден или предсказание не найдено
500 Внутренняя ошибка сервера

Полезные ссылки

PyPI
Управление API ключом
Бот с использованием данного API