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

api_keys = ['dummy-apikey-OTXEYCZNS4NBR8YA9V0PBPV4VST2FBAE3PEZDKBDXKCQ88CSTIPI5NPOLN0ZN0CG', 'dummy-apikey-4VQF9L4NFF71GAW4NTOY6EPZUSE6SVNEKW3DHBHWGZIZM8IS8VTT2ZUR75Z0VBZI']

app = SuperServerFastAPI(
    model='qwq:32b', # 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=True, # La opción de API keys ya esta disponible en FastAPI tambien 
    api_keys=api_keys, 
    enable_memory_monitor=True
)

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.99.tar.gz (78.3 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.99-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aisuperserver-0.1.99.tar.gz
  • Upload date:
  • Size: 78.3 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.99.tar.gz
Algorithm Hash digest
SHA256 c0edaab895c4a6cff68b02f32aeef1396fbd2a4c5e0f40defe245487023ce76f
MD5 7dc45564ddf6e57c3cfd2f2182608199
BLAKE2b-256 b6123adbe7a22bccc050342d367bdf07cea1e30a12a2736868d27516df397ba3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aisuperserver-0.1.99-py3-none-any.whl
  • Upload date:
  • Size: 12.9 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.99-py3-none-any.whl
Algorithm Hash digest
SHA256 484bd799b0d17d4285cbc44c5c336a626bc8ec6d010a69d49f7ffe7ee36c84d3
MD5 5b86b9706761a687b9672d828c68fff2
BLAKE2b-256 d6a126e6d8bc888592640f1aba52776232250b1ff004600f9936c52bc6b72310

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