Ubuntu TechHive

Notes on my Pi setup

Notes on my Pi setup

Las herramientas principales de Pi son =read=, =bash=, =edit= y =write=. Los archivos del proyecto =AGENTS.md= proporcionan restricciones específicas para el repositorio.

Notas sobre mi configuración de Pi

Cómo uso Pi

Uso Pi como un asistente de codificación en terminal personalizable para inspeccionar repositorios, realizar cambios específicos y ejecutar comprobaciones. Las habilidades capturan flujos de trabajo reutilizables; las extensiones añaden delegación, investigación, retroceso (rewind) y objetivos persistentes.

Mi CLI instalada es Pi 1.5.2. En ~/.pi/agent/settings.json, mi valor predeterminado es openai-codex/gpt-6.1-sol con pensamiento xhigh, tema oscuro y bloques de pensamiento ocultos. Ocultar esos bloques cambia la presentación, no el esfuerzo de razonamiento. Estas son selecciones de modelos configuradas, no garantías de disponibilidad del proveedor.

cd /path/to/project
pi
# Dentro de Pi: /login, /model, /reload

Las herramientas principales de Pi son read, bash, edit y write. Los archivos AGENTS.md del proyecto proporcionan restricciones específicas del repositorio. Las extensiones ejecutan integraciones; las habilidades proporcionan instrucciones específicas de la tarea que se cargan cuando son relevantes.

Extensiones instaladas

Estos paquetes se declaran en mi configuración de usuario y se instalan en ~/.pi/agent/npm/node_modules/. Las versiones a continuación describen la configuración inspeccionada, no fijaciones permanentes: mis declaraciones de paquetes usan fuentes npm: sin versión.

Paquete Instalado Mi uso
pi-subagents 0.88.1 Trabajadores enfocados, revisores independientes, asesores y auditoría de alcance.
pi-web-access 0.47.0 Búsqueda web, verificación de fuentes, extracción de páginas/PDF, investigación de repositorios y videos.
pi-rewind-hook 1.8.8 Puntos de control de archivos respaldados por Git asociados con el historial de la sesión; restaurar mediante /tree o /fork.
pi-goal-x 0.34.1 Objetivos persistentes explícitos, progreso de tareas, pausa/reanudar y auditoría de finalización opcional.

Mi configuración de extensions contiene "-builtin:mcp": la integración MCP incorporada de Pi está deshabilitada. Las capacidades a continuación provienen de la documentación de las extensiones instaladas; no implican que todas las funciones opcionales estén habilitadas en mi configuración.

pi-subagents: trabajo enfocado y juicio independiente

La delegación requiere mi solicitud o instrucciones aplicables, no solo complejidad. subagents_enable expone las herramientas de delegación cuando es necesario. Un hijo en primer plano se ejecuta como una sesión dentro del proceso padre; un hijo en segundo plano usa un ejecutor desconectado. Cada uno recibe su propia tarea, contexto, herramientas y selección de modelo.

Separo al trabajador de implementación de la revisión/asesoramiento de solo lectura y la auditoría de alcance (ver la tabla de roles a continuación). Las revisiones independientes pueden ejecutarse en paralelo; la implementación mantiene un escritor por árbol de trabajo. contact_supervisor lleva decisiones de puntos de control y actualizaciones significativas de vuelta al coordinador. /subagents-fleet inspecciona el trabajo en ejecución; /subagents-doctor diagnostica la configuración.

Ejemplos de solicitudes (no actividad automática en segundo plano):

Usa el revisor para comprobar este cambio frente a mis requisitos sin editar.
Pide al oráculo que desafíe este plan antes de la implementación.

pi-web-access: investigación con evidencia inspeccionable

web_enable carga las herramientas de investigación bajo demanda:

  • web_search: buscar o realizar consultas relacionadas por lotes; workflow: "none" devuelve resultados sin una llamada de generación de resumen separada o navegador curador.
  • fetch_content: recuperar páginas, PDF, repositorios o contenido de video compatible. El procesamiento en modo respuesta es una interacción de modelo separada y opcional.
  • get_search_content: paginar a través de resultados almacenados o encontrar pasajes exactos usando un responseId, en lugar de recuperar repetidamente el mismo material.
  • source_check: recopilar pasajes y metadatos de origen para la revisión manual de afirmaciones; la recuperación por sí sola no establece que una afirmación sea verdadera.

Las búsquedas/recuperaciones pueden enviar datos a servicios externos. Mantengo las credenciales, fuentes privadas y detalles de proyectos no relacionados fuera de las consultas de investigación y ejemplos.

pi-rewind-hook: los archivos y la conversación se pueden restaurar por separado

A través de /fork, puedo mantener archivos mientras bifurco la conversación, restaurar ambos, o restaurar código mientras mantengo la conversación. /tree ofrece una restauración exacta de archivos donde existe un punto de control, además de deshacer cuando está disponible.

Los puntos de control pertenecen a los límites de turno de prompt/asistente, no a cada llamada de herramienta. El libro mayor de la sesión los registra; Git mantiene objetos de instantánea accesibles a través de refs/pi-rewind/store. La cobertura incluye archivos rastreados y no rastreados no ignorados, no archivos ignorados o directorios vacíos. Esto complementa las confirmaciones (commits) normales. No tengo ninguna anulación de rewind.retention: el valor predeterminado documentado es sin expiración automática, por lo que el almacenamiento de instantáneas puede crecer.

pi-goal-x: trabajo explícito y persistente

/goal discute un resultado y confirma un plan antes de la ejecución; /sisyphus sigue pasos ordenados. Los objetivos, tareas y progreso persisten entre sesiones. /goal-direct evita la redacción solo cuando lo elijo explícitamente.

/goal-status muestra el progreso, /goal-pause detiene la continuación automática, /goal-resume continúa y /goal-tweak revisa el objetivo o plan. La auditoría de finalización opcional utiliza un agente separado para verificar los requisitos y la evidencia; su disponibilidad no es una afirmación de que la haya habilitado. Las tareas ordinarias no se convierten implícitamente en objetivos.

Mis habilidades

Solo commit-msg reside en ~/.pi/agent/skills/. Pi también descubre el directorio compartido ~/.agents/skills/, donde viven mis otras habilidades personales/instaladas por herramientas.

Ubicación / habilidad Propósito
~/.pi/agent/skills/commit-msg Mensajes de commit en tiempo pasado y multilínea en el estilo develop del repositorio, basados solo en cambios inspeccionados; sin mutaciones de Git.
~/.agents/skills/implementation-steps Cursos de reconstrucción práctica en scratch/implementation_steps/, con código de trabajo acumulativo y verificación.
~/.agents/skills/lightpanda Extracción de DOM consciente de JavaScript y automatización funcional del navegador; no es evidencia de fidelidad de diseño visual.
~/.agents/skills/rex Controlar sesiones, pestañas, paneles, comandos y salida de terminal de Rex a través de su CLI.
~/.agents/skills/ui-sdk Construir y probar interfaces accesibles basadas en comportamiento usando @ui-sdk/*.
~/.agents/skills/ui-ux-a11y Aplicar las reglas empaquetadas de UI/UX, WCAG 2.2 AA, accesibilidad, contraste y validación.

El paquete de subagentes también proporciona pi-subagents para la orquestación y council-mode para el debate de asesores limitado y de solo lectura; estas son habilidades empaquetadas.

Ejemplo de invocación dentro de Pi:

/skill:commit-msg staged files

Extractos de habilidades integradas

Estas son selecciones literales de mis seis archivos SKILL.md personales/instalados por herramientas, no definiciones de habilidades sustitutas. Los archivos de soporte y las rutas relativas aún pertenecen a cada directorio de habilidad original. La entrada corta de Rex se incluye completa; las habilidades más largas se extraen para mantener estas notas legibles.

commit-msg: evidencia antes de la redacción

Fuente: ~/.pi/agent/skills/commit-msg/SKILL.md, “Contrato principal”.

El mensaje de commit generado DEBE:

1. Coincidir con el estilo y formato de los commits recientes de la rama `develop`.
2. Usar tiempo pasado.
3. Ser multilínea.
4. Basarse únicamente en los cambios de archivo inspeccionados de la entrada solicitada.
5. Evitar afirmaciones que no estén respaldadas por los datos de diff/stat/name-status.
6. Evitar reutilizar un asunto de marcador de posición como `WIP` de los commits de destino.
7. Evitar mutar el estado de git; esta habilidad es de solo lectura.

implementation-steps: código de trabajo y enseñabilidad

Fuente: ~/.agents/skills/implementation-steps/SKILL.md, contrato de apertura.

Producir un curso de implementación práctica para el objetivo seleccionado. Cada etapa numerada
incluye código fuente de trabajo real y su propio README detallado. Un estudiante que
siga los pasos documentados debe entender lo que está escribiendo y por qué, y
llegar exactamente al código objetivo capturado. La corrección técnica, la igualdad exacta de la fuente
y la enseñabilidad son requisitos separados; ninguno sustituye a otro.

Este flujo de trabajo es independiente del lenguaje y el marco. Inspeccione el objetivo en lugar
de imponer un tiempo de ejecución, arquitectura, número fijo de etapas o elecciones de implementación
de tareas anteriores. Cree los artefactos de aprendizaje; deje el objetivo sin cambios.

lightpanda: extracción limitada, evidencia apropiada

Fuente: ~/.agents/skills/lightpanda/SKILL.md, “CLI y automatización persistente”.

Para una URL autorizada conocida, comience con una extracción limitada:

```zsh
lightpanda fetch --dump markdown --dump-max-bytes 12000 --fail-on-http-error 'http://127.0.0.1:PORT/PATH'
```

Reemplace la URL con una URL de aplicación observada. Use `--dump html` para marcado o `--dump semantic_tree_text` para un árbol semántico compacto. Inspeccione el estado del comando y los errores; un volcado por sí solo no es prueba de una navegación o interacción exitosa.

rex: guía de carga desde la CLI instalada

Fuente: ~/.agents/skills/rex/SKILL.md, archivo completo.

---
name: rex
description: Use el CLI de rex para gestionar sesiones de Rex, abrir pestañas, organizar paneles, ejecutar comandos, inspeccionar la salida de la terminal y controlar aplicaciones de Rex conectadas.
metadata:
  rex-stub: "2"
---


Ejecute `rex __internal skill` y siga la guía que imprime. La guía proviene
de la CLI de Rex instalada, por lo que describe los comandos disponibles en esa versión.

Si el comando falla, la versión de Rex instalada es anterior a la guía. Comience con
`rex whoami --json`, luego use `rex --help` y `rex COMMAND --help`.

ui-sdk: usar documentación que coincida con la versión

Fuente: ~/.agents/skills/ui-sdk/SKILL.md, “Leer primero”.

La documentación para la versión instalada se envía en cada paquete, como Markdown:

- `node_modules/@ui-sdk//docs/llms.txt` es el índice. Léalo primero. `` es `react`, `vue`, `svelte`, `solid` o `web`.
- Luego lea solo las páginas que su tarea necesite, como `docs/components/select.md`. No lea toda la carpeta `docs/`; es grande.
- Una interfaz construida a partir de nuestros componentes no necesita `docs/core.md`. Solo la ruta 2 a continuación lo hace, e incluso entonces la busca por encabezado: tiene más de 300 KB. `docs/rendering.md` se encuentra junto a ella en la misma carpeta `docs/`.
- No lea JavaScript compilado en `dist/*.js`, incluso para depurar. La documentación y los tipos `.d.ts` son la API; cuando no respondan, escriba una pequeña prueba que lo intente.

Aquí “ruta 2” significa construir un componente/comportamiento faltante desde @ui-sdk/core, en lugar de componer componentes existentes.

ui-ux-a11y: preservar autoridad y alcance

Fuente: ~/.agents/skills/ui-ux-a11y/SKILL.md, “Puerta de alcance y autoridad”.

Antes de editar o aprobar el trabajo:

1. Identifique el alcance de implementación autorizado por el usuario, las instrucciones del repositorio y cualquier plan o criterio de aceptación aplicable en el proyecto actual.
2. Descubra e inspeccione las fuentes de verdad reales del proyecto actual: comportamiento del producto existente, referencia proporcionada por el usuario, contrato de diseño, sistema de diseño, fuente de tokens y comportamiento desplegado cuando la tarea lo requiera. No asuma ningún nombre de archivo o ruta.
3. Identifique cada ID de regla `UX-*`, `A11Y-*`, `CC-*` y `VAL-*` aplicable para las rutas, estados, configuraciones regionales, viewports, temas e interacciones afectados.
4. Registre la línea base autorizada requerida por `VAL-01` antes de la implementación. Use una línea base de referencia solo cuando la tarea o proyecto actual defina una.
5. Deténgase si falta una fuente de verdad requerida o si el cumplimiento requeriría una ruta, característica, rediseño, flujo de trabajo, dependencia, contenido, permiso o cambio de alcance del producto no aprobado.

Su carpeta completa de reglas ui_ux_a11y/ sigue siendo autoritaria; este extracto no reemplaza sus comprobaciones de accesibilidad, contraste y experiencia renderizada.

Delegación controlada

Mi subagents.agentOverrides separa la implementación del juicio. Los cuatro roles heredan el contexto del proyecto y usan por defecto un contexto de conversación nuevo (anulaciones explícitas para roles de solo lectura; el valor predeterminado incluido para el trabajador).

Rol Modelo configurado Pensamiento Responsabilidad / herramientas
worker openai-codex/gpt-6.1-sol medio Implementar puntos de control asignados; leer/buscar, bash, edit, write, contacto con supervisor.
reviewer openai-codex/gpt-6.1-sol alto Revisión de corrección y evidencia de solo lectura; solo leer/buscar y contacto con supervisor.
oracle openai-codex/gpt-6-astra medio Asesoramiento arquitectónico y verificación de suposiciones de solo lectura.
scopeCreepPatrol openai-codex/gpt-6-astra medio Trazabilidad de requisitos de solo lectura y detección de alcance no autorizado.

scopeCreepPatrol tiene su definición de agente en ~/.agents/scopecreeppatrol.md; el modelo y otras anulaciones provienen de mi configuración de Pi.

Para la implementación delegada, el coordinador enruta el trabajo, toma decisiones y mantiene el libro mayor, no el código. El trabajador verifica el código proporcionado por el asesor frente a los archivos actuales y los requisitos aprobados, informa la evidencia de validación y solicita una decisión de punto de control antes de la siguiente unidad. Los roles de solo lectura devuelven hallazgos/código correctivo en línea, no archivos. Las recomendaciones no son aprobación del usuario.

El auditor de alcance verifica las referencias de requisitos, una columna literal 1 a N, el origen del requisito y los estados exactos no-started / in-progress / deferred / completed / not-applicable; no debe inventar el significado de esa columna. Las preguntas de bloqueo usan contact_supervisor con need_decision; las actualizaciones materiales que no bloquean usan progress_update, sin charla rutinaria.

flowchart TD
    U["Requisitos y aprobaciones del usuario"] --> C["Coordinador: enrutar y rastrear"]
    C --> W["Trabajador: implementar un punto de control"]
    W --> E["Archivos cambiados y evidencia de validación"]
    E --> R["Revisor: corrección"]
    E --> S["Patrulla de alcance: trazabilidad"]
    C --> O["Oráculo: asesoramiento limitado"]
    R --> D["Coordinador: decisión de punto de control"]
    S --> D
    O --> D
    D -->|Unidad siguiente aprobada| W
    D -->|Requisitos cumplidos| F["Informe final"]

Mi configuración de subagentes

La sección completa subagents de ~/.pi/agent/settings.json está incrustada a continuación, incluyendo las cuatro anulaciones de rol y sus prompts sin cambios. El objeto JSON externo muestra dónde pertenece en la configuración; las configuraciones no relacionadas se omiten.

{
  "subagents": {
    "agentOverrides": {
      "worker": {
        "model": "openai-codex/gpt-6.1-sol",
        "thinking": "medium",
        "inheritProjectContext": true,
        "tools": [
          "read",
          "grep",
          "find",
          "ls",
          "bash",
          "edit",
          "write",
          "contact_supervisor"
        ],
        "systemPrompt": "Eres el trabajador de implementación. Implementa solo el trabajo asignado rastreable a los requisitos reales del usuario. Nunca expandas el alcance sin la aprobación previa explícita del USUARIO. Las recomendaciones del agente no son aprobación. El coordinador coordina, mantiene el libro mayor de progreso y transmite el código escrito por el agente; no debe escribir ni revisar código. Aplica el código proporcionado por el asesor solo después de verificar su aplicabilidad a los archivos actuales y los requisitos aprobados. En cada punto de control de implementación asignado, informa las referencias de requisitos, archivos cambiados, evidencia de validación, trabajo restante y actualizaciones del libro mayor necesarias; solicita la decisión del coordinador antes de comenzar la siguiente unidad de implementación. Usa contact_supervisor con el motivo need_decision para preguntas de bloqueo y decisiones de puntos de control, o progress_update para cambios materiales que requieran la atención del coordinador. No envíes narración rutinaria ni mensajes de finalización duplicados. Nunca afirmes que la validación pasó sin evidencia."
      },
      "reviewer": {
        "model": "openai-codex/gpt-6.1-sol",
        "thinking": "high",
        "inheritProjectContext": true,
        "defaultContext": "fresh",
        "tools": [
          "read",
          "grep",
          "find",
          "ls",
          "contact_supervisor"
        ],
        "systemPrompt": "Eres el revisor de implementación de solo lectura. Revisa el punto de control del trabajador asignado frente a los requisitos reales del usuario, la implementación, las pruebas y la evidencia de validación. No edites archivos ni crees archivos de parche o informe. Devuelve hallazgos accionables con referencias de requisitos, ubicaciones exactas, evidencia y código de reemplazo concreto o diffs unificados EN LÍNEA cuando sea útil. Distingue los defectos reales de las recomendaciones opcionales. No expandas ni redefinas el alcance, y nunca trates tus recomendaciones como aprobación del usuario. Informa los hallazgos de bloqueo rápidamente a través de contact_supervisor; de lo contrario, devuelve una revisión final concisa. Evita latidos, hallazgos duplicados y charla rutinaria. Identifica puntos de control obsoletos y afirmaciones de finalización no admitidas."
      },
      "oracle": {
        "model": "openai-codex/gpt-6-astra",
        "thinking": "medium",
        "inheritProjectContext": true,
        "defaultContext": "fresh",
        "tools": [
          "read",
          "grep",
          "find",
          "ls",
          "contact_supervisor"
        ],
        "systemPrompt": "Eres un asesor de solo lectura que responde a la pregunta específica asignada por el coordinador. Desafía las suposiciones no admitidas, identifica riesgos arquitectónicos o de corrección, y distingue hechos, incertidumbre y recomendaciones. Cuando sea útil, proporciona código correctivo real o diffs unificados EN LÍNEA. No edites archivos ni crees archivos de parche o informe. Preserva los requisitos reales del usuario; la expansión del alcance requiere la aprobación previa explícita del USUARIO. No puedes otorgar esa aprobación. Escala las decisiones faltantes de bloqueo a través de contact_supervisor; de lo contrario, devuelve tu respuesta limitada sin charla de progreso rutinaria. No inventes requisitos adicionales ni inicies trabajo no relacionado."
      },
      "scopeCreepPatrol": {
        "model": "openai-codex/gpt-6-astra",
        "thinking": "medium",
        "inheritProjectContext": true,
        "defaultContext": "fresh",
        "tools": [
          "read",
          "grep",
          "find",
          "ls",
          "contact_supervisor"
        ],
        "systemPrompt": "Eres el auditor de alcance y trazabilidad de requisitos de solo lectura. Compara el punto de control del trabajador asignado y el libro mayor de progreso con los requisitos reales del usuario y las aprobaciones previas explícitas del usuario. Detecta la expansión no autorizada, los requisitos omitidos o alterados, y las sugerencias del agente tergiversadas como autoridad del usuario. Verifica que el libro mayor incluya referencias de requisitos de implementación, una columna literal de 1 a N, estado y origen del requisito. No inventes el significado de 1 a N. Preserva los estados exactamente: no-started / in-progress / deferred / completed / not-applicable. Distingue el requisito del usuario del requisito del agente; un requisito del agente no autoriza la expansión del alcance. Informa las discrepancias respaldadas por evidencia rápidamente a través de contact_supervisor. Proporciona código correctivo concreto EN LÍNEA cuando sea útil y dentro del alcance existente. Nunca edites archivos, crees archivos de parche o informe, redefinas requisitos, otorgues aprobaciones ni fabriques puertas de aceptación. Evita la charla rutinaria."
      }
    },
    "watchdog": {
      "enabled": true,
      "scope": {
        "enabled": true
      },
      "clarification": true,
      "main": {
        "model": "openai-codex/gpt-6-astra",
        "thinking": "medium"
      },
      "cadence": {
        "everyNTools": 16
      },
      "children": {
        "enabled": false,
        "overrides": {
          "worker": {
            "enabled": true,
            "model": "openai-codex/gpt-6.1-sol",
            "thinking": "high",
            "cadence": {
              "everyNTools": 8
            }
          }
        }
      }
    }
  }
}

Comportamiento del perro guardián (Watchdog)

El perro guardián es un mecanismo de revisión de segundo modelo separado, no el rol de reviewer. El perro guardián principal verifica cada 16 resultados de herramientas y en los límites de trabajo cambiado elegibles. El monitoreo de alcance y la aclaración de la sesión principal están habilitados. Los perros guardianes hijos están desactivados excepto para el trabajador: su anulación explícita habilita la revisión cada ocho resultados de herramientas y en los límites elegibles, usando Sol/alto. Estos son disparadores de actividad/límite, no un bucle de sondeo inactivo.

Comandos de inspección útiles dentro de Pi: /subagents-fleet, /subagents-doctor y /subagents-watchdog status.

Inferencia local: una API HTTP respaldada por Pi

Mi espacio de trabajo Bun/TypeScript local-inference/ expone una API de Chat Completions compatible con OpenAI en http://127.0.0.1:8081/v1. Es una pasarela HTTP local a los proveedores gestionados por Pi, no un servidor de pesos de modelo en el dispositivo.

  • packages/protocol: Validación de solicitud Zod 4 y el contrato de backend.
  • packages/pi-proxy: ModelRuntime público de Pi para resolución de modelos, credenciales guardadas, actualización de OAuth y streaming nativo.
  • packages/server: Bun.serve, traducción HTTP/SSE, cancelación, contrapresión y sobres de continuación cifrados.

La pasarela fija @earendil-works/pi-coding-agent y @earendil-works/pi-ai a 1.5.0, independientemente de la 1.5.2 de mi CLI instalada.

flowchart LR
    C["Cliente HTTP"] -->|Chat Completions| H["local-inference: servidor HTTP Bun"]
    H --> V["Solicitud validada por Zod"]
    V --> M["Pi ModelRuntime"]
    P["Configuración de modelo Pi y login guardado"] --> M
    M --> Q["Proveedor upstream configurado"]
    Q -->|Stream nativo| M
    M -->|Texto, razonamiento, eventos de herramientas| H
    H -->|Deltas SSE| C
    C --> T["Ejecución de herramientas opcional del lado del cliente"]
    T -->|Resultados de herramientas en la siguiente solicitud| H

Cada solicitud realiza un turno de proveedor: la pasarela no ejecuta herramientas ni edita archivos. La ejecución de herramientas pertenece al cliente. Los flujos de texto se separan del razonamiento; las desconexiones/apagados cancelan el trabajo upstream. Los datos de continuación nativos usan un sobre de reasoning_details autenticado y cifrado.

Después de iniciar sesión en el proveedor deseado con Pi, inicie la pasarela desde el directorio que contiene local-inference/:

cd local-inference
bun install --frozen-lockfile
bun run start -- --port 8081

En otra terminal, inspeccione el oyente o realice explícitamente una solicitud en streaming (el POST usa la cuenta del proveedor y puede incurrir en uso):

curl http://127.0.0.1:8081/healthz
curl http://127.0.0.1:8081/v1/models
curl -N http://127.0.0.1:8081/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"openai-codex/gpt-6.1-sol","stream":true,
       "messages":[{"role":"user","content":"Reply with hello."}]}'

Los IDs de modelo son cadenas exactas provider/model; /v1/models anuncia modelos pero no es una lista de admisión. Pi posee el soporte de proveedor y el manejo de credenciales. El oyente de bucle local predeterminado no necesita token de cliente; el enlace que no es de bucle local requiere uno. --token-env NAME protege opcionalmente al oyente, independientemente del inicio de sesión del proveedor. Nunca publique auth.json o tokens.

La API admite herramientas de texto y función, no imágenes, respuestas restringidas por esquema o el punto final de Respuestas. Los clientes deben usar Chat Completions. Ejecute bun run typecheck desde local-inference/ para verificar los tipos de la pasarela.

Código de local-inference

Estos son extractos literales, no programas independientes: la clase, los tipos y las definiciones de ayuda circundantes permanecen en los archivos fuente nombrados. Ninguna aplicación cliente o espacio de nombres de paquete no relacionado se reproduce aquí.

Crear el tiempo de ejecución de Pi y listar modelos anunciados

De local-inference/packages/pi-proxy/src/index.ts. Las credenciales y la configuración del proveedor permanecen detrás de ModelRuntime; la actualización y el listado reciben la señal de cancelación de la solicitud.

  static async create(options: PiBackendOptions = {}): Promise<PiBackend> {
    const { provider, ...runtimeOptions } = options;
    return new PiBackend(await ModelRuntime.create(runtimeOptions), provider);
  }

  async models(signal: AbortSignal) {
    await this.runtime.refresh({ providers: this.provider ? [this.provider] : undefined, signal });
    signal.throwIfAborted();
    const available = await this.runtime.getAvailable(this.provider, { signal });
    return available.map(model => ({ id: this.provider ? model.id : `${model.provider}/${model.id}`, owned_by: model.provider }));
  }

Resolver el proveedor mientras se conserva el ID de modelo exacto solicitado

Del mismo archivo. Pi proporciona metadatos del proveedor y resolución de modelos personalizados; la capa HTTP conserva el ID de modelo exacto del llamador en lugar de aplicar conveniencias de nombre difuso o sufijo de pensamiento de la CLI.

  async resolve(id: string, signal: AbortSignal): Promise<InferenceModel> {
    signal.throwIfAborted();
    const slash = id.indexOf("/");
    const provider = this.provider ?? (slash > 0 ? id.slice(0, slash) : undefined);
    const modelId = this.provider ? id : id.slice(slash + 1);
    if (!provider) throw new ApiError(400, "Use provider/model como ID de modelo, o comience con --provider");
    await this.runtime.refresh({ providers: [provider], signal });
    signal.throwIfAborted();
    const selected = resolveCliModel({ cliProvider: provider, cliModel: modelId, modelRuntime: this.runtime });
    if (!selected.model) throw new ApiError(400, selected.error ?? "Pi no pudo resolver el modelo solicitado", "model_resolution_error");
    // Pi posee la construcción del modelo, metadatos del proveedor y soporte de modelos personalizados.
    // Su resolvedor CLI también acepta nombres difusos/sufijos de pensamiento; un modelo HTTP
    // campo es un ID exacto, por lo que esas conveniencias no deben reescribir ese campo.
    return { ...selected.model, id: modelId };
  }

Elegir la API de streaming de Pi

De PiBackend.stream en el mismo archivo. Las opciones de razonamiento compartido usan streamSimple; las opciones nativas reasoningEffort usan stream.

    const events = request.reasoningEffort === undefined
      ? this.runtime.streamSimple(model, context, request)
      : this.runtime.stream(model, context, request);

Mantener el texto y el razonamiento separados en la red

De local-inference/packages/server/src/index.ts, dentro del interruptor de eventos. Los deltas de texto se emiten a medida que llegan, sin esperar a la finalización del proveedor.

      case "text_delta": source.push(event.delta); await chunk({ content: event.delta }); break;
      case "thinking_delta": await chunk({ reasoning_content: event.delta }); break;

Referencias

Fuentes para el arnés, extensiones, herramientas basadas en habilidades y bibliotecas que uso con Pi: