Imagens
Uma memória pode carregar uma imagem. O motor indexa a imagem, então uma consulta em texto em qualquer idioma a encontra mesmo quando o registro não tem legenda, título nem texto alternativo.
Armazenar uma
Passe um objeto image para a chamada comum de add. content pode ficar vazio; nesse caso a imagem é pesquisável sozinha.
mem.add("at the beach", image={"data": b64}) # caption + image
mem.add("", image={"data": b64}) # the image IS the memorydata é obrigatório. O prefixo data:image/jpeg;base64, e as quebras de linha adicionadas por base64 e openssl são removidos para você.
| Campo | O que faz |
|---|---|
| data | Base64 da imagem. Obrigatório. O teto de tamanho é uma configuração do servidor, não uma constante do SDK - /health o informa como memory.images.max_bytes. |
| reference | Onde fica a sua própria cópia do original. Armazenado como string e nunca acessado por nós - e é exatamente o lugar dela, já que o que guardamos está reduzido. |
| taken_at | RFC3339, normalmente vindo do EXIF. Preenche event_date quando esse campo está vazio, então a memória é ordenada por quando a imagem foi tirada, não por quando foi enviada. |
Encontrar uma
Não existe uma busca separada para imagens. search e recall retornam imagens junto com texto, classificadas em conjunto.
Trabalhar com as que já existem
data, mime = mem.get_image(memory_id=mid)
page = mem.list_images(limit=50) # page["count"] = store total
mem.forget_image(memory_id=mid, preview=True)| Chamada | O que faz |
|---|---|
| get_image | A imagem que guardamos, como (bytes, content_type) - não necessariamente a que você enviou. Uma imagem cujo lado maior passava de 1.568 px foi guardada reduzida e recodificada para WebP, a menos que fosse JPEG, então um PNG volta como image/webp. O tipo é detectado a partir dos bytes, não do nome com que o upload foi enviado: dê nome ao arquivo com base em content_type. Uma memória sem imagem lança um erro em vez de retornar algo vazio. |
| list_images | Uma página, da mais recente para a mais antiga, mais count - o total do store, não o tamanho da página. A paginação é por cursor: devolva next_before e next_skip_ids. Os dois são necessários porque imagens podem compartilhar o mesmo timestamp. |
| forget_image | Remove a imagem e mantém o texto. Uma imagem armazenada sem legenda é a memória, então nesse caso a memória também é apagada. |
Passe preview=True para forget_image para obter memory_kept sem alterar nada. iter_images pagina para você.
Quanto custa uma imagem
Uma imagem é cobrada em tokens, a mesma unidade do texto. Tokens = área em pixels / 556,7. Acima de 1.568 px no lado maior a contagem é feita a 1.568 px, então uma imagem de 2.500 px custa o mesmo que uma de 1.568 px.
| Imagem | Contabilizada em | Tokens |
|---|---|---|
| 700 × 700 | as sent | 881 |
| 1000 × 1000 | as sent | 1,797 |
| 1568 × 1568 | as sent | 4,417 |
| 1920 × 1080 | 1568 × 882 | 2,485 |
| 2500 × 1875 | 1568 × 1176 | 3,313 |
| 2500 × 2500 | 1568 × 1568 | 4,417 |
Teto: 4.417 tokens por imagem. Reservamos esse teto do seu saldo antes da chamada e cobramos depois o valor medido, que nunca é maior.
image/webp. JPEG continua JPEG e, abaixo de 1.568 px, os bytes não são tocados. (Se a recodificação deixasse o arquivo maior, mantemos os seus bytes como estavam.) Os dois lados ainda precisam ser ≥ 700 px e o lado maior ≤ 2.500 px, caso contrário a chamada é recusada com um 400 - abaixo de 700 px aplica-se um mínimo fixo, então uma imagem menor custa o mesmo para armazenar, e acima de 2.500 px não decodificamos o arquivo de forma alguma. Guarde a sua própria cópia, ou coloque a URL dela em reference, se precisar do arquivo em resolução total.Quantas retornam
Padrão 1, máximo de 5 imagens por resposta. Cinco imagens ficam perto de 20.000 tokens.
| Campo | O que faz |
|---|---|
| max_images | De 0 a 5. Imagens que uma única resposta pode carregar. Padrão 1. 0 retorna apenas texto. Fora do intervalo é recusado, não ajustado ao limite. |