termo_core 0.1.9 → 0.1.11

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.
@@ -243,7 +243,7 @@ export declare function chave_ia_buscar_catalogo(credencial_de_acesso: Credencia
243
243
  /**
244
244
  * Executa um pedido no gateway de IA
245
245
  *
246
- * Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados.
246
+ * Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados. `modelo` (até 200 caracteres, só junto de `provedor`) troca o modelo do catálogo por outro da mesma IA. Em `texto_para_imagem`, `referencias` (até 14 imagens no formato de `arquivo`, até 20 MB somadas) vão junto do texto, `proporcao` (`1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9` ou `21:9`) e `tamanho` (`1K`, `2K` ou `4K`) definem a imagem; em `texto_para_texto`, `esquema` (objeto JSON Schema, sem `ferramentas`) faz a resposta vir em `texto` como JSON nesse formato. Com qualquer um desses quatro, só entram as IAs que os entendem (hoje o Gemini), e a conversa gravada não guarda as referências. A resposta traz também `tokens_de_entrada` e `tokens_de_saida` separados, quando a IA informa.
247
247
  *
248
248
  * `POST /gateway`
249
249
  */
package/dist/ai/rotas.js CHANGED
@@ -304,7 +304,7 @@ export function chave_ia_buscar_catalogo(credencial_de_acesso, opcoes_da_chamada
304
304
  /**
305
305
  * Executa um pedido no gateway de IA
306
306
  *
307
- * Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados.
307
+ * Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados. `modelo` (até 200 caracteres, só junto de `provedor`) troca o modelo do catálogo por outro da mesma IA. Em `texto_para_imagem`, `referencias` (até 14 imagens no formato de `arquivo`, até 20 MB somadas) vão junto do texto, `proporcao` (`1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9` ou `21:9`) e `tamanho` (`1K`, `2K` ou `4K`) definem a imagem; em `texto_para_texto`, `esquema` (objeto JSON Schema, sem `ferramentas`) faz a resposta vir em `texto` como JSON nesse formato. Com qualquer um desses quatro, só entram as IAs que os entendem (hoje o Gemini), e a conversa gravada não guarda as referências. A resposta traz também `tokens_de_entrada` e `tokens_de_saida` separados, quando a IA informa.
308
308
  *
309
309
  * `POST /gateway`
310
310
  */
@@ -364,12 +364,17 @@ export interface PedidoGateway {
364
364
  arquivo?: ArquivoDoPedido | null;
365
365
  categoria: string;
366
366
  conversa_id?: string | null;
367
+ esquema?: unknown;
367
368
  ferramentas?: Array<Ferramenta> | null;
368
369
  historico?: Array<MensagemDoHistorico> | null;
369
370
  idioma?: string | null;
370
371
  instrucao?: string | null;
372
+ modelo?: string | null;
373
+ proporcao?: string | null;
371
374
  provedor?: string | null;
372
375
  provedor_preferido?: string | null;
376
+ referencias?: Array<ArquivoDoPedido> | null;
377
+ tamanho?: string | null;
373
378
  texto?: string | null;
374
379
  voz?: string | null;
375
380
  }
@@ -426,6 +431,8 @@ export interface RespostaDoGateway {
426
431
  tentativas: Array<TentativaDaMensagem>;
427
432
  texto?: string | null;
428
433
  tokens?: number | null;
434
+ tokens_de_entrada?: number | null;
435
+ tokens_de_saida?: number | null;
429
436
  }
430
437
  export interface TentativaDaMensagem {
431
438
  chave: string;
@@ -139,7 +139,7 @@ export declare function elementos_listar_board(credencial_de_acesso: CredencialD
139
139
  * - `imagem` (320x240, `url` https:// ou a devolvida por `POST /board/{id}/imagem`);
140
140
  * - `caneta` (traço livre: `pontos` [x0, y0, x1, y1, ...] relativos a (x, y), `corBorda`, `espessura`).
141
141
  *
142
- * Posição: com `x` e `y`, o elemento fica exatamente ali. Sem eles, o servidor posiciona em fileiras abaixo de tudo o que já existe, sem sobrepor. Com `frame` (id ou `chave` de um frame), o elemento entra no frame: `x`/`y` passam a ser relativos ao canto do frame e, sem eles, os elementos se arrumam em grade dentro do frame, que cresce para caber todos. `chave` é um apelido livre para outro elemento do mesmo pedido apontar para este (ex.: um conector `{"de": {"id": "inicio"}, "para": {"id": "fim"}}` ou `"frame": "custos"`). Cores: `#rrggbb` (paleta das notas: #fff9b1, #f5d128, #ffcee0, #f16c7f, #d5f692, #93d275, #a6ccf5, #6cd8fa, #c9b8f5, #ffc78f, #e6e6e6, #ffffff). A resposta traz os elementos criados com os ids, na ordem do pedido. Para arrumar o que já existe, use `POST /board/{id}/elementos/organizar`.
142
+ * Posição: com `x` e `y`, o elemento fica exatamente ali. Sem eles, o servidor posiciona em fileiras abaixo de tudo o que já existe, sem sobrepor. Com `frame` (id ou `chave` de um frame), o elemento entra no frame: `x`/`y` passam a ser relativos ao canto do frame e, sem eles, os elementos se arrumam em grade dentro do frame, que cresce para caber todos. `chave` é um apelido livre para outro elemento do mesmo pedido apontar para este (ex.: um conector `{"de": {"id": "inicio"}, "para": {"id": "fim"}}` ou `"frame": "custos"`). Cores: `#rrggbb`. Paleta viva das notas: #fff9b1, #f5d128, #ffcee0, #f16c7f, #d5f692, #93d275, #a6ccf5, #6cd8fa, #c9b8f5, #ffc78f, #e6e6e6, #ffffff. Paleta pastel para o fundo de forma, card, frame e tabela: #eef1f5, #ffe1e1, #ffe8d1, #fff3c4, #dcf5e3, #d6f2f0, #dbe7ff, #e3e2fd, #ecdffb, #fde0ec, #e2e5ea, #ffffff; e os tons fortes correspondentes para `corBorda`, `corTexto` e a faixa do card: #6b7684, #d64545, #e07b2a, #c08f0a, #2f9e5d, #1f9a94, #3b6fe0, #5b5bd6, #8550d6, #d6468f, #1f2328, #ffffff. A forma sem `corBorda` ganha a borda no tom forte do mesmo matiz do fundo. A resposta traz os elementos criados com os ids, na ordem do pedido. Para arrumar o que já existe, use `POST /board/{id}/elementos/organizar`.
143
143
  *
144
144
  * `POST /board/{id}/elementos`
145
145
  */
@@ -182,7 +182,7 @@ export function elementos_listar_board(credencial_de_acesso, id, parametros = {}
182
182
  * - `imagem` (320x240, `url` https:// ou a devolvida por `POST /board/{id}/imagem`);
183
183
  * - `caneta` (traço livre: `pontos` [x0, y0, x1, y1, ...] relativos a (x, y), `corBorda`, `espessura`).
184
184
  *
185
- * Posição: com `x` e `y`, o elemento fica exatamente ali. Sem eles, o servidor posiciona em fileiras abaixo de tudo o que já existe, sem sobrepor. Com `frame` (id ou `chave` de um frame), o elemento entra no frame: `x`/`y` passam a ser relativos ao canto do frame e, sem eles, os elementos se arrumam em grade dentro do frame, que cresce para caber todos. `chave` é um apelido livre para outro elemento do mesmo pedido apontar para este (ex.: um conector `{"de": {"id": "inicio"}, "para": {"id": "fim"}}` ou `"frame": "custos"`). Cores: `#rrggbb` (paleta das notas: #fff9b1, #f5d128, #ffcee0, #f16c7f, #d5f692, #93d275, #a6ccf5, #6cd8fa, #c9b8f5, #ffc78f, #e6e6e6, #ffffff). A resposta traz os elementos criados com os ids, na ordem do pedido. Para arrumar o que já existe, use `POST /board/{id}/elementos/organizar`.
185
+ * Posição: com `x` e `y`, o elemento fica exatamente ali. Sem eles, o servidor posiciona em fileiras abaixo de tudo o que já existe, sem sobrepor. Com `frame` (id ou `chave` de um frame), o elemento entra no frame: `x`/`y` passam a ser relativos ao canto do frame e, sem eles, os elementos se arrumam em grade dentro do frame, que cresce para caber todos. `chave` é um apelido livre para outro elemento do mesmo pedido apontar para este (ex.: um conector `{"de": {"id": "inicio"}, "para": {"id": "fim"}}` ou `"frame": "custos"`). Cores: `#rrggbb`. Paleta viva das notas: #fff9b1, #f5d128, #ffcee0, #f16c7f, #d5f692, #93d275, #a6ccf5, #6cd8fa, #c9b8f5, #ffc78f, #e6e6e6, #ffffff. Paleta pastel para o fundo de forma, card, frame e tabela: #eef1f5, #ffe1e1, #ffe8d1, #fff3c4, #dcf5e3, #d6f2f0, #dbe7ff, #e3e2fd, #ecdffb, #fde0ec, #e2e5ea, #ffffff; e os tons fortes correspondentes para `corBorda`, `corTexto` e a faixa do card: #6b7684, #d64545, #e07b2a, #c08f0a, #2f9e5d, #1f9a94, #3b6fe0, #5b5bd6, #8550d6, #d6468f, #1f2328, #ffffff. A forma sem `corBorda` ganha a borda no tom forte do mesmo matiz do fundo. A resposta traz os elementos criados com os ids, na ordem do pedido. Para arrumar o que já existe, use `POST /board/{id}/elementos/organizar`.
186
186
  *
187
187
  * `POST /board/{id}/elementos`
188
188
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termo_core",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "Todos os clientes da Termotubos num pacote só: um módulo por serviço e cada rota da API como uma função com fetch, com o endereço resolvido pelo ambiente atual.",
5
5
  "license": "MIT",
6
6
  "author": "TI Termotubos <ti@termotubos.com.br>",