Ir para o conteúdo

38 · Licenças, uso offline e o que precisa da rede

Idiomas

O seletor entende turnos escritos em inglês. O português é a sua próxima gramática e ainda não foi lançado; até lá, um turno escrito em português não é lido como português.

O pacote stalwart-agents traz o runtime da Stalwart, compilado: o leitor que transforma cada turno num plano, a verificação de ferramentas, as verificações de resposta, a recuperação de passagens, as verificações de código, a licença e os medidores. Ele roda no seu processo, na sua máquina. Uma licença é o que o deixa rodar ali: esta máquina, ativada uma vez na sua conta. Este capítulo é o que roda na máquina e o que precisa do nosso serviço, como uma licença é ativada, mantida e liberada, e o que acontece quando ela expira.

O que roda onde

Onde o runtime está instalado, um turno e uma chamada de ferramenta não precisam de rede: o runtime responde aos dois na máquina que executa o seu agente.

O que acontece uma vez, antes da implantação ou em segundo plano pode usar o nosso serviço. Cada linha está ligada ao código que faz o trabalho, a operação do runtime ou a rota do serviço, e é gerada a partir dele:

Trabalho Onde roda Rede
ler um turno num plano o runtime, no seu processo nenhuma
verificar uma chamada de ferramenta: o catálogo, os argumentos, o histórico, as regras de ordem, o portão do rulebook, as marcas, os tokens de confirmação o runtime, no seu processo nenhuma
conferir uma resposta com o que foi feito, e examinar turnos e respostas em busca de dados pessoais o runtime, no seu processo nenhuma
indexar os seus documentos, recuperar passagens e conferir uma resposta com elas o runtime, no seu processo nenhuma; compose chama o seu próprio modelo, com a sua chave
as verificações de código do stalwart verify o runtime, no seu processo nenhuma; só as contagens por regra vão com o registro
o lint de um catálogo o runtime, no seu processo nenhuma
a etapa de ferramenta protegida, desfazer uma execução que falhou, o retrocesso, as pausas por uma pessoa e a retomada o pacote, sobre o runtime, no seu processo nenhuma, exceto as chamadas que as suas próprias ferramentas fazem
as verificações do gateway o pacote, sobre o runtime, no seu processo nenhuma, exceto as chamadas que ele repassa aos seus servidores de ferramentas
um cálculo: o seu modelo escreve a função e a imagem do sandbox a executa, na sua máquina o pacote, sobre o runtime, no seu processo a chamada ao seu modelo; a função em si roda sem rede
registrar um catálogo e o seu rulebook o nosso serviço no stalwart verify e no início de um agente, quando a versão mais recente não o contém
a caça e a prova do grafo de um agente o nosso serviço antes da implantação: no stalwart verify, e uma vez por grafo antes do primeiro turno de um agente
ativar a licença e renovar a concessão o nosso serviço uma vez na ativação, depois em segundo plano; o runtime segue rodando durante o período de carência sem ela
relatar o uso: só contagens o nosso serviço em segundo plano, com a renovação da concessão
os pacotes de vocabulário e de catálogo que o runtime lê o nosso serviço em segundo plano; um pacote novo é adotado numa renovação da concessão, nunca no meio de uma conversa
os polegares dos seus usuários, para o minerador o nosso serviço só quando você os envia

Ativando

$ export QLS_API_KEY=qls_live_...
$ stalwart licence activate        # uma vez em cada máquina
$ stalwart licence status          # a licença, a concessão, a carência e o que resta de cada limite
$ stalwart licence release         # libera o lugar desta máquina, para outra ocupar

A ativação cria a instalação desta máquina -- um id aleatório e um par de chaves, nunca uma impressão digital do hardware -- e troca a sua chave pela licença da sua organização e uma primeira concessão: a permissão do runtime para rodar aqui até uma data. O seu plano define quantas máquinas podem ter uma concessão ao mesmo tempo, quanto tempo dura uma concessão, o período de carência depois dela, e se uma máquina pode ser ativada sem nenhuma conexão:

A licença do runtime local Gratuito Pago Enterprise
installations: máquinas com uma concessão ao mesmo tempo 1 5 50
lease_days: dias que uma concessão dura antes de ser renovada 7 7 7
offline_grace_days: dias que o runtime continua funcionando além da concessão sem nos alcançar 7 30 30
offline_activation: ativar uma máquina que nunca alcança a rede, por arquivo de pedido não não sim

Nada no pacote funciona sem uma chave e uma licença ativada, exceto ativá-la, stalwart doctor e stalwart check. Sem elas, um comando para com LicenceRequired, nomeando stalwart licence activate.

A concessão, a sua renovação e o período de carência

A primeira resposta que o runtime dá num processo renova a concessão com o nosso serviço, de modo que um plano cancelado ou uma licença revogada param o runtime na hora; a mesma renovação busca os pacotes de catálogo e de vocabulário e relata as contagens. Quando o serviço não pode ser alcançado, o runtime abre a última concessão como ela está: dentro do prazo dela, e depois dentro do período de carência, ele responde normalmente, e stalwart doctor e stalwart licence status mostram o estado, active ou grace, e as datas em que a concessão e a carência terminam.

Rodando offline

O agente da loja do capítulo 30. Ele inicia com a rede, que prova o seu grafo e registra o seu catálogo:

desk = Agent.from_file("agent.yaml")
desk.chat("show me order 4412", user="u-0")     # start-up, with the network: the proof and the registration

Depois a rede é cortada, com todo socket recusado, e o agente segue:

# The network is cut here: from now on nothing leaves the machine.
reply = desk.chat("show me order 4411", user="u-17")
print(reply.text)
reply = desk.chat("charge order 4411 40.00", user="u-17")
print(reply.waiting[0].tool, "waits:", reply.waiting[0].wording)
reply = desk.confirm("u-17", "approve")
print(reply.text)
{"card": "visa-0019", "customer": "c-208", "order_id": "4411", "status": "unpaid", "total": "40.00"}
charge_card waits: Run charge_card?
{"amount": "40", "charge_id": "ch-4411", "order_id": "4411"}

A leitura foi respondida, a cobrança verificada e perguntada, e a cobrança aprovada executada, sem que nada saísse da máquina além da chamada à própria ferramenta da loja.

Quando a licença expira

Uma concessão e a sua carência já vencidas, ou a licença expirada, é uma licença expirada. Um produto de segurança não pode falhar aberto, e um agente em produção não pode parar sem aviso, então uma expiração degrada conforme a configuração on_licence_lapse da sua organização:

  • reads_only, o padrão: os turnos são lidos normalmente, as leituras são verificadas normalmente, e toda escrita é recusada como licence_lapsed.
  • refuse: toda operação é recusada como licence_lapsed, com a data em que a expiração começou.

O mesmo agente, depois que a licença dele expirou:

# The licence has lapsed, and the organisation's setting is `reads_only`.
reply = desk.chat("show me order 4411", user="u-18")
print(reply.text)
reply = desk.chat("charge order 4411 40.00", user="u-18")
print(reply.text)
{"card": "visa-0019", "customer": "c-208", "order_id": "4411", "status": "unpaid", "total": "40.00"}
The licence for this agent has lapsed, so charge_card was not run.

Nada que um runtime licenciado teria recusado é permitido durante uma expiração.

Máquinas sem conexão

Onde o seu plano permite a ativação offline, uma máquina que nunca alcança a Stalwart é ativada por arquivo, através de uma que alcança:

$ stalwart licence request                          # na máquina a ativar: escreve activation-request.json
$ stalwart licence answer activation-request.json   # numa máquina que alcança a Stalwart: escreve activation-answer.json
$ stalwart licence install activation-answer.json   # de volta na primeira máquina

A resposta traz a licença e uma concessão para todo o prazo da licença. Uma empresa pode, em vez disso, rodar o qls-licence-server na própria rede, que emite concessões para as suas máquinas como o serviço de licenças faz.

Liberando um lugar

stalwart licence release libera o lugar desta máquina na licença, para que outra máquina possa ocupá-lo: o que um job de CI faz por último (capítulo 46).

O que é contado, e o que é relatado

O runtime conta cada medidor que o seu plano nomeia -- plan_calls, tool_checks, answer_calls e as contagens das verificações de resposta, entre eles -- no seu próprio estado, no seu próprio relógio. Passado um limite, ele responde quota_exhausted, nomeando o medidor, como o serviço faz. Contagens, e só contagens, são relatadas: nunca um turno, um argumento, um resultado, uma resposta ou um documento. Os limites do seu plano estão no capítulo 16.

stalwart doctor e stalwart licence

  • stalwart doctor imprime a URL base, se uma chave está configurada (nunca a chave), qual lado responde os planos e as verificações de ferramentas -- o runtime local ou o seu qls-router -- com o estado da licença, a ida e volta até o serviço, o seu nível, os seus direitos e o uso de cada medidor neste mês, e se o streaming chega até você pela sua rede. Ele funciona sem licença, para dizer o que falta.
  • stalwart licence aceita activate, request, answer, install, release e status.

Os limites

  • Código compilado e pacotes cifrados dificultam a leitura; não a impedem. Alguém determinado, com uma instalação licenciada, pode extrair o que ela roda. Os termos da licença e o seu contrato são o que impede isso.
  • Alguns trabalhos ainda precisam do nosso serviço: a caça e a prova do grafo de um agente, o registro de um catálogo e do seu rulebook, a ativação e a renovação de uma licença, e o minerador. O primeiro início de um agente prova o seu grafo e registra o seu catálogo ali; uma máquina que nunca alcança o serviço roda só com a sua concessão e a carência.
  • Onde o runtime não está instalado -- uma plataforma para a qual o wheel não é distribuído -- os planos e as verificações de ferramentas vêm do seu próprio qls-router, e a nossa API hospedada não responde a nenhum dos dois.