@honeagents/hone 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +316 -0
- package/dist/index.d.mts +674 -0
- package/dist/index.d.ts +674 -0
- package/dist/index.js +570 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +543 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/agent.ts","../src/client.ts","../src/providers.ts","../src/tools.ts"],"names":["node","AIProvider"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n GetAgentOptions,\n GetToolOptions,\n GetTextPromptOptions,\n AgentNode,\n ToolNode,\n TextPromptNode,\n EntityNode,\n AgentRequest,\n AgentRequestItem,\n EntityRequest,\n EntityRequestItem,\n SimpleParams,\n EntityType,\n ParamsValue,\n} from \"./types\";\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\n/**\n * Type guard to check if a ParamsValue is GetAgentOptions\n */\nexport function isAgentOptions(value: ParamsValue): value is GetAgentOptions {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"defaultPrompt\" in value &&\n \"model\" in value &&\n \"provider\" in value\n );\n}\n\n/**\n * Type guard to check if a ParamsValue is GetToolOptions\n * Tools have defaultPrompt but NOT model/provider, and have a distinguishing property\n * We need to differentiate from text prompts - tools typically have more complex usage\n * For now, we'll use a convention: if it has NO extra properties beyond the base, it's a text prompt\n */\nexport function isToolOptions(value: ParamsValue): value is GetToolOptions {\n if (\n typeof value !== \"object\" ||\n value === null ||\n !(\"defaultPrompt\" in value) ||\n \"model\" in value ||\n \"provider\" in value\n ) {\n return false;\n }\n // Tools are explicitly marked or have tool-specific properties\n // For backwards compatibility, treat options with only base props as text prompts\n // unless explicitly marked\n return \"_type\" in value && value._type === \"tool\";\n}\n\n/**\n * Type guard to check if a ParamsValue is GetTextPromptOptions\n * Text prompts are the simplest - just defaultPrompt and optional params/version\n */\nexport function isTextPromptOptions(value: ParamsValue): value is GetTextPromptOptions {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"defaultPrompt\" in value &&\n !(\"model\" in value) &&\n !(\"provider\" in value) &&\n !(\"_type\" in value && value._type === \"tool\")\n );\n}\n\n// =============================================================================\n// Node Construction\n// =============================================================================\n\n/**\n * Constructs an AgentNode from the given id and GetAgentOptions.\n * Traverses nested agents/tools recursively.\n *\n * @param id the unique identifier for the agent node\n * @param options the GetAgentOptions containing agent details and parameters\n * @param ancestorIds Set of ancestor IDs to detect circular references\n * @returns AgentNode\n * @throws Error if a self-reference or circular reference is detected\n */\nexport function getAgentNode(\n id: string,\n options: GetAgentOptions,\n ancestorIds: Set<string> = new Set()\n): AgentNode {\n const node = getEntityNode(id, \"agent\", options, ancestorIds);\n return node as AgentNode;\n}\n\n/**\n * Constructs a ToolNode from the given id and GetToolOptions.\n * Traverses nested agents/tools recursively.\n *\n * @param id the unique identifier for the tool node\n * @param options the GetToolOptions containing tool details and parameters\n * @param ancestorIds Set of ancestor IDs to detect circular references\n * @returns ToolNode\n * @throws Error if a self-reference or circular reference is detected\n */\nexport function getToolNode(\n id: string,\n options: GetToolOptions,\n ancestorIds: Set<string> = new Set()\n): ToolNode {\n const node = getEntityNode(id, \"tool\", options, ancestorIds);\n return node as ToolNode;\n}\n\n/**\n * Constructs a TextPromptNode from the given id and GetTextPromptOptions.\n * Traverses nested prompts recursively.\n *\n * @param id the unique identifier for the text prompt node\n * @param options the GetTextPromptOptions containing prompt details and parameters\n * @param ancestorIds Set of ancestor IDs to detect circular references\n * @returns TextPromptNode\n * @throws Error if a self-reference or circular reference is detected\n */\nexport function getTextPromptNode(\n id: string,\n options: GetTextPromptOptions,\n ancestorIds: Set<string> = new Set()\n): TextPromptNode {\n const node = getEntityNode(id, \"prompt\", options, ancestorIds);\n return node as TextPromptNode;\n}\n\n/**\n * Internal: Constructs an EntityNode from the given id, type, and options.\n * Handles agents, tools, and text prompts.\n */\nfunction getEntityNode(\n id: string,\n type: EntityType,\n options: GetAgentOptions | GetToolOptions | GetTextPromptOptions,\n ancestorIds: Set<string> = new Set()\n): EntityNode {\n // Check for self-reference\n if (options?.params && id in options.params) {\n throw new Error(\n `Self-referencing ${type} detected: ${type} \"${id}\" cannot reference itself as a parameter`\n );\n }\n\n // Check for circular reference\n if (ancestorIds.has(id)) {\n const path = Array.from(ancestorIds).concat(id).join(\" -> \");\n throw new Error(`Circular ${type} reference detected: ${path}`);\n }\n\n const children: EntityNode[] = [];\n const newAncestorIds = new Set(ancestorIds).add(id);\n const simpleParams: SimpleParams = {};\n\n for (const [paramId, value] of Object.entries(options?.params || {})) {\n if (typeof value === \"string\") {\n simpleParams[paramId] = value;\n } else if (isAgentOptions(value)) {\n children.push(getEntityNode(paramId, \"agent\", value, newAncestorIds));\n } else if (isToolOptions(value)) {\n children.push(getEntityNode(paramId, \"tool\", value, newAncestorIds));\n } else if (isTextPromptOptions(value)) {\n children.push(getEntityNode(paramId, \"prompt\", value, newAncestorIds));\n }\n }\n\n // Build the base node\n const node: EntityNode = {\n id,\n type,\n majorVersion: options.majorVersion,\n name: options.name,\n params: simpleParams,\n prompt: options.defaultPrompt,\n children,\n };\n\n // Add hyperparameters only for agents\n if (type === \"agent\" && isAgentOptions(options)) {\n node.model = options.model;\n node.provider = options.provider;\n node.temperature = options.temperature;\n node.maxTokens = options.maxTokens;\n node.topP = options.topP;\n node.frequencyPenalty = options.frequencyPenalty;\n node.presencePenalty = options.presencePenalty;\n node.stopSequences = options.stopSequences;\n node.tools = options.tools;\n }\n\n return node;\n}\n\n// =============================================================================\n// Evaluation\n// =============================================================================\n\n/**\n * Evaluates an EntityNode by recursively inserting parameters and nested entities.\n *\n * @param node The root EntityNode to evaluate.\n * @returns The fully evaluated prompt string.\n * @throws Error if any placeholders in the prompt don't have corresponding parameter values\n */\nexport function evaluateEntity(node: EntityNode): string {\n const evaluated = new Map<string, string>();\n\n function evaluate(node: EntityNode): string {\n if (evaluated.has(node.id)) {\n return evaluated.get(node.id)!;\n }\n\n const params: SimpleParams = { ...node.params };\n\n // Evaluate all children first (depth-first)\n for (const child of node.children) {\n params[child.id] = evaluate(child);\n }\n\n // Validate that all placeholders have corresponding parameters\n validateEntityParams(node.prompt, params, node.id, node.type);\n\n // Insert evaluated children into this prompt\n const result = insertParamsIntoPrompt(node.prompt, params);\n evaluated.set(node.id, result);\n return result;\n }\n\n return evaluate(node);\n}\n\n/**\n * Evaluates an AgentNode (alias for evaluateEntity for backwards compatibility)\n */\nexport function evaluateAgent(node: AgentNode): string {\n return evaluateEntity(node);\n}\n\n/**\n * Evaluates a ToolNode (alias for evaluateEntity)\n */\nexport function evaluateTool(node: ToolNode): string {\n return evaluateEntity(node);\n}\n\n/**\n * Evaluates a TextPromptNode (alias for evaluateEntity)\n */\nexport function evaluateTextPrompt(node: TextPromptNode): string {\n return evaluateEntity(node);\n}\n\n/**\n * Validates that all placeholders in a prompt have corresponding parameter values.\n */\nfunction validateEntityParams(\n prompt: string,\n params: SimpleParams,\n nodeId: string,\n type: EntityType\n): void {\n const placeholderRegex = /\\{\\{(\\w+)\\}\\}/g;\n const matches = prompt.matchAll(placeholderRegex);\n const missingParams: string[] = [];\n\n for (const match of matches) {\n const paramName = match[1];\n if (!(paramName in params)) {\n missingParams.push(paramName);\n }\n }\n\n if (missingParams.length > 0) {\n const uniqueMissing = [...new Set(missingParams)];\n throw new Error(\n `Missing parameter${uniqueMissing.length > 1 ? \"s\" : \"\"} in ${type} \"${nodeId}\": ${uniqueMissing.join(\", \")}`\n );\n }\n}\n\n/**\n * Inserts parameters into a prompt template.\n *\n * @param prompt The prompt template containing placeholders in the form `{{variableName}}`.\n * @param params An object mapping variable names to their replacement values.\n * @returns The prompt with all placeholders replaced by their corresponding values.\n */\nexport function insertParamsIntoPrompt(\n prompt: string,\n params?: SimpleParams\n): string {\n if (!params) return prompt;\n\n let result = prompt;\n for (const [key, value] of Object.entries(params)) {\n result = result.replace(new RegExp(`{{${key}}}`, \"g\"), value);\n }\n return result;\n}\n\n// =============================================================================\n// Traversal\n// =============================================================================\n\n/**\n * Traverses an EntityNode tree and applies a callback to each node.\n */\nexport function traverseEntityNode(\n node: EntityNode,\n callback: (node: EntityNode, parentId: string | null) => void,\n parentId: string | null = null\n) {\n callback(node, parentId);\n for (const child of node.children) {\n traverseEntityNode(child, callback, node.id);\n }\n}\n\n/**\n * Traverses an AgentNode tree (alias for backwards compatibility)\n */\nexport function traverseAgentNode(\n node: AgentNode,\n callback: (node: AgentNode, parentId: string | null) => void,\n parentId: string | null = null\n) {\n traverseEntityNode(\n node,\n callback as (node: EntityNode, parentId: string | null) => void,\n parentId\n );\n}\n\n// =============================================================================\n// Request Formatting\n// =============================================================================\n\n/**\n * Formats an EntityNode into an EntityRequest suitable for the /sync_entities API.\n */\nexport function formatEntityRequest(node: EntityNode): EntityRequest {\n function formatNode(node: EntityNode): EntityRequestItem {\n const paramKeys = [\n ...Object.keys(node.params),\n ...node.children.map((child) => child.id),\n ];\n return {\n id: node.id,\n type: node.type,\n name: node.name,\n majorVersion: node.majorVersion,\n prompt: node.prompt,\n paramKeys,\n childrenIds: node.children.map((child) => child.id),\n childrenTypes: node.children.map((child) => child.type),\n // Hyperparameters (only for agents)\n model: node.model,\n provider: node.provider,\n temperature: node.temperature,\n maxTokens: node.maxTokens,\n topP: node.topP,\n frequencyPenalty: node.frequencyPenalty,\n presencePenalty: node.presencePenalty,\n stopSequences: node.stopSequences,\n tools: node.tools,\n };\n }\n\n const map: Record<string, EntityRequestItem> = {};\n\n traverseEntityNode(node, (currentNode) => {\n map[currentNode.id] = formatNode(currentNode);\n });\n\n return {\n entities: {\n rootId: node.id,\n rootType: node.type,\n map,\n },\n };\n}\n\n/**\n * Formats an AgentNode into an AgentRequest suitable for the /sync_agents API.\n * (Backwards compatible format)\n */\nexport function formatAgentRequest(node: AgentNode): AgentRequest {\n function formatNode(node: AgentNode): AgentRequestItem {\n const paramKeys = [\n ...Object.keys(node.params),\n ...node.children.map((child) => child.id),\n ];\n return {\n id: node.id,\n type: node.type,\n name: node.name,\n majorVersion: node.majorVersion,\n prompt: node.prompt,\n paramKeys,\n childrenIds: node.children.map((child) => child.id),\n // Hyperparameters\n model: node.model,\n provider: node.provider,\n temperature: node.temperature,\n maxTokens: node.maxTokens,\n topP: node.topP,\n frequencyPenalty: node.frequencyPenalty,\n presencePenalty: node.presencePenalty,\n stopSequences: node.stopSequences,\n tools: node.tools,\n };\n }\n\n const map: Record<string, AgentRequestItem> = {};\n\n traverseAgentNode(node, (currentNode) => {\n map[currentNode.id] = formatNode(currentNode as AgentNode);\n });\n\n return {\n agents: {\n rootId: node.id,\n map,\n },\n };\n}\n\n// =============================================================================\n// Node Updates\n// =============================================================================\n\n/**\n * Updates all nodes in an EntityNode tree using a callback function.\n */\nexport function updateEntityNodes(\n root: EntityNode,\n callback: (entityNode: EntityNode) => EntityNode\n): EntityNode {\n function updateNode(node: EntityNode): EntityNode {\n const updatedChildren = node.children.map(updateNode);\n const updatedNode = { ...node, children: updatedChildren };\n return callback(updatedNode);\n }\n return updateNode(root);\n}\n\n/**\n * Updates all nodes in an AgentNode tree (alias for backwards compatibility)\n */\nexport function updateAgentNodes(\n root: AgentNode,\n callback: (agentNode: AgentNode) => AgentNode\n): AgentNode {\n return updateEntityNodes(\n root,\n callback as (node: EntityNode) => EntityNode\n ) as AgentNode;\n}\n\n// =============================================================================\n// Backwards Compatibility Aliases (deprecated)\n// =============================================================================\n\n/** @deprecated Use getAgentNode instead */\nexport const getPromptNode = getAgentNode;\n\n/** @deprecated Use evaluateAgent instead */\nexport const evaluatePrompt = evaluateAgent;\n\n/** @deprecated Use traverseAgentNode instead */\nexport const traversePromptNode = traverseAgentNode;\n\n/** @deprecated Use formatAgentRequest instead */\nexport const formatPromptRequest = formatAgentRequest;\n\n/** @deprecated Use updateAgentNodes instead */\nexport const updatePromptNodes = updateAgentNodes;\n","// client.ts\nimport {\n GetAgentOptions,\n GetToolOptions,\n GetTextPromptOptions,\n HoneClient,\n HoneConfig,\n Message,\n AgentResult,\n ToolResult,\n TextPromptResult,\n EntityRequest,\n EntityResponse,\n TrackConversationOptions,\n TrackRequest,\n TrackResponse,\n} from \"./types\";\nimport {\n evaluateAgent,\n evaluateEntity,\n formatEntityRequest,\n getAgentNode,\n getToolNode,\n getTextPromptNode,\n updateAgentNodes,\n updateEntityNodes,\n} from \"./agent\";\n\nconst DEFAULT_BASE_URL = \"https://honeagents.ai/api\";\nconst DEFAULT_TIMEOUT = 10000;\n\nexport class Hone implements HoneClient {\n private apiKey: string;\n private baseUrl: string;\n private timeout: number;\n\n constructor(config: HoneConfig) {\n this.apiKey = config.apiKey;\n // Allow override from env var for local dev, then config, then default\n this.baseUrl =\n process.env.HONE_API_URL || config.baseUrl || DEFAULT_BASE_URL;\n this.timeout = config.timeout || DEFAULT_TIMEOUT;\n }\n\n private async makeRequest<Request, Response>(\n endpoint: string,\n method: string = \"GET\",\n body?: Request,\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const url = `${this.baseUrl}${endpoint}`;\n console.log(`Hone API Request: ${method} ${url}`);\n const response = await fetch(url, {\n method,\n headers: {\n \"x-api-key\": this.apiKey,\n \"Content-Type\": \"application/json\",\n \"User-Agent\": \"hone-sdk-typescript/0.1.0\",\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as {\n message?: string;\n error?: string;\n };\n throw new Error(\n `Hone API error (${response.status}): ${errorData.error || errorData.message || response.statusText}`,\n );\n }\n\n return (await response.json()) as Response;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`Hone API request timed out after ${this.timeout}ms`);\n }\n throw error;\n }\n }\n\n async agent<TExtra extends Record<string, unknown> = Record<string, unknown>>(\n id: string,\n options: GetAgentOptions<TExtra>\n ): Promise<AgentResult<TExtra>> {\n const node = getAgentNode(id, options);\n try {\n const formattedRequest = formatEntityRequest(node);\n // Include extra data in the request\n if (options.extra) {\n const rootEntity = formattedRequest.entities.map[id];\n if (rootEntity) {\n (rootEntity as Record<string, unknown>).extra = options.extra;\n }\n }\n\n const response = await this.makeRequest<\n EntityRequest,\n { entities: EntityResponse }\n >(\"/sync_entities\", \"POST\", formattedRequest);\n\n const entityMap = response.entities;\n\n const updatedAgentNode = updateAgentNodes(node, (agentNode) => {\n const responseItem = entityMap[agentNode.id];\n return {\n ...agentNode,\n prompt: responseItem?.prompt || agentNode.prompt,\n // Update hyperparameters from API response (if present)\n model: responseItem?.model ?? agentNode.model,\n temperature: responseItem?.temperature ?? agentNode.temperature,\n maxTokens: responseItem?.maxTokens ?? agentNode.maxTokens,\n topP: responseItem?.topP ?? agentNode.topP,\n frequencyPenalty: responseItem?.frequencyPenalty ?? agentNode.frequencyPenalty,\n presencePenalty: responseItem?.presencePenalty ?? agentNode.presencePenalty,\n stopSequences: responseItem?.stopSequences ?? agentNode.stopSequences,\n };\n });\n\n // Get the root agent's hyperparameters and extra from the response\n const rootResponse = entityMap[id];\n const extraFromResponse = (rootResponse?.extra ?? options.extra ?? {}) as TExtra;\n\n // Params are inserted client-side for flexibility and security\n return {\n systemPrompt: evaluateAgent(updatedAgentNode),\n model: rootResponse?.model ?? options.model,\n provider: rootResponse?.provider ?? options.provider,\n temperature: rootResponse?.temperature ?? options.temperature ?? null,\n maxTokens: rootResponse?.maxTokens ?? options.maxTokens ?? null,\n topP: rootResponse?.topP ?? options.topP ?? null,\n frequencyPenalty:\n rootResponse?.frequencyPenalty ?? options.frequencyPenalty ?? null,\n presencePenalty:\n rootResponse?.presencePenalty ?? options.presencePenalty ?? null,\n stopSequences: rootResponse?.stopSequences ?? options.stopSequences ?? [],\n tools: rootResponse?.tools ?? options.tools ?? [],\n ...extraFromResponse,\n } as AgentResult<TExtra>;\n } catch (error) {\n console.log(\"Error fetching agent, using fallback:\", error);\n // Fallback: use local defaults\n const extraData = (options.extra ?? {}) as TExtra;\n return {\n systemPrompt: evaluateAgent(node),\n model: options.model,\n provider: options.provider,\n temperature: options.temperature ?? null,\n maxTokens: options.maxTokens ?? null,\n topP: options.topP ?? null,\n frequencyPenalty: options.frequencyPenalty ?? null,\n presencePenalty: options.presencePenalty ?? null,\n stopSequences: options.stopSequences ?? [],\n tools: options.tools ?? [],\n ...extraData,\n } as AgentResult<TExtra>;\n }\n }\n\n\n async tool(id: string, options: GetToolOptions): Promise<ToolResult> {\n const node = getToolNode(id, options);\n try {\n const formattedRequest = formatEntityRequest(node);\n const response = await this.makeRequest<\n EntityRequest,\n { entities: EntityResponse }\n >(\"/sync_entities\", \"POST\", formattedRequest);\n\n const entityMap = response.entities;\n\n const updatedToolNode = updateEntityNodes(node, (entityNode) => {\n const responseItem = entityMap[entityNode.id];\n return {\n ...entityNode,\n prompt: responseItem?.prompt || entityNode.prompt,\n };\n });\n\n // Params are inserted client-side for flexibility and security\n return {\n prompt: evaluateEntity(updatedToolNode),\n };\n } catch (error) {\n console.log(\"Error fetching tool, using fallback:\", error);\n // Fallback: use local defaults\n return {\n prompt: evaluateEntity(node),\n };\n }\n }\n\n async prompt(id: string, options: GetTextPromptOptions): Promise<TextPromptResult> {\n const node = getTextPromptNode(id, options);\n try {\n const formattedRequest = formatEntityRequest(node);\n const response = await this.makeRequest<\n EntityRequest,\n { entities: EntityResponse }\n >(\"/sync_entities\", \"POST\", formattedRequest);\n\n const entityMap = response.entities;\n\n const updatedPromptNode = updateEntityNodes(node, (entityNode) => {\n const responseItem = entityMap[entityNode.id];\n return {\n ...entityNode,\n prompt: responseItem?.prompt || entityNode.prompt,\n };\n });\n\n // Params are inserted client-side for flexibility and security\n return {\n text: evaluateEntity(updatedPromptNode),\n };\n } catch (error) {\n console.log(\"Error fetching prompt, using fallback:\", error);\n // Fallback: use local defaults\n return {\n text: evaluateEntity(node),\n };\n }\n }\n\n async track(\n id: string,\n messages: Message[],\n options: TrackConversationOptions,\n ): Promise<void> {\n await this.makeRequest<TrackRequest, TrackResponse>(\"/insert_runs\", \"POST\", {\n id,\n messages,\n sessionId: options.sessionId,\n timestamp: new Date().toISOString(),\n });\n }\n}\n\n// Factory function for easier initialization\nexport function createHoneClient(config: HoneConfig): HoneClient {\n return new Hone(config);\n}\n","/**\n * AI Provider definitions compatible with Vercel AI SDK.\n *\n * This module provides type-safe provider identifiers that align with\n * the Vercel AI SDK's official provider packages (@ai-sdk/*).\n *\n * @see https://ai-sdk.dev/providers/ai-sdk-providers\n *\n * @example\n * ```typescript\n * import { AIProvider } from \"@honeagents/hone\";\n *\n * const agent = await hone.agent(\"my-agent\", {\n * provider: AIProvider.OpenAI,\n * model: \"gpt-4o\",\n * defaultPrompt: \"You are a helpful assistant.\",\n * });\n * ```\n */\n\n/**\n * Supported AI providers from the Vercel AI SDK ecosystem.\n *\n * These correspond to the official @ai-sdk/* provider packages.\n * Use these identifiers when specifying the `provider` field in agent options.\n */\nexport enum AIProvider {\n // =============================================================================\n // Major LLM Providers\n // =============================================================================\n\n /** OpenAI - GPT models (gpt-4o, gpt-4, gpt-3.5-turbo, etc.) */\n OpenAI = \"openai\",\n\n /** Anthropic - Claude models (claude-3-opus, claude-3-sonnet, claude-3-haiku, etc.) */\n Anthropic = \"anthropic\",\n\n /** Google Generative AI - Gemini models (gemini-pro, gemini-1.5-pro, etc.) */\n Google = \"google\",\n\n /** Google Vertex AI - Enterprise Gemini models */\n GoogleVertex = \"google-vertex\",\n\n /** Azure OpenAI Service - Azure-hosted OpenAI models */\n Azure = \"azure\",\n\n // =============================================================================\n // Specialized Providers\n // =============================================================================\n\n /** xAI - Grok models */\n XAI = \"xai\",\n\n /** Mistral AI - Mistral models (mistral-large, mistral-medium, etc.) */\n Mistral = \"mistral\",\n\n /** Cohere - Command models */\n Cohere = \"cohere\",\n\n // =============================================================================\n // Inference Providers\n // =============================================================================\n\n /** Groq - Fast inference for open models */\n Groq = \"groq\",\n\n /** Together.ai - Open model hosting */\n TogetherAI = \"togetherai\",\n\n /** Fireworks - Fast inference platform */\n Fireworks = \"fireworks\",\n\n /** DeepInfra - Model inference */\n DeepInfra = \"deepinfra\",\n\n /** DeepSeek - DeepSeek models */\n DeepSeek = \"deepseek\",\n\n /** Cerebras - Fast inference */\n Cerebras = \"cerebras\",\n\n /** Perplexity - Perplexity models with web search */\n Perplexity = \"perplexity\",\n\n // =============================================================================\n // Cloud Providers\n // =============================================================================\n\n /** Amazon Bedrock - AWS-hosted models */\n AmazonBedrock = \"amazon-bedrock\",\n\n /** Baseten - Model hosting platform */\n Baseten = \"baseten\",\n}\n\n/**\n * Type representing all valid provider string values.\n * Use this when you need a union type of provider strings.\n */\nexport type AIProviderValue = `${AIProvider}`;\n\n/**\n * Array of all provider values for runtime validation.\n */\nexport const AI_PROVIDER_VALUES: readonly AIProviderValue[] = Object.values(\n AIProvider\n) as AIProviderValue[];\n\n/**\n * Check if a string is a valid AI provider.\n *\n * @param value - The string to check\n * @returns True if the value is a valid AIProvider\n *\n * @example\n * ```typescript\n * if (isValidProvider(userInput)) {\n * // userInput is typed as AIProviderValue\n * }\n * ```\n */\nexport function isValidProvider(value: string): value is AIProviderValue {\n return AI_PROVIDER_VALUES.includes(value as AIProviderValue);\n}\n\n/**\n * Display name mapping for providers.\n */\nconst PROVIDER_DISPLAY_NAMES: Record<AIProviderValue, string> = {\n openai: \"OpenAI\",\n anthropic: \"Anthropic\",\n google: \"Google AI\",\n \"google-vertex\": \"Google Vertex AI\",\n azure: \"Azure OpenAI\",\n xai: \"xAI\",\n mistral: \"Mistral AI\",\n cohere: \"Cohere\",\n groq: \"Groq\",\n togetherai: \"Together.ai\",\n fireworks: \"Fireworks\",\n deepinfra: \"DeepInfra\",\n deepseek: \"DeepSeek\",\n cerebras: \"Cerebras\",\n perplexity: \"Perplexity\",\n \"amazon-bedrock\": \"Amazon Bedrock\",\n baseten: \"Baseten\",\n};\n\n/**\n * Get the display name for a provider.\n *\n * @param provider - The provider identifier\n * @returns Human-readable provider name\n *\n * @example\n * ```typescript\n * getProviderDisplayName(\"openai\") // \"OpenAI\"\n * getProviderDisplayName(\"amazon-bedrock\") // \"Amazon Bedrock\"\n * ```\n */\nexport function getProviderDisplayName(\n provider: AIProviderValue | string\n): string {\n return PROVIDER_DISPLAY_NAMES[provider as AIProviderValue] || provider;\n}\n","/**\n * Tool tracking helpers for the Hone SDK.\n *\n * These utilities help format tool calls and results for tracking conversations\n * that include function calling / tool use.\n */\n\nimport { Message, ToolCall } from \"./types.js\";\n\n/**\n * Creates an assistant message containing tool calls.\n *\n * @param toolCalls - Array of tool calls the assistant is requesting\n * @param content - Optional text content alongside tool calls (usually empty)\n * @returns A Message object formatted for tool call requests\n *\n * @example\n * ```typescript\n * const message = createToolCallMessage([\n * { id: \"call_abc123\", name: \"get_weather\", arguments: '{\"location\":\"SF\"}' }\n * ]);\n * // { role: \"assistant\", content: \"\", tool_calls: [...] }\n * ```\n */\nexport function createToolCallMessage(\n toolCalls: ToolCall[],\n content: string = \"\"\n): Message {\n return {\n role: \"assistant\",\n content,\n tool_calls: toolCalls,\n };\n}\n\n/**\n * Creates a tool result message responding to a specific tool call.\n *\n * @param toolCallId - The ID of the tool call this result responds to\n * @param result - The result from executing the tool (will be stringified if not a string)\n * @returns A Message object formatted as a tool response\n *\n * @example\n * ```typescript\n * const message = createToolResultMessage(\"call_abc123\", { temp: 72, unit: \"F\" });\n * // { role: \"tool\", content: '{\"temp\":72,\"unit\":\"F\"}', tool_call_id: \"call_abc123\" }\n * ```\n */\nexport function createToolResultMessage(\n toolCallId: string,\n result: unknown\n): Message {\n const content = typeof result === \"string\" ? result : JSON.stringify(result);\n return {\n role: \"tool\",\n content,\n tool_call_id: toolCallId,\n };\n}\n\n/**\n * Extracts messages from an OpenAI chat completion response.\n *\n * Handles both regular assistant messages and messages with tool calls.\n *\n * @param response - The OpenAI chat completion response object\n * @returns Array of Message objects ready to be tracked\n *\n * @example\n * ```typescript\n * import OpenAI from \"openai\";\n *\n * const openai = new OpenAI();\n * const response = await openai.chat.completions.create({\n * model: \"gpt-4o\",\n * messages: [...],\n * tools: [...]\n * });\n *\n * const messages = extractOpenAIMessages(response);\n * await hone.track(\"conversation\", [...existingMessages, ...messages], { sessionId });\n * ```\n */\nexport function extractOpenAIMessages(response: {\n choices: Array<{\n message: {\n role: string;\n content: string | null;\n tool_calls?: Array<{\n id: string;\n function: {\n name: string;\n arguments: string;\n };\n }>;\n };\n }>;\n}): Message[] {\n const messages: Message[] = [];\n\n for (const choice of response.choices) {\n const msg = choice.message;\n const message: Message = {\n role: msg.role as Message[\"role\"],\n content: msg.content ?? \"\",\n };\n\n if (msg.tool_calls && msg.tool_calls.length > 0) {\n message.tool_calls = msg.tool_calls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments,\n }));\n }\n\n messages.push(message);\n }\n\n return messages;\n}\n\n/**\n * Extracts messages from an Anthropic Claude response.\n *\n * Handles both text responses and tool use blocks.\n *\n * @param response - The Anthropic message response object\n * @returns Array of Message objects ready to be tracked\n *\n * @example\n * ```typescript\n * import Anthropic from \"@anthropic-ai/sdk\";\n *\n * const anthropic = new Anthropic();\n * const response = await anthropic.messages.create({\n * model: \"claude-sonnet-4-20250514\",\n * messages: [...],\n * tools: [...]\n * });\n *\n * const messages = extractAnthropicMessages(response);\n * await hone.track(\"conversation\", [...existingMessages, ...messages], { sessionId });\n * ```\n */\nexport function extractAnthropicMessages(response: {\n role: string;\n content: Array<\n | { type: \"text\"; text: string }\n | { type: \"tool_use\"; id: string; name: string; input: unknown }\n >;\n}): Message[] {\n const messages: Message[] = [];\n\n const textBlocks = response.content.filter(\n (block): block is { type: \"text\"; text: string } => block.type === \"text\"\n );\n const toolUseBlocks = response.content.filter(\n (block): block is {\n type: \"tool_use\";\n id: string;\n name: string;\n input: unknown;\n } => block.type === \"tool_use\"\n );\n\n const textContent = textBlocks.map((b) => b.text).join(\"\\n\");\n\n if (toolUseBlocks.length > 0) {\n const toolCalls: ToolCall[] = toolUseBlocks.map((block) => ({\n id: block.id,\n name: block.name,\n arguments: JSON.stringify(block.input),\n }));\n\n messages.push({\n role: \"assistant\",\n content: textContent,\n tool_calls: toolCalls,\n });\n } else {\n messages.push({\n role: response.role as Message[\"role\"],\n content: textContent,\n });\n }\n\n return messages;\n}\n\n/**\n * Extracts messages from a Google Gemini response.\n *\n * Handles both text responses and function call parts.\n * Note: Gemini doesn't provide unique IDs for function calls, so we generate\n * them using the format `gemini_{functionName}_{index}`.\n *\n * @param response - The Gemini GenerateContentResponse object\n * @returns Array of Message objects ready to be tracked\n *\n * @example\n * ```typescript\n * import { GoogleGenerativeAI } from \"@google/generative-ai\";\n *\n * const genAI = new GoogleGenerativeAI(apiKey);\n * const model = genAI.getGenerativeModel({ model: \"gemini-pro\" });\n *\n * const response = await model.generateContent({\n * contents: [...],\n * tools: [{ functionDeclarations: [...] }]\n * });\n *\n * const messages = extractGeminiMessages(response);\n * await hone.track(\"conversation\", [...existingMessages, ...messages], { sessionId });\n * ```\n */\nexport function extractGeminiMessages(response: {\n candidates?: Array<{\n content?: {\n role?: string;\n parts?: Array<\n | { text: string }\n | { functionCall: { name: string; args: Record<string, unknown> } }\n >;\n };\n }>;\n}): Message[] {\n const messages: Message[] = [];\n\n if (!response.candidates || response.candidates.length === 0) {\n return messages;\n }\n\n for (const candidate of response.candidates) {\n if (!candidate.content?.parts) continue;\n\n const textParts: string[] = [];\n const functionCalls: Array<{\n name: string;\n args: Record<string, unknown>;\n }> = [];\n\n for (const part of candidate.content.parts) {\n if (\"text\" in part) {\n textParts.push(part.text);\n } else if (\"functionCall\" in part) {\n functionCalls.push(part.functionCall);\n }\n }\n\n const textContent = textParts.join(\"\\n\");\n\n if (functionCalls.length > 0) {\n // Gemini doesn't provide tool call IDs, so we generate them\n const toolCalls: ToolCall[] = functionCalls.map((fc, index) => ({\n id: `gemini_${fc.name}_${index}_${Date.now()}`,\n name: fc.name,\n arguments: JSON.stringify(fc.args),\n }));\n\n messages.push({\n role: \"assistant\",\n content: textContent,\n tool_calls: toolCalls,\n });\n } else if (textContent) {\n messages.push({\n role:\n candidate.content.role === \"model\"\n ? \"assistant\"\n : (candidate.content.role as Message[\"role\"]) || \"assistant\",\n content: textContent,\n });\n }\n }\n\n return messages;\n}\n\n// =============================================================================\n// Short Aliases (Recommended)\n// =============================================================================\n\n/**\n * Short alias for createToolResultMessage.\n * Creates a tool result message responding to a specific tool call.\n *\n * @example\n * ```typescript\n * messages.push(toolResult(toolCall.id, { temp: 72 }));\n * ```\n */\nexport const toolResult = createToolResultMessage;\n\n/**\n * Short alias for extractOpenAIMessages.\n * Extracts messages from an OpenAI chat completion response.\n *\n * @example\n * ```typescript\n * messages.push(...fromOpenAI(response));\n * ```\n */\nexport const fromOpenAI = extractOpenAIMessages;\n\n/**\n * Short alias for extractAnthropicMessages.\n * Extracts messages from an Anthropic Claude response.\n *\n * @example\n * ```typescript\n * messages.push(...fromAnthropic(response));\n * ```\n */\nexport const fromAnthropic = extractAnthropicMessages;\n\n/**\n * Short alias for extractGeminiMessages.\n * Extracts messages from a Google Gemini response.\n *\n * @example\n * ```typescript\n * messages.push(...fromGemini(response));\n * ```\n */\nexport const fromGemini = extractGeminiMessages;\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@honeagents/hone",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Hone SDK - AI Experience Engineering Platform for tracking and improving LLM applications",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"dev": "tsup --watch",
|
|
21
|
+
"lint": "eslint src --ext .ts",
|
|
22
|
+
"test": "vitest",
|
|
23
|
+
"test:unit": "vitest run",
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"ci": "npm run lint && npm run typecheck && npm run test:unit && npm run build",
|
|
26
|
+
"prepublishOnly": "npm run ci"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"ai",
|
|
30
|
+
"llm",
|
|
31
|
+
"tracing",
|
|
32
|
+
"evaluation",
|
|
33
|
+
"observability",
|
|
34
|
+
"langsmith",
|
|
35
|
+
"hone",
|
|
36
|
+
"openai",
|
|
37
|
+
"anthropic",
|
|
38
|
+
"vercel-ai-sdk",
|
|
39
|
+
"ai-sdk"
|
|
40
|
+
],
|
|
41
|
+
"author": "Hone Team <team@honeagents.ai>",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "git+https://github.com/honeagents/hone-node.git"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://honeagents.ai",
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/honeagents/hone-node/issues"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public",
|
|
53
|
+
"registry": "https://registry.npmjs.org/"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/node": "^20.0.0",
|
|
57
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
58
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
59
|
+
"eslint": "^8.0.0",
|
|
60
|
+
"tsup": "^8.0.0",
|
|
61
|
+
"tsx": "^4.21.0",
|
|
62
|
+
"typescript": "^5.0.0",
|
|
63
|
+
"vitest": "^1.0.0"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=18.0.0"
|
|
67
|
+
}
|
|
68
|
+
}
|