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/generate

Headers requeridos

Authorization: Bearer sk_early_xxxxxxxxxxxxxxxx
Content-Type: application/json

Ejemplo 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áticamente

Parámetros de la API

ParámetroTipoDefaultDescripción
promptstringrequeridoEl prompt de generación
user_idstring"default"ID único para mantener historial separado
use_historybooleantrueSi concatena historial previo
clear_historybooleanfalseLimpia historial antes de generar