@hostwebhook/platform-contracts 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -75,6 +75,9 @@ exports.getSuggestedAlternative = getSuggestedAlternative;
75
75
  exports.MODEL_PRICING = {
76
76
  // OpenAI — GPT series
77
77
  'gpt-5.6-sol': { input: 4.00, output: 20.00 },
78
+ // `gpt-5.6` a secas es el alias documentado de Sol, y sin esta entrada caia
79
+ // por prefijo en `gpt-5` — otro modelo y otro precio.
80
+ 'gpt-5.6': { input: 4.00, output: 20.00 },
78
81
  'gpt-5.6-terra': { input: 2.00, output: 12.00 },
79
82
  'gpt-5.6-luna': { input: 0.20, output: 1.20 },
80
83
  'gpt-5.5-pro': { input: 30.00, output: 180.00 },
@@ -132,6 +135,30 @@ exports.MODEL_PRICING = {
132
135
  'claude-sonnet-4': { input: 3.00, output: 15.00 },
133
136
  'claude-sonnet-4-20250514': { input: 3.00, output: 15.00 },
134
137
  'claude-haiku-4-5-20251001': { input: 1.00, output: 5.00 },
138
+ // (!) Sin apellido de fecha, y NO es redundante: la clave fechada es mas
139
+ // LARGA, asi que la regla de prefijo nunca alcanzaba a `claude-haiku-4-5`.
140
+ // Y ese es `getDefaultModel('anthropic')` —con el nace todo nodo de IA— y
141
+ // tambien `PLATFORM_LLM_CHEAP_MODEL`. Mientras falto, cada nodo nuevo salia
142
+ // a coste CERO y su tope de gasto en dolares no podia saltar jamas.
143
+ 'claude-haiku-4-5': { input: 1.00, output: 5.00 },
144
+ // ── Groq ────────────────────────────────────────────────────────────────
145
+ // (!) Estas tres NO estan verificadas contra una pagina oficial de Groq:
146
+ // console.groq.com/docs/pricing da 404 y groq.com/pricing es marketing. Salen
147
+ // de agregadores de terceros coincidentes entre si (agosto 2026). Reverificar
148
+ // en cuanto Groq publique una pagina consultable.
149
+ //
150
+ // Aun asi entran: sin ellas el coste sale CERO, y cero no es "barato", es
151
+ // "un tope de gasto que no salta". Una cifra aproximada de la fuente correcta
152
+ // protege; la ausencia no protege nada.
153
+ 'openai/gpt-oss-20b': { input: 0.075, output: 0.30 },
154
+ 'openai/gpt-oss-120b': { input: 0.15, output: 0.60 },
155
+ 'qwen/qwen3.6-27b': { input: 0.60, output: 3.00 },
156
+ //
157
+ // `groq/compound` y `groq/compound-mini` NO se ponen, y no por falta de dato:
158
+ // es que NO TIENEN tarifa plana por token. Son sistemas agenticos que
159
+ // repercuten el modelo subyacente MAS el coste de las herramientas que usan,
160
+ // asi que no hay un numero unico que sea correcto. Inventar uno seria peor que
161
+ // el hueco. Quedan en la lista de excepciones del test, con este motivo.
135
162
  'claude-3-7-sonnet-20250219': { input: 3.00, output: 15.00 },
136
163
  'claude-3-5-sonnet-20241022': { input: 3.00, output: 15.00 },
137
164
  'claude-3-5-haiku-20241022': { input: 0.80, output: 4.00 },
@@ -32,7 +32,15 @@
32
32
  * Antes la puerta leía `memoryEnabled` del documento para decidir; esa decisión
33
33
  * se va con el dato, que es donde puede comprobarse.
34
34
  */
35
- /** El nodo conectado, en lo que la puerta lee de él. Cuatro campos, medidos. */
35
+ /**
36
+ * El nodo conectado, en lo que la puerta lee de él. Siete campos, medidos.
37
+ *
38
+ * Los cuatro primeros son lo que la puerta necesitaba para EJECUTAR. Los tres
39
+ * últimos son lo que necesita para PONERLE PRECIO al turno antes de ejecutarlo:
40
+ * el Chat Trigger tiene topes en dólares y reserva por adelantado, y esa reserva
41
+ * no se puede calcular sin saber a qué modelo se va a llamar ni cuánto puede
42
+ * devolver. Sin ellos la estimación caía a sus valores por defecto en silencio.
43
+ */
36
44
  export interface NodoDeIaConectado {
37
45
  id: string;
38
46
  /** Para el paso del historial y para decirle al widget con quién habla. */
@@ -40,6 +48,35 @@ export interface NodoDeIaConectado {
40
48
  workspaceId: string | null;
41
49
  /** Si el widget enseña las llamadas a herramientas mientras ocurren. */
42
50
  muestraLasHerramientas: boolean;
51
+ /** El modelo configurado en el nodo. Sin el nombre no hay tarifa, y sin
52
+ * tarifa la reserva del tope EN DÓLARES no se puede calcular: los tokens
53
+ * estimados no son un precio hasta que alguien dice de qué modelo son. */
54
+ model: string;
55
+ /** El tope de salida del nodo. Es el techo de lo que puede devolver, y la
56
+ * estimación es deliberadamente PESIMISTA: reserva el techo entero. */
57
+ maxTokens: number;
58
+ /**
59
+ * La LONGITUD del system prompt del nodo, no el prompt.
60
+ *
61
+ * ⚠️ Un `number` y no la cadena, por dos motivos, y los dos importan:
62
+ *
63
+ * 1. No hace falta más. La estimación sólo hace `.length`: suma ese largo a
64
+ * los caracteres del turno y divide entre tres. El número da exactamente
65
+ * el mismo resultado que la cadena, así que mandar la cadena sería mandar
66
+ * algo que nadie va a leer.
67
+ *
68
+ * 2. Esto CRUZA UNA FRONTERA DE SERVICIO —es el motivo de existir de este
69
+ * fichero, y está en su cabecera—, y el `systemPrompt` es contenido del
70
+ * cliente. Mandarlo entero lo filtraría a un servicio que no lo necesita.
71
+ * Mismo criterio que ya aplica `ChunkingStrategy` en `formas-compartidas`:
72
+ * «sólo cruza la ESTRATEGIA, no la configuración entera».
73
+ *
74
+ * ⚠️ Y se llama `largoDelSystemPrompt` y no `largoDelPrompt` porque en el
75
+ * consumidor conviven DOS prompts: el del nodo y el `systemPromptOverride`
76
+ * del trigger, que lo pisa. El nombre dice cuál se midió — éste es el del
77
+ * nodo, y quien tenga override medirá el suyo y no usará éste.
78
+ */
79
+ largoDelSystemPrompt: number;
43
80
  }
44
81
  export interface EjecucionDeIa {
45
82
  /** El nodo conectado a ese chat, o `null` si ya no existe. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/platform-contracts",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "description": "Contratos compartidos entre los servicios de HostWebhook: addons del plan, identidad interna, y las formas que cruzan una frontera de red",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",