AI Connect/Integration/Framework-Adapter

Framework-Adapter

Frag die KI über Vinkius

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:

typescript
const capabilities = await vinkius.user('alice_123').capabilities();
FrameworkImportHinweise
OpenAI (chat completions)@vinkius/connect/openaitoOpenAITools, runOpenAIToolCall
OpenAI Agents (@openai/agents)@vinkius/connect/openai-agentstoOpenAIAgentsTools (tool injizieren)
Anthropic (Messages)@vinkius/connect/anthropictoAnthropicTools, runAnthropicToolUse
Google Gemini@vinkius/connect/geminitoGeminiTools, runGeminiFunctionCall
Vercel AI SDK@vinkius/connect/ai-sdktoAISDKTools (jsonSchema injizieren)
LangChain.js@vinkius/connect/langchaintoLangChainTools (tool injizieren)
LlamaIndex.TS@vinkius/connect/llamaindextoLlamaIndexTools (tool injizieren)
Cloudflare Workers AI@vinkius/connect/workers-aitoWorkersAITools (für runWithTools)
Beliebig / neutral@vinkius/connect/json-schematoJSONSchemaTools, executeByName

OpenAI (chat completions)

typescript
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.

typescript
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)

typescript
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).

typescript
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.

typescript
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.

typescript
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.

typescript
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.

typescript
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 den anthropic-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.