AI Connect/Integration/Framework-Adapter
Framework-Adapter
Abhängigkeitsfreie Subpath-Exports, die benutzerbezogene Capabilities in das Tool-Format von OpenAI, Anthropic, Gemini, dem Vercel AI SDK, LangChain, LlamaIndex, Cloudflare Workers AI oder einer beliebigen OpenAI-kompatiblen Runtime konvertieren.
Adapter sind subpath exports ohne Abhängigkeiten, die Capabilities in das Tool-Format Ihres Frameworks konvertieren (jedes Framework hat seinen eigenen Begriff). Wenn ein Framework eine seiner eigenen Fabriken benötigt, injizieren Sie diese: keine Peer-Dependency, keine Versionskopplung.
Laden Sie das Capability-Set einmal, konvertieren Sie an der Modellgrenze und behalten Sie das ursprüngliche CapabilitySet für den Dispatch bei:
const capabilities = await vinkius.user('alice_123').capabilities();| Framework | Import | Hinweise |
|---|---|---|
| OpenAI (chat completions) | @vinkius/connect/openai | toOpenAITools, runOpenAIToolCall |
OpenAI Agents (@openai/agents) | @vinkius/connect/openai-agents | toOpenAIAgentsTools (tool injizieren) |
| Anthropic (Messages) | @vinkius/connect/anthropic | toAnthropicTools, runAnthropicToolUse |
| Google Gemini | @vinkius/connect/gemini | toGeminiTools, runGeminiFunctionCall |
| Vercel AI SDK | @vinkius/connect/ai-sdk | toAISDKTools (jsonSchema injizieren) |
| LangChain.js | @vinkius/connect/langchain | toLangChainTools (tool injizieren) |
| LlamaIndex.TS | @vinkius/connect/llamaindex | toLlamaIndexTools (tool injizieren) |
| Cloudflare Workers AI | @vinkius/connect/workers-ai | toWorkersAITools (für runWithTools) |
| Beliebig / neutral | @vinkius/connect/json-schema | toJSONSchemaTools, executeByName |
OpenAI (chat completions)
import OpenAI from 'openai';
import { toOpenAITools, runOpenAIToolCall } from '@vinkius/connect/openai';
const capabilities = await vinkius.user('alice_123').capabilities();
const completion = await openai.chat.completions.create({
model: 'your-model',
messages: [{ role: 'user', content: 'Open a GitHub issue titled "Ship it"' }],
tools: toOpenAITools(capabilities),
});
const call = completion.choices[0]?.message.tool_calls?.[0];
if (call) {
const result = await runOpenAIToolCall(capabilities, call);
console.log(result.content);
}OpenAI Agents (@openai/agents)
Nicht zu verwechseln mit dem Chat-Completions-Adapter. Injizieren Sie die tool-Fabrik des Agents SDK; das JSON Schema wird als rohes parameters mit strict: false übergeben.
import { Agent, tool } from '@openai/agents';
import { toOpenAIAgentsTools } from '@vinkius/connect/openai-agents';
const capabilities = await vinkius.user('alice_123').capabilities();
const agent = new Agent({
name: 'assistant',
tools: toOpenAIAgentsTools(capabilities, { tool }),
});Anthropic (Messages)
import { toAnthropicTools, runAnthropicToolUse } from '@vinkius/connect/anthropic';
const capabilities = await vinkius.user('alice_123').capabilities();
const tools = toAnthropicTools(capabilities); // pass as `tools` to messages.create
// on a returned tool_use block: await runAnthropicToolUse(capabilities, block)Google Gemini
Erzeugt Funktionsdeklarationen für das einheitliche Google GenAI SDK (@google/genai).
import { toGeminiTools, runGeminiFunctionCall } from '@vinkius/connect/gemini';
const capabilities = await vinkius.user('alice_123').capabilities();
const response = await model.generateContent({
contents,
tools: [{ functionDeclarations: toGeminiTools(capabilities) }],
});
// on a returned functionCall part:
const result = await runGeminiFunctionCall(capabilities, functionCall);Vercel AI SDK
Übergeben Sie den eigenen jsonSchema-Helper des AI SDK, damit Parameter korrekt verpackt werden. Mastra nutzt Vercel AI SDK Tools nativ und wird daher von diesem Adapter abgedeckt.
import { jsonSchema } from 'ai';
import { toAISDKTools } from '@vinkius/connect/ai-sdk';
const capabilities = await vinkius.user('alice_123').capabilities();
const tools = toAISDKTools(capabilities, { jsonSchema });LangChain.js
Injizieren Sie die eigene tool-Fabrik von LangChain, damit die zurückgegebenen Objekte echte, bindbare LangChain-Tools sind; der Adapter bleibt abhängigkeitsfrei.
import { tool } from '@langchain/core/tools';
import { toLangChainTools } from '@vinkius/connect/langchain';
const capabilities = await vinkius.user('alice_123').capabilities();
const tools = toLangChainTools(capabilities, { tool });
const model = chat.bindTools(tools);LlamaIndex.TS
Injizieren Sie die tool-Fabrik von LlamaIndex. Sie akzeptiert rohes JSON Schema, daher ist kein Zod erforderlich.
import { tool } from 'llamaindex';
import { toLlamaIndexTools } from '@vinkius/connect/llamaindex';
const capabilities = await vinkius.user('alice_123').capabilities();
const tools = toLlamaIndexTools(capabilities, { tool });Cloudflare Workers AI
toWorkersAITools erzeugt eingebettete Function-Calling-Tools (jeweils mit einer gebundenen function) für runWithTools aus @cloudflare/ai-utils.
import { runWithTools } from '@cloudflare/ai-utils';
import { toWorkersAITools } from '@vinkius/connect/workers-ai';
const capabilities = await vinkius.user('alice_123').capabilities();
const res = await runWithTools(env.AI, 'your-model', {
messages,
tools: toWorkersAITools(capabilities),
});Neutrale und andere Frameworks
toJSONSchemaTools erzeugt schlichte { name, description, parameters }-Definitionen: der kleinste gemeinsame Nenner für jeden OpenAI-kompatiblen Anbieter oder eigenen Agent-Loop, mit executeByName für den Dispatch.
Einige Frameworks werden absichtlich von den obigen Adaptern abgedeckt, statt einen eigenen Subpath zu haben:
- Mastra nutzt Vercel AI SDK Tools nativ; verwenden Sie den
ai-sdk-Adapter. - Claude Agent SDK (
@anthropic-ai/claude-agent-sdk) erfordert ein Zod-Schema und eine In-Process-MCP-Registrierung. Verwenden Sie denanthropic-Adapter der Messages API. - CrewAI ist ein Python-Framework. Nutzen Sie die neutrale JSON-Schema-Ausgabe als Brücke, bis ein Vinkius Python SDK existiert.
Hinweise zum Dispatch
Die Dispatch-Helper der Adapter rufen capability.execute(args) ohne ExecuteOptions auf: Diese Ausführungen tragen weder einen Idempotenzschlüssel noch ein Aufrufer-Signal und erhalten genau einen Transportversuch. Unbekannte Namen, die an Adapter-Dispatcher übergeben werden, werfen ein schlichtes Error und keine VinkiusError. Wenn eine Operation Abbruch oder Idempotenz erfordert, lösen Sie die Capability auf und rufen Sie execute() direkt auf. Siehe Error handling.
