pt-BR/about_Powershai_providers_huggingface.help.txt
TOPIC
about_powershai_providers_huggingface O Hugging Face é o maior repositório de modelos de IA do mundo! Lá, você tem acesso a uma gama incrível de modelos, datasets, demonstrações com o Gradio, e muito mais! É o GitHub da Inteligência Artificial, comercial e open source! O provider do Hugging Face do PowershAI conecta o seu powershell com uma gama incrível de serviços e modelos. O Gradio O Gradio é um framework para criar demonstrações para modelos de IA. Com pouco código em python, é possível subir interfaces que aceitam diveros inputs, como texto, arquivo, etc. E, além disso, ele gerencia muitas questões como filas, uploads, etc. E, para completar, junto com a interface, ele pode disponibilizar uma API para que a funcionalidade exposta via UI também seja acessível através de linguagens de programação. O PowershAI se beneficia disso, e expoe as APIs do Gradio de uma forma mais fácil, onde é possível invocar uma funcionalidade do seu terminal e ter praticamente a mesma experiência! Hugging Face Hub O Hugging Face Hub é a plataforma que você acessa em https://huggingface.co Ele é organizado em modelos (models), que são basicamente o código fonte dos modelos de IA que outras pessoas e empresas criam ao redor do mundo. Há também os "Spaces", que são onde você pode subir um código para publciar aplicações escritas em python (usando o Gradio, por exemplo) ou docker. Conheça mais sobre o Hugging Face neste post do blog Ia Talking E, conheça o Hugging Face Hub na doc oficial Com o PowershaAI, você pode listar modelos e até interagir com a API de vários spaces, executando as mais variadas apps de IA a partir do seu terminal. USO BÁSICO O provider do Hugging Face do PowershAI possui muitos cmdlets para interação. Ele está organizado nos seguintes comandos: * comandos que interagem com o Hugging Face possem `HuggingFace` ou `Hf` no nome. Exemplo: `Get-HuggingFaceSpace` (alias `Get-HfSpace`). * comandos que interagem com o Gradio, independente se são um Space do Hugging Face, ou não, possuem `Gradio` ou `GradioSession' no nome: `Send-GradioApi`, `Update-GradioSessionApiResult` Você pode usar este comando para obter a lista completa: `get-command -mo powershai -Noun Hf ,HuggingFace ,Gradio ` Você não precisa se autenticar para acessar os recursos públicos do Hugging Face. Há uma infinidades de modelos e spaces disponíveis gratuitamente sem a necessidade de autenticação. Por exemplo, o seguinte comando lista os top 5 modelos mais baixados da Meta (autor: meta-llama): import-module powershai Invoke-HuggingFaceHub "models" -limit 5 -author meta-llama -sort downloads -direction -1 O cmdlet Invoke-HuggingFaceHub é responsável por invocar endpoints da API do Hub. Os parâmetros são os mesmos documentandos em https://huggingface.co/docs/hub/en/api Porém, você vai precisar de um token caso necessite acessar recursos privados: `Set-HuggingFaceToken` (ou `Set-HfToken`) é o cmdlet para inserir o token default usados em todas as requisições. ESTURTURA DE COMANDOS DO PROVIDER HUGGING FACE O provider do Hugging Face está organizado em 3 principais grupos de comandos: Gradio, Gradio Session e Hugging Face. Comandos Gradio*` Os cmdlets do grupo "gradio" possuem a estrutra Verbo-GradioNome. Estes comandos implementam o acesso a API do Gradio. Estes comandos são baiscamente wrappers para as APIs. A construção deles foi baseada nesta doc: https://www.gradio.app/guides/querying-gradio-apps-with-curl e também observando o código fonte do Gradio (ex.: Routes Estes comandos podem ser usados com qualquer app gradio, independente de ondem estejam hospedadas: na sua máquina local, em um space do Hugging Face, em um server na cloud... Você precisa apenas da URL principal da aplicação. Considere essa app gradio: # file, simple-app.py import gradio as gr import time def Op1(Duration): yield f"Dur:{Duration}" print("Looping..."); start = time.perf_counter() while True: now = time.perf_counter(); elapsed = now - start; if elapsed >= int(Duration) : break; yield elapsed; time.sleep(1); yield f"Finished" with gr.Blocks() as demo: DurationSeconds = gr.Text(label="Duration, in, seconds", value=5); txtResults = gr.Text(label="Resultado"); btnOp1 = gr.Button(value="Op1"); btnOp1.click( Op1, [DurationSeconds], [txtResults] ); if __name__ == "__main__": demo.launch(show_api=True) Basicamente, esta app exibe 2 campos de texto, sendo um deles onde o usuário digita um texto e o outro é usado para mostrar a saída. Um botão, que ao ser clicado, dispara a função Op1. A função faz um loop durante um detemrinaod numero de segundos infomaod no parametro. A cada segundo, ela devole o quanto se passou. Suponha que ao iniciar, esta app esteja acessível em http://127.0.0.1:7860. Com este provider, conectar nessa app é simples: # instale o powershai, se não tiver instalado! Install-Module powershai # Importe import-module powershai # Verifique os endpoints da api! Get-GradioInfo http://127.0.0.1:7860 O cmdlet `Get-GradioInfo` é o mais simples. Ele apenas lê o endpiunt /info que toda app gradio possui. Este endpoint retorna informacoes valiosas, como os endpoints da API disponíveis: # Verifique os endpoints da api! $AppInfo = Get-GradioInfo http://127.0.0.1:7860 # lista os parâmetros do endpoint $AppInfo.named_endpoints.'/op1'.parameters Você pode invocar a API usando o cmdlet `Send-GradioApi`. $Event = Send-GradioApi -AppUrl 'http://127.0.0.1:7860' -ApiName Op1 -Params @(1) Note que precisamos passar a URL, o nome do endpoint sem a barra e o array com lista de parâmetros. O resultado dessa requisição é um evento que poderá ser usado para consultar o resultado da API. Para obter os resultados, você deve usar `Update-GradioApiResult' $Event | Update-GradioApiResult O cmdlet `Update-GradioApiResult` irá escrever os eventos gerados pela API no pipeline. Será devolvido um objeto para cada evento gerado pelo servidor. A propriedade `data` desse objeto tem os dados retornados, se houverem. Há ainda, o comando `Send-GradioFile`, que permite fazer uploads. Ele devolve um array de objetos FileData, que representam o arquivo no servidor. Note como estes cmdlets são bem primitivos: Você deve manualmente fazer tudo. Obter os endpoitns, invocar a api, enviar os parâmetros como array, fazer o upload dos arquivos. Apesar destes comandos abstrairem as chamadas HTTP diretas do Gradio, eles aindam exigem muito do usuário. É por isso, que foi criado o grupo de comandos GradioSession, que ajudam a abstrair mais ainda e tornar a vida do usuário mais fácil! Comandos GradioSession* Os comandos do grupo GradioSession ajudam a abstrair mais ainda o acesso a uma app Gradio. Com eles, você mais próximo do powershell ao interagir com uma app gradio e mais longe das chamadas nativas. Vamos usar o proprio exemplo da app anterior para fazer alguns comparativos: # cria uma nova session New-GradioSession http://127.0.0.1:7860 O comdlet `New-GradioSession` cria uma nova sessão com o Gradio. Esta nova sessão tem elemenots únicos como um SessionId, lsita de arquivos feitos upload, configuraões, etc. O comando retorna o objeto que representa esta session, e você pode obter todas as session criadas usando `Get-GradioSession`. Imagina que uma GradoSession como um aba do browser aberta com a sua app gradio aberta. Os comandos GradioSession operam, por padrão, na default session. Se existe apenas 1 session, ela é a default session. Se existe mais de uma, o usuário deve escolher qual é a default usando o comando `Set-GradioSession` $app1 = New-GradioSession http://127.0.0.1:7860 $app2 = New-GradioSession http://127.0.0.1:7861 Set-GradioSession -Default $app2 Um dos comandos mais poderosos é o `New-GradioSessionApiProxyFunction` (ou alias GradioApiFunction). Este comando transforma as APIs do Gradio da session em funções powershell, isto é, você pode invocar a API como se fosse uma função powershell. Vamos voltar ao exemplo anterior # primeiro, abrindo a sessao! New-GradioSession http://127.0.0.1:7860 # Agora, vamos criar as funcoes! New-GradioSessionApiProxyFunction O código acima vai gerar uma funão powershell chamada Invoke-GradioApiOp1. Esta função tem os mesmos parâmetros que o endpoint '/op1', e você pode usar o get-help para mais informacoes: get-help -full Invoke-GradioApiOp1 Para executar, é só invocar: Invoke-GradioApiOp1 -Duration 10 | %{ "ElapsedSeconds: $($_.data)" } Note como o parâmetro `Duration` definido na app gradio virou um parâmetro powershell. Por debaixo dos panos, Invoke-GradioApiOp1 está executando o `Update-GradioApiResult`, isto é, o retorno é o mesmo objeto! Mas, perceba o quanto foi mais simples invocar a API do Gradio e receber o resultado! Apps que definem arquivos, como músicas, imagens, etc., geram funções que automaticamente fazem o upload desses arquivos. O usuário precida apenas especificar o caminho local. Eventualment,e pode existir algum ou outro tipo de dado não suportado na conversão, e, caso você encontre, abra uma issue (ou submeta um PR) para avaliarmos e implementarmos! Comandos HuggingFace* (ou Hf*) Os comandos deste grupo foram criados para operar com a API do Hugging Face. Basicamente, eles encapsulam as chamadas HTTP para os diversos endpoints do Hugging Face. Um exemplo: Get-HuggingFaceSpace rrg92/diffusers-labs Este comando retorna um objeto que contém diversas informações sobre o space diffusers-labs, do usuário rrg92. Como é um space gradio, você pode conectá-lo com os demais cmdlets (os cmdlets GradioSession conseguem entender quando um objeto retornado por Get-HuggingFaceSpace é passado para eles!) # Conectar no space (e, automatic, cria uma gradio session) $diff = Get-HuggingFaceSpace rrg92/diffusers-labs #Default Set-GradioSession -Default $diff # Cria funcoes! New-GradioSessionApiProxyFunction # invoca! Invoke-GradioApiGenerateimage -Prompt "a car flying" IMPORTANTE: Lembre-se que acesso a determindados spaces pode ser feito apenas com autenticação, nestes casos, você deve usar o Set-HuggingFaceToken e especificar um token de acesso.; |