Es un experimento simple para crear una interfaz simple y rápida de server de Inferencia en Local
Project description
AISuperServer
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
Windows
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
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:
Tu donativo permite mantener y expandir nuestros proyectos de código abierto en beneficio de toda la comunidad.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aisuperserver-0.1.97.tar.gz.
File metadata
- Download URL: aisuperserver-0.1.97.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b6171ec8de8947c22f11a307bb9551e3ce8d4c72be4c4ffb9bc9482045d848b
|
|
| MD5 |
f4cd6cc4022f6af5e03bf6fb7a9c34d5
|
|
| BLAKE2b-256 |
a02c4ff4d452bc44f95a845486e516efc53e7d183014b424152f689437b3a252
|
File details
Details for the file aisuperserver-0.1.97-py3-none-any.whl.
File metadata
- Download URL: aisuperserver-0.1.97-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec238dd8466ebfdabe36982b9918a951626f1b0f5acf65b046354575d0db7680
|
|
| MD5 |
8b186673769f4dc3cb07b712b87277b3
|
|
| BLAKE2b-256 |
91cfa08d39cfc275ffa574176bccd74cbec65d6e42e3e02f4f98d05a81225a8a
|