Node-Packages / anthropic.yaml
mypiper's picture
Update anthropic.yaml
446d7e5 verified
_id: anthropic
title: Anthropic
description: Ask Claude agent
version: 1
readme: The first base version
url: https://huggingface.co/PiperMy/Node-Packages/resolve/main/anthropic.yaml
nodes:
ask_claude:
_id: ask_claude
arrange:
x: 140
y: 90
category:
id: llm_agents
title: en=Language Agents;ru=Языковые агенты
environment:
ANTHROPIC_API_KEY:
title: Anthropic API key
type: string
scope: global
inputs:
question:
order: 2
title: en=Question;ru=Вопрос
type: string
required: true
multiline: true
model:
order: 2
title: en=Model;ru=Модель
type: string
required: true
default: claude-3-5-sonnet-latest
enum:
- claude-3-5-sonnet-latest|Claude 3.5 Sonnet
answerFormat:
order: 3
title: en=Answer format;ru=Формат ответа
description: Don't forget add instructions for LLM
type: string
required: true
default: text
enum:
- text|Text
- json|JSON
outputs:
answer:
title: en=Answer;ru=Ответ
type: string
json:
title: JSON
type: json
package: anthropic
script: |
export async function costs({ inputs }) {
return 0.05;
}
export async function run({ inputs }) {
const { FatalError, NextNode } = DEFINITIONS;
const Anthropic = require('@anthropic-ai/sdk');
const ANTHROPIC_API_KEY = env?.variables?.get('ANTHROPIC_API_KEY');
if (!ANTHROPIC_API_KEY) {
throw new FatalError('Please, set your API key for Anthropic');
}
const client = new Anthropic({ apiKey: ANTHROPIC_API_KEY });
const { model, question, answerFormat } = inputs;
const message = await client.messages.create({
max_tokens: 1024,
messages: [{ role: 'user', content: question }],
model
});
const { content: [{ type, text: answer }] } = message;
switch (answerFormat) {
case 'text':
return NextNode.from({ outputs: { answer }, costs: await costs({ inputs }) });
case 'json':
try {
const json = answer.replace(/^\`\`\`json\s*/ig, '').replace(/\`\`\`\s*$/ig, '');
return NextNode.from({ outputs: { json: JSON.parse(json) }, costs: await costs({ inputs }) });
} catch (e) {
log(e);
message(`Wrong JSON for question \`\`\`text\n${question}\n\`\`\`\nnanswer from LLM\n\`\`\`text${answer}\n\`\`\``, 'defect');
throw new FatalError("Can't parse JSON asnwer from LLM");
}
default:
throw new FatalError(`Wrong answer format ${answerFormat}`);
}
}
source: catalog
title: en=Ask Claude;ru=Спросить Claude
version: 1
costs: |-
(() => {
return 0.001;
})();