Arquitectura
GurzBrain está diseñado con el patrón thin-client + central brain: múltiples instalaciones pueden distribuirse (clientes), pero la inteligencia (pesos del modelo, aprendizaje colectivo) se mantiene centralizada en gurzbrain.ai.
Stack
┌─────────────────────────────────────────────┐
│ Cliente (self-hosted en tenant) │
│ ├─ Laravel 13 + PHP 8.3 (LSPHP83) │
│ ├─ UI web + dashboard + chat │
│ ├─ RAG local (SQLite + BLOB embeddings) │
│ ├─ Approval queue + audit log │
│ ├─ Queue workers (Redis) │
│ └─ Phone-home cada 24h │
│ │
│ ↓ HTTPS + Bearer token │
│ │
│ Nuestro infra (api.gurzbrain.ai) │
│ ├─ API Gateway (auth, rate limit, bill) │
│ ├─ LLM farm (Ollama + fine-tuned LoRA) │
│ ├─ Telemetry ingest (opt-in) │
│ ├─ Fine-tune pipeline (weekly) │
│ └─ Model versioning (v1, v2, v3...) │
└─────────────────────────────────────────────┘
Componentes del cliente
Agent Runner
Loop agentic con persistence. Ciclo: prompt → selección tool → ejecución → respuesta → iterar hasta done o max_iterations.
LLM Router
Clasifica cada prompt y escoge perfil del modelo (fast=3B, smart=8B, code=code-llama, vision=llava, embed=nomic-embed-text).
Tool Registry
24 tools organizadas en 2 tiers: - Read-only (ejecución directa): read_hub_doctor, db_query, rag_search, code_search, etc. - Destructive (requiere approval): ssh_run, deploy_site, send_resend_email, write_memory, bulk_pattern_apply, cloudflare_dns
Persona Registry
11 presets que configuran model_profile + temperature + tools_allowed/denied + system prompt.
Services
- AuditLog: cada acción (actor/action/target/result/detail) persistida
- EventBus: Redis Streams pub/sub cross-site
- PromptLibrary: 32 prompts canónicos con variables
- WorkflowRunner: YAML declarativo con interpolación
{{ step.field }} - SmartNotifyService: dispatcher email/push/inapp con quiet hours + rate limit
- FeatureFlagService: toggles con rollout % + rules + A/B variants
- TenantService: multi-tenancy, API keys SHA256, quotas, phone-home
Flujo de aprendizaje colectivo
- Cliente ejecuta prompt localmente
- Si tenant opt-in: prompt + respuesta se loguean anonimizados en nuestros servers
- Pipeline
gurzbrain:dataset:buildprocesa ejemplos semanalmente - Fine-tune LoRA en RunPod (~$30-50/sesión)
- Nueva versión de pesos → todos los tenants mejoran al actualizar cliente
Datos privados vs compartidos
| Tipo | Donde vive | Compartido |
|---|---|---|
| Memory (feedback/project files) | DB tenant | No |
| Conversations | DB tenant | No (anónimas opt-in sí) |
| Approvals | DB tenant | No |
| Audit log | DB tenant | No |
| web_knowledge (RAG web nutrition) | DB global | Sí (todos los tenants) |
| Fine-tune dataset | Nuestros servers | Agregado anónimo |
| Model weights | Nuestros servers | Nunca sale |