Skip to main content

Es un experimento simple para crear una interfaz simple y rápida de server de Inferencia en Local

Project description

AISuperServer

AISuperServer Logo

AISuperServer es un servidor de inferencia local potente y fácil de usar, diseñado para ejecutar modelos de IA con Ollama. Proporciona una API REST robusta construida con Flask o FastAPI que permite:

  • 🚀 Despliegue rápido de modelos de IA locales
  • 🔑 Autenticación configurable mediante API keys
  • 📡 Soporte para respuestas en streaming
  • 🖼️ Capacidades multimodales para procesamiento de imágenes
  • 🛠️ Configuración flexible y monitoreo de recursos

Perfecto para desarrolladores que necesitan una solución ligera y eficiente para servir modelos de IA localmente.

Instalación via Pypi

pip install AISuperServer

Inicio rápido

Instalación de Ollama

macOS

Descargar

Windows

Descargar

Linux

curl -fsSL https://ollama.com/install.sh | sh

Instrucciones de instalación manual

Descarga del modelo a usar

Ollama pull <modelo a usar>

Levantar tu servidor

from AISuperServer import SuperServerFlask

app = SuperServerFlask(
    model='deepseek-r1', # Recuerda que aqui vas a usar el modelo que descargaste anteriormente con el Ollama pull
    stream=True,
    port=8080, # Recuerda el puerto donde haz configurado tu servidor para hacer las peticiones
    api_key_required=False,
    enable_memory_monitor=True
)

Levantar tu servidor con FastAPI

from AISuperServer import SuperServerFastAPI

app = SuperServerFastAPI(
    model='deepseek-r1', # Recuerda que aqui vas a usar el modelo que descargaste anteriormente con el Ollama pull
    stream=True,
    port=8080, # Recuerda el puerto donde haz configurado tu servidor para hacer las peticiones
    threads=3,
    api_key_required=False, # El uso de API Keys aún no esta implementado en la versión de FastAPI
    enable_memory_monitor=True
)

# Para hacer las request puedes usar los ejemplos en los archivos de testrequest.py tambien con la versión multimodal
# Tambien con el cliente API de SuperServer
# Y hay unos errores raros al hacer peticiones a la API de inferencia desde el Swagger UI

Asi de facil es levantar tu servidor de inferencia local con AISuperServer en menos de 20 lineas de código

Peticiones a tu servidor

API de health

import requests
import json
import sys

def test_healt():
    x = requests.get('http://0.0.0.0:8080/api/health')
    return x.json()

health = test_healt()
print(health)

API de query a tu modelo

import requests
import json
import sys

def test_query():
    url = 'http://0.0.0.0:8080/api/inference'
    payload = { "query": "Oye haz la función de fibonacci en TypeScript",
                "system_prompt": "Eres un asistente útil y conciso.",
                "stream": False}
    x = requests.post(url, json=payload)
    return x.json()

query = test_query()
print(query)

API de query a tu modelo con respuesta en Stream

import requests
import json
import sys

def test_query_stream():
    url = 'http://0.0.0.0:8080/api/inference'
    payload = {
        "query": "Oye haz la función de fibonacci en TypeScript",
        "system_prompt": "Eres un asistente útil y conciso.",
        "stream" : True
    }
  
    # Usar stream=True en la petición para recibir la respuesta por partes
    response = requests.post(url, json=payload, stream=True)
  
    if response.status_code == 200:
        # Procesar la respuesta SSE línea por línea
        for line in response.iter_lines():
            if line:
                # Las líneas SSE comienzan con "data: "
                line = line.decode('utf-8')
                if line.startswith('data:'):
                    # Extraer el JSON después de "data: "
                    json_str = line[6:]  # Saltamos los primeros 6 caracteres ("data: ")
                    try:
                        chunk_data = json.loads(json_str)
                        chunk = chunk_data.get('chunk', '')
                        sys.stdout.write(chunk)
                        sys.stdout.flush()
                    except json.JSONDecodeError as e:
                        print(f"Error decodificando JSON: {e}")
    else:
        print(f"Error: {response.status_code}")
        try:
            print(response.json())
        except:
            print(response.text)

query = test_query_stream()
print(query)

Cliente API de SuperServer

Cliente API con modelos de Texto

from AISuperServer import SuperServerClient

dummy_api_key = 'dummy-apikey-OTXEYCZNS4NBR8YA9V0PBPV4VST2FBAE3PEZDKBDXKCQ88CSTIPI5NPOLN0ZN0CG'

client = SuperServerClient(api_key=dummy_api_key)
# Toma en cuenta que si tu servidor es levantado en un host y puerto diferente al '0.0.0.0:8080'
# Debes configuraro en el SuperServerClient algo asi: SuperServerClient(host='Tu host', port= 'Tu puerto')
# Y se ha configurado al api_key porque el servidor que levantamos para probar el cliente lo configuramos con api_key
query = client.Query('Oye explicame la secuencia de Fibonacci, como si se lo explicara a un niño pequeño', stream=True)

Cliente API con modelos multimodales

from AISuperServer import SuperServerClient
from pathlib import Path

dummy_api_key = 'dummy-apikey-OTXEYCZNS4NBR8YA9V0PBPV4VST2FBAE3PEZDKBDXKCQ88CSTIPI5NPOLN0ZN0CG'

client = SuperServerClient(api_key=dummy_api_key, multimodal=True)

image_path = Path("Logo.png").resolve()

image_path = str(image_path)

print(image_path)

query = client.Query('Oye describe la imagen y dime que hay de llamativo y de que producto puede ser la imagen', image_path=image_path, stream=True)

# Toma en cuenta que si tu servidor es levantado en un host y puerto diferente al '0.0.0.0:8080'
# Debes configuraro en el SuperServerClient algo asi: SuperServerClient(host='Tu host', port= 'Tu puerto')
# Y se ha configurado al api_key porque el servidor que levantamos para probar el cliente lo configuramos con api_key

Documentación 📚

Documentación Detallada

En la carpeta /tests encontrarás ejemplos completos y documentación detallada sobre:

  • 🔧 Configuración avanzada del servidor
  • 🔑 Implementación de autenticación con API keys
  • 🔄 Manejo de respuestas en streaming
  • 🖼️ Procesamiento de imágenes (modo multimodal)
  • 📝 Ejemplos prácticos de cada funcionalidad

Donaciones 💸

Si deseas apoyar este proyecto, puedes hacer una donación a través de PayPal:

Donate with PayPal

Tu donativo permite mantener y expandir nuestros proyectos de código abierto en beneficio de toda la comunidad.

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

aisuperserver-0.1.96.tar.gz (77.9 kB view details)

Uploaded Source

Built Distribution

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

aisuperserver-0.1.96-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file aisuperserver-0.1.96.tar.gz.

File metadata

  • Download URL: aisuperserver-0.1.96.tar.gz
  • Upload date:
  • Size: 77.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.2

File hashes

Hashes for aisuperserver-0.1.96.tar.gz
Algorithm Hash digest
SHA256 0083225af45978b72ebd64a8faf54f505245c96937eaba24591a90b5cba47557
MD5 d1bd440af4038ad5be6318a2e9fe9d95
BLAKE2b-256 fd130d54e0eb46cfedb2d1e047efd9a586a63ff9ff1ea6384150234f65b67be7

See more details on using hashes here.

File details

Details for the file aisuperserver-0.1.96-py3-none-any.whl.

File metadata

  • Download URL: aisuperserver-0.1.96-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.2

File hashes

Hashes for aisuperserver-0.1.96-py3-none-any.whl
Algorithm Hash digest
SHA256 bf406e3cba2359541b72c71ef142a610e6536f30e522947c301c7f5538bea59d
MD5 12b48be61bad3aa5ddcaf9c1f088d170
BLAKE2b-256 0caea402b5ce18c5a0d3a1247386f7d7d727f1ed21d52652f72ea217314228d0

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