Desenvolvimento local
Instale e execute o Potato localmente para desenvolvimento e testes. Aborda a instalação via pip, a configuração, a inicialização do servidor e a depuração de problemas comuns de inicialização.
Coloque o Potato em execução na sua máquina local para desenvolvimento e testes.
Pré-requisitos
- Python 3.9 ou superior
- Gerenciador de pacotes pip
- Git (opcional, para clonar exemplos)
Instalação
Usando pip (recomendado)
pip install potato-annotationA partir do código-fonte
git clone https://github.com/davidjurgens/potato.git
cd potato
pip install -e .Com dependências opcionais
# Local speech-to-text and diarization for transcript projects
pip install "potato-annotation[transcribe]"
# Hosted model providers for AI support and active learning
pip install "potato-annotation[ai]"
# Everything except the multi-gigabyte server-side vision stack
pip install "potato-annotation[all]"Coloque o extra entre aspas para que o shell não interprete os colchetes como um padrão glob. all deixa vision de fora de propósito, porque esse grupo instala o torch e nada na experiência padrão precisa dele.
Início rápido
1. Crie um arquivo de configuração
Crie config.yaml:
annotation_task_name: "My First Annotation Task"
task_dir: "."
port: 8000
data_files:
- data.json
item_properties:
id_key: id
text_key: text
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment?"
labels:
- Positive
- Negative
- Neutral
output_annotation_dir: "annotations/"task_dir é a raiz contra a qual todos os outros caminhos relativos são resolvidos, e o Potato se recusa a ler fora dela. Defini-la como . mantém a configuração, o arquivo de dados e o diretório de saída em uma única pasta, e é isso que permite mover o projeto para um servidor depois.
2. Prepare dados de exemplo
Crie data.json:
[
{"id": "1", "text": "I love this product!"},
{"id": "2", "text": "This is terrible."},
{"id": "3", "text": "It's okay, nothing special."}
]3. Inicie o servidor
potato start config.yaml4. Acesse a interface
Abra seu navegador em http://localhost:8000
Modo de desenvolvimento
Modo de depuração
O modo de depuração ativa o log detalhado, desliga o tempo limite de inatividade da sessão e abre as páginas de administração sem chave para requisições vindas da sua própria máquina. A página de login continua, e --debug-phase (abaixo) a pula:
potato start config.yaml --debugNunca ative o modo de depuração em um servidor implantado. Um túnel ou proxy reverso na mesma máquina que não adiciona nenhum cabeçalho de encaminhamento faz todo chamador parecer local, e --debug-phase faz todo visitante entrar como o mesmo debug_user. As versões 2.8.2 a 2.11.0 do Potato se recusam a iniciar em modo de depuração no endereço padrão 0.0.0.0, então nessas versões adicione --host 127.0.0.1.
Log de depuração
Escolha qual lado da aplicação gera os logs:
potato start config.yaml --debug-log serverOs valores aceitos são all, ui, server e none. Use ui quando a página de anotação se comportar de forma estranha e server quando um item não carregar.
Saída detalhada
Veja toda a atividade do servidor:
potato start config.yaml --verbosePular para uma fase
Com --debug ativado, pule o login e vá direto para a fase em que você está trabalhando em vez de passar pelo consentimento e pelas instruções a cada reinício:
potato start config.yaml --debug --debug-phase annotationEstrutura de diretórios
Layout de projeto recomendado:
my-annotation-project/
├── config.yaml # Main configuration, inside task_dir
├── data/
│ ├── training.json # Practice items for the training phase
│ └── main.json # Annotation data
├── annotations/ # output_annotation_dir
├── media/ # media_directory, served at /media/
└── templates/ # site_dir, if you override the default templates
Apenas config.yaml e o arquivo de dados são obrigatórios. O Potato traz seus próprios templates, então defina site_dir e adicione uma pasta templates/ somente quando for substituí-los, e aponte site_file para um arquivo específico com o qual renderizar a página de anotação.
Testando sua configuração
Validar a configuração
Verifique a configuração do mesmo jeito que o servidor a verifica na inicialização, antes de gastar uma inicialização com ela:
potato validate config.yamlAdicione --strict para que avisos, como uma chave não reconhecida, façam a execução falhar em vez de serem impressos e deixarem passar.
Modo de pré-visualização
Mostre o que uma configuração declara e renderize-a em um navegador sem iniciar um servidor completo:
potato preview config.yamlCapturas de tela precisam do extra do navegador headless, pip install "potato-annotation[preview]":
potato preview config.yaml --screenshot preview.pngProblemas comuns
Porta já em uso
# Use a different port
potato start config.yaml -p 8080Ou defina a porta em config.yaml, que a opção -p então sobrescreve:
port: 8080Arquivo de dados não encontrado
Garanta que os caminhos sejam relativos à localização do arquivo de configuração:
# If data is in a subdirectory
data_files:
- data/main.jsonOs caminhos são resolvidos contra task_dir, e o Potato se recusa a carregar um arquivo fora dele, então mova os dados para dentro do diretório da tarefa em vez de apontar para um caminho absoluto em outro lugar da máquina.
Permissão negada
Verifique as permissões dos arquivos:
chmod 755 annotations/
chmod 644 data/*.jsonVários usuários localmente
Para testar cenários multiusuário:
user_config:
allow_all_users: true
login:
type: url_direct
url_argument: user_idurl_direct lê o nome de usuário diretamente da URL e não pede senha, então você pode abrir dois perfis de navegador e anotar como duas pessoas sem registrar contas:
http://localhost:8000/?user_id=annotator1http://localhost:8000/?user_id=annotator2
Redefinir anotações
O Potato grava um diretório por anotador dentro de output_annotation_dir, cada um com o user_state.json daquela pessoa:
# Remove one annotator's work
rm -rf annotations/annotator1
# Or clear every annotator
rm -rf annotations/*
# Restart server
potato start config.yamlRemover o diretório de um usuário remove as atribuições dele junto com as respostas, então uma nova execução atribui os itens novamente do zero.
Variáveis de ambiente
Configure via ambiente:
# Keeps sessions valid across restarts; required for OAuth
export POTATO_SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
# Fixes the shared admin key instead of letting Potato generate one per task
export POTATO_ADMIN_API_KEY="your-admin-key"
potato start config.yamlSem POTATO_SECRET_KEY, o Potato gera uma chave de assinatura aleatória a cada inicialização, o que desconecta todo mundo a cada reinício.
Usando com ambientes virtuais
venv
python -m venv potato-env
source potato-env/bin/activate # Linux/Mac
potato-env\Scripts\activate # Windows
pip install potato-annotationConda
conda create -n potato python=3.10
conda activate potato
pip install potato-annotationIntegração com IDE
VS Code
Instale a extensão YAML para suporte ao arquivo de configuração:
// settings.json
{
"yaml.schemas": {
"https://potatoannotator.readthedocs.io/en/latest/schemas/potato-config.schema.json": "config.yaml"
}
}Configurações baixadas do playground já trazem esse esquema em uma linha # yaml-language-server:, então são validadas no editor sem essa configuração.
PyCharm
Crie uma configuração de execução:
- Add → Python
- Script:
potato - Parâmetros:
start config.yaml - Diretório de trabalho: o caminho do seu projeto
Próximos passos
- Noções básicas de configuração - Conheça todas as opções de configuração
- Formatos de dados - Entenda a estrutura dos dados
- Configuração de produção - Faça a implantação para uso real