_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; })();