Documentación de la API
Usa tu clave API para generar código Python desde prompts en español. Rate limit: 5.000/mes. IP lock activado.
Endpoint
POST https://isomorfo.ai/api/generateHeaders requeridos
Authorization: Bearer sk_early_xxxxxxxxxxxxxxxx
Content-Type: application/jsonEjemplo con curl
curl -X POST https://isomorfo.ai/api/generate \
-H "Authorization: Bearer TU_CLAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Escribe una función Python que valide un email"
}'Uso en Python (recomendado)
import requests
API_KEY = "sk_early_tuclaveaquí"
URL = "https://isomorfo.ai/api/generate"
def generar_codigo(prompt: str) -> str:
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {"prompt": prompt}
response = requests.post(URL, headers=headers, json=data)
if response.status_code == 200:
return response.json()["result"]
else:
return f"Error {response.status_code}: {response.json().get('error', 'Desconocido')}"
# Ejemplo
print(generar_codigo("Crea una función que invierta una cadena"))pip install requests
Respuesta esperada
{
"result": "def invertir_cadena(s: str) -> str:\n return s[::-1]"
}Concatenación de Prompts (Iterativo)
El modelo soporta memoria de conversación. Cada prompt se concatena al historial anterior, permitiendo iteraciones sobre el mismo código.
import requests
API_KEY = "sk_early_tuclaveaquí"
URL = "https://isomorfo.ai/api/generate"
class IsomorfoClient:
"""Cliente con historial para concatenación de prompts"""
def __init__(self, api_key: str, user_id: str = "default"):
self.api_key = api_key
self.user_id = user_id
self.history = []
def generate(self, prompt: str, use_history: bool = True) -> str:
"""Genera código con contexto del historial"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
data = {
"prompt": prompt,
"user_id": self.user_id,
"use_history": use_history
}
response = requests.post(URL, headers=headers, json=data)
if response.status_code == 200:
result = response.json()["result"]
if use_history:
self.history.append({"prompt": prompt, "response": result})
return result
else:
return f"Error: {response.json().get('error', 'Desconocido')}"
def clear_history(self):
"""Limpia el historial local"""
self.history = []
# ========== EJEMPLO DE USO ITERATIVO ==========
client = IsomorfoClient(API_KEY, user_id="mi_proyecto_123")
# Iteración 1: Crear función base
code1 = client.generate("Crea una clase Usuario con nombre y email")
print("V1:", code1)
# Iteración 2: El modelo recuerda la clase anterior
code2 = client.generate("Añade un método validar_email a la clase")
print("V2:", code2)
# Iteración 3: Sigue recordando todo el contexto
code3 = client.generate("Añade un método __str__ que muestre los datos")
print("V3:", code3)Múltiples Funciones de Generación
Implementa diferentes estrategias de generación según tu caso de uso:
import requests
from typing import Optional, List
API_KEY = "sk_early_tuclaveaquí"
URL = "https://isomorfo.ai/api/generate"
PROMPT_SEP = "\n\n###\n\n"
class IsomorfoMultiGen:
"""Múltiples modos de generación de código"""
def __init__(self, api_key: str):
self.api_key = api_key
self.sessions = {} # Historiales por sesión
def _call_api(self, prompt: str, user_id: str = "default") -> str:
"""Llamada base a la API"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
data = {"prompt": prompt, "user_id": user_id}
response = requests.post(URL, headers=headers, json=data)
return response.json().get("result", "Error")
# ========== MODO 1: GENERACIÓN SIMPLE ==========
def generate_single(self, prompt: str) -> str:
"""Sin historial - cada llamada es independiente"""
return self._call_api(prompt)
# ========== MODO 2: GENERACIÓN CON SESIÓN ==========
def generate_with_session(self, prompt: str, session_id: str) -> str:
"""Mantiene historial por sesión"""
if session_id not in self.sessions:
self.sessions[session_id] = []
# Concatenar historial
history = PROMPT_SEP.join(self.sessions[session_id])
full_prompt = f"{history}{PROMPT_SEP}{prompt}" if history else prompt
result = self._call_api(full_prompt, user_id=session_id)
self.sessions[session_id].append(f"{prompt}{PROMPT_SEP}{result}")
return result
# ========== MODO 3: GENERACIÓN EN CADENA ==========
def generate_chain(self, prompts: List[str], session_id: str = "chain") -> List[str]:
"""Ejecuta múltiples prompts en secuencia, cada uno ve el anterior"""
results = []
for prompt in prompts:
result = self.generate_with_session(prompt, session_id)
results.append(result)
return results
# ========== MODO 4: REFINAMIENTO ITERATIVO ==========
def refine(self, initial_prompt: str, refinements: List[str],
session_id: str = "refine") -> str:
"""Genera código inicial y lo refina iterativamente"""
# Limpiar sesión
self.sessions[session_id] = []
# Código base
result = self.generate_with_session(initial_prompt, session_id)
# Aplicar refinamientos
for refinement in refinements:
result = self.generate_with_session(refinement, session_id)
return result
# ========== MODO 5: FORK DE SESIÓN ==========
def fork_session(self, source_id: str, new_id: str) -> None:
"""Copia el historial de una sesión a otra (branching)"""
if source_id in self.sessions:
self.sessions[new_id] = self.sessions[source_id].copy()
def clear_session(self, session_id: str) -> None:
"""Limpia una sesión específica"""
if session_id in self.sessions:
del self.sessions[session_id]
# ========== EJEMPLOS DE USO ==========
gen = IsomorfoMultiGen(API_KEY)
# MODO 1: Simple (sin memoria)
print(gen.generate_single("función fibonacci"))
# MODO 2: Con sesión (memoria por proyecto)
print(gen.generate_with_session("clase Producto con precio", "ecommerce"))
print(gen.generate_with_session("añade método aplicar_descuento", "ecommerce"))
# MODO 3: Cadena de prompts
results = gen.generate_chain([
"crea clase Calculadora",
"añade método sumar",
"añade método restar",
"añade método historial de operaciones"
], session_id="calc")
# MODO 4: Refinamiento iterativo
final = gen.refine(
"API REST básica con Flask",
[
"añade autenticación JWT",
"añade validación de inputs",
"añade manejo de errores",
"añade logging"
]
)
# MODO 5: Branching (fork)
gen.fork_session("ecommerce", "ecommerce_v2")
print(gen.generate_with_session("añade carrito de compras", "ecommerce_v2"))Flujo de Concatenación
┌─────────────────────────────────────────────────────────────┐
│ FLUJO DE CONCATENACIÓN │
└─────────────────────────────────────────────────────────────┘
Prompt 1 Prompt 2 Prompt 3
│ │ │
▼ ▼ ▼
┌─────────┐ ┌───────────────┐ ┌─────────────────────┐
│ "clase │ │ historial + │ │ historial + │
│ Usuario"│ ───► │ "añade método"│───►│ "añade validación" │
└─────────┘ └───────────────┘ └─────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌───────────────┐ ┌─────────────────────┐
│ class │ │ class Usuario │ │ class Usuario: │
│ Usuario:│ │ + método │ │ + método │
│ ... │ │ validar() │ │ + validación │
└─────────┘ └───────────────┘ └─────────────────────┘
SEPARADOR: "\n\n###\n\n"
HISTORIAL GUARDADO:
prompt1 ### response1 ### prompt2 ### response2 ### ...
VENTANA DESLIZANTE:
- Máximo ~1536 tokens de historial
- Los prompts más antiguos se descartan automáticamenteParámetros de la API
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
| prompt | string | requerido | El prompt de generación |
| user_id | string | "default" | ID único para mantener historial separado |
| use_history | boolean | true | Si concatena historial previo |
| clear_history | boolean | false | Limpia historial antes de generar |