@@ -11,6 +11,10 @@ import { ProviderTransform } from "../../src/provider/transform"
1111const openaiModel = { providerID : "openai" , api : { id : "gpt-4.1" , npm : "@ai-sdk/openai" } } as never
1212const azureModel = { providerID : "azure" , api : { id : "gpt-4.1" , npm : "@ai-sdk/azure" } } as never
1313const geminiModel = { providerID : "google" , api : { id : "gemini-3-pro" , npm : "@ai-sdk/google" } } as never
14+ const deepseekModel = {
15+ providerID : "deepseek" ,
16+ api : { id : "deepseek-v4-pro" , npm : "@ai-sdk/openai-compatible" } ,
17+ } as never
1418
1519type JsonSchemaNode = {
1620 anyOf ?: JsonSchemaNode [ ]
@@ -117,6 +121,16 @@ describe("workflow provider-facing schema", () => {
117121 expect ( Object . keys ( record ( resultBranch ) ) ) . toEqual ( expect . arrayContaining ( [ "cursor" , "limit" ] ) )
118122 } )
119123
124+ test ( "DeepSeek transformation presents the workflow union as an object-root function schema" , ( ) => {
125+ const transformed = ProviderTransform . schema (
126+ deepseekModel ,
127+ ToolJsonSchema . fromSchema ( Parameters as never ) ,
128+ ) as JsonSchemaNode
129+ expect ( transformed . type ) . toBe ( "object" )
130+ expect ( branches ( transformed ) ) . toHaveLength ( 10 )
131+ expect ( branchByAction ( transformed , "start" , "spec_path" ) ) . toHaveLength ( 1 )
132+ } )
133+
120134 test ( "post-change byte sizes stay at the recorded evidence" , async ( ) => {
121135 const evidence = ( await Bun . file (
122136 new URL ( "./fixtures/workflow-parameters-post-change.json" , import . meta. url ) ,
0 commit comments