feat(tools): Phase T.1-T.4 complete - manifest system, registry, implementations, runtime, collaboration, scheduler
This commit is contained in:
75
backend/app/tools/langchain_adapter.py
Normal file
75
backend/app/tools/langchain_adapter.py
Normal file
@@ -0,0 +1,75 @@
|
||||
"""
|
||||
LangChain Adapter
|
||||
|
||||
Adapts Jarvis tools to LangChain tool format.
|
||||
"""
|
||||
|
||||
from typing import List, Dict, Any, Optional, Callable
|
||||
import json
|
||||
|
||||
|
||||
class LangChainToolAdapter:
|
||||
"""Adapter for converting Jarvis tools to LangChain tools"""
|
||||
|
||||
def __init__(self, registry: Any):
|
||||
self.registry = registry
|
||||
|
||||
def to_langchain_tools(self) -> List[Dict[str, Any]]:
|
||||
"""Convert all enabled tools to LangChain format"""
|
||||
import asyncio
|
||||
|
||||
async def _convert():
|
||||
tools = await self.registry.list_enabled()
|
||||
result = []
|
||||
|
||||
for metadata in tools:
|
||||
lc_tool = await self._create_langchain_tool(metadata)
|
||||
if lc_tool:
|
||||
result.append(lc_tool)
|
||||
|
||||
return result
|
||||
|
||||
return asyncio.get_event_loop().run_until_complete(_convert())
|
||||
|
||||
async def _create_langchain_tool(self, metadata: Any) -> Optional[Dict[str, Any]]:
|
||||
"""Create a single LangChain tool from metadata"""
|
||||
executor = await self.registry.get_executor(metadata.name)
|
||||
if not executor:
|
||||
return None
|
||||
|
||||
config = await self.registry.get_config(metadata.name)
|
||||
|
||||
return {
|
||||
"name": metadata.name,
|
||||
"description": metadata.description,
|
||||
"display_name": metadata.display_name,
|
||||
"tags": metadata.tags,
|
||||
"version": metadata.version,
|
||||
"executor": executor,
|
||||
"config": config,
|
||||
}
|
||||
|
||||
def get_tool_schemas(self) -> List[Dict[str, Any]]:
|
||||
"""Get tool schemas for LLM function calling"""
|
||||
import asyncio
|
||||
|
||||
async def _get():
|
||||
tools = await self.registry.list_enabled()
|
||||
schemas = []
|
||||
|
||||
for tool in tools:
|
||||
schemas.append(
|
||||
{
|
||||
"name": tool.name,
|
||||
"description": tool.description,
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"required": [],
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
return schemas
|
||||
|
||||
return asyncio.get_event_loop().run_until_complete(_get())
|
||||
Reference in New Issue
Block a user