New Adapters¶
FastAgentic v1.1 adds support for additional agent frameworks.
Semantic Kernel¶
Adapter for Microsoft Semantic Kernel.
import semantic_kernel as sk
from fastagentic.adapters import SemanticKernelAdapter
# Create kernel
kernel = sk.Kernel()
kernel.add_service(...)
# Function-based adapter
adapter = SemanticKernelAdapter(
kernel,
function_name="chat",
plugin_name="ChatPlugin",
)
# Agent-based adapter
agent = create_agent(kernel)
adapter = SemanticKernelAdapter(kernel, agent=agent)
@agent_endpoint(path="/chat", runnable=adapter, stream=True)
async def chat(input: ChatInput) -> ChatOutput:
...
Features¶
- Function and agent support
- Streaming with
invoke_stream - Plugin integration
- Prompt execution settings
AutoGen¶
Adapter for Microsoft AutoGen multi-agent conversations.
from autogen import AssistantAgent, UserProxyAgent
from fastagentic.adapters import AutoGenAdapter
# Create agents
assistant = AssistantAgent("assistant", llm_config=config)
user_proxy = UserProxyAgent("user", code_execution_config=False)
# Two-agent adapter
adapter = AutoGenAdapter(
initiator=user_proxy,
recipient=assistant,
max_turns=10,
)
# Group chat adapter
from autogen import GroupChat
group_chat = GroupChat(agents=[agent1, agent2, agent3])
adapter = AutoGenAdapter(
initiator=user_proxy,
recipient=assistant,
group_chat=group_chat,
)
@agent_endpoint(path="/collaborate", runnable=adapter, stream=True)
async def collaborate(input: Input) -> Output:
...
Features¶
- Two-agent conversations
- Group chat support
- Message streaming
- Tool call events
LlamaIndex¶
Adapter for LlamaIndex agents, query engines, and chat engines.
from llama_index.core import VectorStoreIndex
from llama_index.core.agent import ReActAgent
from fastagentic.adapters import LlamaIndexAdapter
# Query engine adapter
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
adapter = LlamaIndexAdapter(query_engine=query_engine)
# Agent adapter
agent = ReActAgent.from_tools(tools, llm=llm)
adapter = LlamaIndexAdapter(agent=agent)
# Chat engine adapter
chat_engine = index.as_chat_engine()
adapter = LlamaIndexAdapter(chat_engine=chat_engine)
@agent_endpoint(path="/query", runnable=adapter, stream=True)
async def query(input: QueryInput) -> QueryOutput:
...
Features¶
- Query engines with RAG
- ReAct agents
- Chat engines with memory
- Source node streaming
DSPy¶
Adapter for DSPy modules and compiled programs.
import dspy
from fastagentic.adapters import DSPyAdapter, DSPyProgramAdapter
# Signature
class QA(dspy.Signature):
question: str = dspy.InputField()
answer: str = dspy.OutputField()
# Module adapter
qa_module = dspy.ChainOfThought(QA)
adapter = DSPyAdapter(qa_module)
# With trace information
adapter = DSPyAdapter(qa_module, trace=True)
# Compiled program adapter
from dspy.teleprompt import BootstrapFewShot
teleprompter = BootstrapFewShot(metric=my_metric)
compiled = teleprompter.compile(RAG(), trainset=trainset)
adapter = DSPyProgramAdapter(compiled)
@agent_endpoint(path="/qa", runnable=adapter)
async def qa(input: QAInput) -> QAOutput:
...
Features¶
- Module and signature support
- Compiled program support
- Trace information (rationale, reasoning)
- Retrieval result integration
Community Adapter SDK¶
Build custom adapters with the SDK.
from fastagentic.adapters.sdk import (
CommunityAdapter,
AdapterMetadata,
SimpleAdapter,
register_adapter,
)
from fastagentic.types import StreamEvent, StreamEventType
# Define adapter metadata
metadata = AdapterMetadata(
name="my-adapter",
version="1.0.0",
description="My custom adapter",
author="Your Name",
framework="myframework",
capabilities=["streaming", "tools"],
)
# Simple function adapter
def my_agent(input: str) -> str:
return f"Response: {input}"
adapter = SimpleAdapter(invoke_fn=my_agent, metadata=metadata)
# Full custom adapter
@register_adapter
class MyAdapter(CommunityAdapter):
metadata = metadata
def __init__(self, agent):
self.agent = agent
async def invoke(self, input, ctx):
return await self.agent.run(input)
async def stream(self, input, ctx):
async for chunk in self.agent.stream(input):
yield StreamEvent(
type=StreamEventType.TOKEN,
data={"content": chunk},
)
yield StreamEvent(type=StreamEventType.DONE, data={})
Adapter Registry¶
from fastagentic.adapters.sdk import AdapterRegistry, get_registry
# Global registry
registry = get_registry()
adapters = registry.list_adapters()
# Find by framework
sk_adapters = registry.find_by_framework("semantic-kernel")
# Find by capability
streaming_adapters = registry.find_by_capability("streaming")