Skip to content

Instantly share code, notes, and snippets.

@GBurgardt
Created July 11, 2024 01:14
Show Gist options
  • Save GBurgardt/5d6659fed1edaac45e4d815286b7cc18 to your computer and use it in GitHub Desktop.
Save GBurgardt/5d6659fed1edaac45e4d815286b7cc18 to your computer and use it in GitHub Desktop.
bot-claude-img
const screenshot = require("screenshot-desktop");
const fs = require("fs");
const path = require("path");
const Anthropic = require("@anthropic-ai/sdk");
const sizeOf = require("image-size");
// usa dotenv
require("dotenv").config();
// Asegrate de que la clave API esté configurada
const CLAUDE_API_KEY = process.env.CLAUDE_API_KEY;
if (!CLAUDE_API_KEY) {
console.error(
"Error: La clave API de Claude no está configurada. Por favor, configura la variable de entorno CLAUDE_API_KEY."
);
process.exit(1);
}
// Configurar el cliente de Anthropic
const anthropic = new Anthropic({
apiKey: CLAUDE_API_KEY,
});
// Crear un directorio para guardar las capturas si no existe
const outputDir = path.join(__dirname, "capturas");
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}
async function tomarCapturaYAnalizar() {
const timestamp = new Date().toISOString().replace(/:/g, "-");
const filename = path.join(outputDir, `captura_${timestamp}.png`);
try {
await screenshot({ filename: filename });
console.log(`Captura guardada: ${filename}`);
// Verificar que la imagen sea válida
const dimensions = sizeOf(filename);
console.log(
`Dimensiones de la imagen: ${dimensions.width}x${dimensions.height}`
);
// Leer la imagen como buffer y convertirla a base64
const imageBuffer = fs.readFileSync(filename);
const base64Image = imageBuffer.toString("base64");
// Después de convertir la imagen a base64
console.log(
"Primeros 100 caracteres de base64Image:",
base64Image.substring(0, 100)
);
console.log("Longitud de base64Image:", base64Image.length);
// Enviar la imagen a Claude para análisis
const response = await anthropic.messages.create({
model: "claude-3-sonnet-20240229",
max_tokens: 1000,
messages: [
{
role: "user",
content: [
{
type: "image",
source: {
type: "base64",
media_type: "image/jpeg",
data: base64Image,
},
},
{
type: "text",
text: `
Eres un experto en trading. Debes ayudarme con una tarea.
Contexto binarias, temporalidad 5 minutos.
Tu tarea es cantar la entrada en el mercado. Si debes entrar o no. Y con cuanto y en que dirección
Debes responder en este formato:
ejemplo del formato:
{
accionar: true,
direccion: "down",
cant: 5,
explicacion: <breve_consisa_explicación>
}
Donde cant es 5 usd.
Entonces, tu tarea es siempre decirnos si accionamos o no para la vela que sigue digamos.
Solo respondeme con el json
`,
},
],
},
],
});
console.log("Análisis de Claude:", response.content[0].text);
} catch (err) {
console.error("Error al procesar la captura:", err);
if (err.error && err.error.error) {
console.error("Detalles del error:", err.error.error);
}
}
}
// Ejecutar la función inmediatamente y luego cada 10 segundos
tomarCapturaYAnalizar();
setInterval(tomarCapturaYAnalizar, 10000);
console.log("Script iniciado. Presiona Ctrl+C para detener.");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment