UNPKG

hataraku

Version:

An autonomous coding agent for building AI-powered development tools. The name "Hataraku" (働く) means "to work" in Japanese.

129 lines 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createKnowledgeBaseProvider = createKnowledgeBaseProvider; exports.doStream = doStream; const client_bedrock_agent_runtime_1 = require("@aws-sdk/client-bedrock-agent-runtime"); async function createKnowledgeBaseProvider(client, config) { // Default configuration values const defaultConfig = { modelArn: "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0", region: 'us-east-1' }; // Merge provided config with defaults const effectiveConfig = { ...defaultConfig, ...config }; // Validate that knowledgeBaseId is provided if (!effectiveConfig.knowledgeBaseId) { throw new Error('Knowledge Base ID is required. Please provide it via CLI (--kb-id), environment variable (KB_ID), or in your profile configuration.'); } return async function query(text) { const command = new client_bedrock_agent_runtime_1.RetrieveAndGenerateCommand({ input: { text }, retrieveAndGenerateConfiguration: { type: "KNOWLEDGE_BASE", knowledgeBaseConfiguration: { knowledgeBaseId: effectiveConfig.knowledgeBaseId, modelArn: effectiveConfig.modelArn, retrievalConfiguration: { vectorSearchConfiguration: { numberOfResults: 75, } } } } }); try { const response = await client.send(command); const content = response.output?.text || ""; // Extract source URLs from citations const sources = response.citations?.flatMap(citation => citation.retrievedReferences?.map(reference => { // Get URL from web location if available let url = reference.location?.type === 'WEB' ? reference.location.webLocation?.url : undefined; // Get content from the reference const referenceContent = reference.content?.text; // Get source type const sourceType = reference.location?.type || 'UNKNOWN'; // Include all metadata for debugging const allMetadata = reference.metadata ? { ...reference.metadata } : {}; // Try to get source URI from metadata if not available from location if (!url && allMetadata['x-amz-bedrock-kb-source-uri']) { url = allMetadata['x-amz-bedrock-kb-source-uri']; } // Get document title from metadata if available const docTitle = allMetadata['x-amz-bedrock-kb-title'] || undefined; return { url, title: docTitle || `${sourceType} Document`, content: referenceContent, metadata: allMetadata, sourceType }; }) || []) || []; return { content: content, sources, metadata: { responseId: response.$metadata.requestId, timestamp: response.$metadata.attempts?.[0]?.timestamp } }; } catch (error) { console.error('Error querying knowledge base:', error); // Check for specific AWS errors if (error instanceof Error) { const errorMessage = error.message; if (errorMessage.includes('AccessDenied')) { return { content: `AWS Access Denied Error: You don't have permission to access this knowledge base. Please check your IAM policies.`, metadata: { error: errorMessage }, sources: [] }; } if (errorMessage.includes('ResourceNotFoundException')) { return { content: `Knowledge Base Not Found: The knowledge base ID '${effectiveConfig.knowledgeBaseId}' could not be found. Please verify it exists in your AWS account and region (${effectiveConfig.region}). You can specify a different knowledge base ID using the --kb-id option.`, metadata: { error: errorMessage }, sources: [] }; } if (errorMessage.includes('ValidationException')) { if (errorMessage.includes('knowledgeBaseId')) { return { content: `Invalid Knowledge Base ID: '${effectiveConfig.knowledgeBaseId}'. Please provide a valid knowledge base ID using the --kb-id option or KB_ID environment variable.`, metadata: { error: errorMessage }, sources: [] }; } return { content: `Validation Error: ${errorMessage}. This may be due to incorrect knowledge base configuration.`, metadata: { error: errorMessage }, sources: [] }; } return { content: `Error querying knowledge base: ${errorMessage}`, metadata: { error: errorMessage, stack: error.stack }, sources: [] }; } return { content: 'An unknown error occurred while querying the knowledge base.', metadata: { error: String(error) }, sources: [] }; } }; } async function* doStream(query) { const response = await query(""); yield response; } //# sourceMappingURL=knowledge-base.js.map