feat(appkit): shared agent types and LLM adapter implementations#301
Open
MarioCadenas wants to merge 1 commit intomainfrom
Open
feat(appkit): shared agent types and LLM adapter implementations#301MarioCadenas wants to merge 1 commit intomainfrom
MarioCadenas wants to merge 1 commit intomainfrom
Conversation
This was referenced Apr 21, 2026
bb4efff to
5d060a6
Compare
7 tasks
021cf0a to
a4d0130
Compare
calvarjorge
reviewed
Apr 28, 2026
| * importing the concrete `WorkspaceClient` type to keep the adapter free of a | ||
| * compile-time dependency on the SDK. | ||
| */ | ||
| interface WorkspaceClientLike { |
Contributor
There was a problem hiding this comment.
Is there any purpose to this interface? It's not being used for anything that I see, could we just use undefined when this is used, or sth like type WorkspaceClientLike = undefined;
ditadi
reviewed
Apr 29, 2026
8e82a62 to
492ffd6
Compare
Foundation layer for the agents feature. Adds the portable type surface that every downstream layer builds on, plus the Databricks Model Serving adapter so the agents plugin (later PR) can target workspace-hosted models. ### Shared agent types `packages/shared/src/agent.ts` — no behavior, just the type vocabulary: `AgentAdapter`, `AgentEvent`, `AgentInput`, `AgentRunContext`, `AgentToolDefinition`, `Message`, `Thread`, `ThreadStore`, `ToolAnnotations`, `ToolCall`, `ToolProvider`, `ResponseStreamEvent`. Exported from the shared barrel. ### Adapter `packages/appkit/src/agents/databricks.ts` — `DatabricksAdapter`: streams OpenAI-compatible completions against a Databricks Model Serving endpoint (raw fetch + SSE, no vendor SDKs). Also ships `createDatabricksModel`, a Vercel-AI-SDK helper that returns a model object you can pass to `streamText`/`useChat`/etc. — handles URL rewriting (`/chat/completions` -> `/invocations`), per-request auth refresh, and tool-name sanitization. `@ai-sdk/openai` is a devDependency consumed by `createDatabricksModel` via dynamic `import()`; consumers who use that helper install it alongside `@databricks/appkit`.
492ffd6 to
db67f51
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Foundation layer for the agents feature. Adds the portable type surface
that every downstream layer builds on, plus three LLM adapter
implementations so the agents plugin (later PR) can target whatever the
user has.
Shared agent types
packages/shared/src/agent.ts— no behavior, just the type vocabulary:AgentAdapter,AgentEvent,AgentInput,AgentRunContext,AgentToolDefinition,Message,Thread,ThreadStore,ToolAnnotations,ToolCall,ToolProvider,ResponseStreamEvent. Exported from theshared barrel.
Adapters
packages/appkit/src/agents/databricks.ts—DatabricksAdapter:streams OpenAI-compatible completions against a Databricks Model
Serving endpoint. The
fromServingEndpoint/fromModelServingfactories route through the shared
connectors/serving/streamhelper, which delegates to the SDK's
apiClient.request({ raw: true }).That gives the adapter centralised URL encoding + authentication
with the rest of the serving surface — no bespoke
fetch()+authenticate()plumbing. The rawnew DatabricksAdapter({ endpointUrl, authenticate })constructor is preserved as an escape hatch fortests and for pointing the adapter at non-workspace endpoints.
packages/appkit/src/agents/vercel-ai.ts—VercelAIAdapter:wraps any Vercel AI SDK
streamTextcall. Maps Vercel SDK events toAppKit
AgentEvents and tool calls.packages/appkit/src/agents/langchain.ts—LangChainAdapter:wraps any LangChain
Runnable(AgentExecutor, compiled LangGraph,etc.). Subscribes to
streamEvents(v2)and maps toAgentEvents.Each adapter is self-contained and independently testable.
Package plumbing
@databricks/appkit/agents/{databricks,vercel-ai,langchain}so consumers pick only the adapter they want.
@langchain/coreandaideclared as optional peer dependencies.@ai-sdk/openai,@langchain/core,aiadded as devDeps for tests.tsdown.config.tsemits the three adapter entry points alongside themain bundle.
Test plan
serving-connector routing, URL encoding of endpoint names with
special characters, streaming + tool-call dispatch. Plus Vercel AI
and LangChain adapter coverage.
PR Stack
agents()plugin +createAgent(def)+ markdown-driven agents — feat(appkit): agents() plugin, createAgent(def), and markdown-driven agents #304fromPlugin()DX +runAgentplugins arg + toolkit-resolver — feat(appkit): fromPlugin() DX, runAgent plugins arg, shared toolkit-resolver #305Demo
agent-demo.mp4