@mcpmesh/sdk 0.8.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/__tests__/claude-handler.test.d.ts +7 -0
  2. package/dist/__tests__/claude-handler.test.d.ts.map +1 -0
  3. package/dist/__tests__/claude-handler.test.js +455 -0
  4. package/dist/__tests__/claude-handler.test.js.map +1 -0
  5. package/dist/__tests__/config.test.d.ts +7 -0
  6. package/dist/__tests__/config.test.d.ts.map +1 -0
  7. package/dist/__tests__/config.test.js +156 -0
  8. package/dist/__tests__/config.test.js.map +1 -0
  9. package/dist/__tests__/errors.test.d.ts +7 -0
  10. package/dist/__tests__/errors.test.d.ts.map +1 -0
  11. package/dist/__tests__/errors.test.js +170 -0
  12. package/dist/__tests__/errors.test.js.map +1 -0
  13. package/dist/__tests__/generic-handler.test.d.ts +7 -0
  14. package/dist/__tests__/generic-handler.test.d.ts.map +1 -0
  15. package/dist/__tests__/generic-handler.test.js +243 -0
  16. package/dist/__tests__/generic-handler.test.js.map +1 -0
  17. package/dist/__tests__/llm-provider.test.d.ts +7 -0
  18. package/dist/__tests__/llm-provider.test.d.ts.map +1 -0
  19. package/dist/__tests__/llm-provider.test.js +217 -0
  20. package/dist/__tests__/llm-provider.test.js.map +1 -0
  21. package/dist/__tests__/openai-handler.test.d.ts +7 -0
  22. package/dist/__tests__/openai-handler.test.d.ts.map +1 -0
  23. package/dist/__tests__/openai-handler.test.js +359 -0
  24. package/dist/__tests__/openai-handler.test.js.map +1 -0
  25. package/dist/__tests__/provider-handler-registry.test.d.ts +9 -0
  26. package/dist/__tests__/provider-handler-registry.test.d.ts.map +1 -0
  27. package/dist/__tests__/provider-handler-registry.test.js +187 -0
  28. package/dist/__tests__/provider-handler-registry.test.js.map +1 -0
  29. package/dist/__tests__/response-parser.test.d.ts +7 -0
  30. package/dist/__tests__/response-parser.test.d.ts.map +1 -0
  31. package/dist/__tests__/response-parser.test.js +360 -0
  32. package/dist/__tests__/response-parser.test.js.map +1 -0
  33. package/dist/__tests__/route.test.d.ts +7 -0
  34. package/dist/__tests__/route.test.d.ts.map +1 -0
  35. package/dist/__tests__/route.test.js +281 -0
  36. package/dist/__tests__/route.test.js.map +1 -0
  37. package/dist/__tests__/sse.test.d.ts +7 -0
  38. package/dist/__tests__/sse.test.d.ts.map +1 -0
  39. package/dist/__tests__/sse.test.js +172 -0
  40. package/dist/__tests__/sse.test.js.map +1 -0
  41. package/dist/__tests__/template.test.d.ts +7 -0
  42. package/dist/__tests__/template.test.d.ts.map +1 -0
  43. package/dist/__tests__/template.test.js +176 -0
  44. package/dist/__tests__/template.test.js.map +1 -0
  45. package/dist/__tests__/tracing.test.d.ts +7 -0
  46. package/dist/__tests__/tracing.test.d.ts.map +1 -0
  47. package/dist/__tests__/tracing.test.js +264 -0
  48. package/dist/__tests__/tracing.test.js.map +1 -0
  49. package/dist/agent.d.ts +165 -0
  50. package/dist/agent.d.ts.map +1 -0
  51. package/dist/agent.js +626 -0
  52. package/dist/agent.js.map +1 -0
  53. package/dist/api-runtime.d.ts +166 -0
  54. package/dist/api-runtime.d.ts.map +1 -0
  55. package/dist/api-runtime.js +459 -0
  56. package/dist/api-runtime.js.map +1 -0
  57. package/dist/config.d.ts +31 -0
  58. package/dist/config.d.ts.map +1 -0
  59. package/dist/config.js +60 -0
  60. package/dist/config.js.map +1 -0
  61. package/dist/debug.d.ts +47 -0
  62. package/dist/debug.d.ts.map +1 -0
  63. package/dist/debug.js +86 -0
  64. package/dist/debug.js.map +1 -0
  65. package/dist/errors.d.ts +99 -0
  66. package/dist/errors.d.ts.map +1 -0
  67. package/dist/errors.js +110 -0
  68. package/dist/errors.js.map +1 -0
  69. package/dist/express.d.ts +146 -0
  70. package/dist/express.d.ts.map +1 -0
  71. package/dist/express.js +371 -0
  72. package/dist/express.js.map +1 -0
  73. package/dist/index.d.ts +96 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +107 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/llm-agent.d.ts +193 -0
  78. package/dist/llm-agent.d.ts.map +1 -0
  79. package/dist/llm-agent.js +634 -0
  80. package/dist/llm-agent.js.map +1 -0
  81. package/dist/llm-provider.d.ts +323 -0
  82. package/dist/llm-provider.d.ts.map +1 -0
  83. package/dist/llm-provider.js +446 -0
  84. package/dist/llm-provider.js.map +1 -0
  85. package/dist/llm.d.ts +194 -0
  86. package/dist/llm.d.ts.map +1 -0
  87. package/dist/llm.js +304 -0
  88. package/dist/llm.js.map +1 -0
  89. package/dist/provider-handlers/claude-handler.d.ts +98 -0
  90. package/dist/provider-handlers/claude-handler.d.ts.map +1 -0
  91. package/dist/provider-handlers/claude-handler.js +268 -0
  92. package/dist/provider-handlers/claude-handler.js.map +1 -0
  93. package/dist/provider-handlers/gemini-handler.d.ts +82 -0
  94. package/dist/provider-handlers/gemini-handler.d.ts.map +1 -0
  95. package/dist/provider-handlers/gemini-handler.js +152 -0
  96. package/dist/provider-handlers/gemini-handler.js.map +1 -0
  97. package/dist/provider-handlers/generic-handler.d.ts +78 -0
  98. package/dist/provider-handlers/generic-handler.d.ts.map +1 -0
  99. package/dist/provider-handlers/generic-handler.js +152 -0
  100. package/dist/provider-handlers/generic-handler.js.map +1 -0
  101. package/dist/provider-handlers/index.d.ts +29 -0
  102. package/dist/provider-handlers/index.d.ts.map +1 -0
  103. package/dist/provider-handlers/index.js +32 -0
  104. package/dist/provider-handlers/index.js.map +1 -0
  105. package/dist/provider-handlers/openai-handler.d.ts +86 -0
  106. package/dist/provider-handlers/openai-handler.d.ts.map +1 -0
  107. package/dist/provider-handlers/openai-handler.js +160 -0
  108. package/dist/provider-handlers/openai-handler.js.map +1 -0
  109. package/dist/provider-handlers/provider-handler-registry.d.ts +124 -0
  110. package/dist/provider-handlers/provider-handler-registry.d.ts.map +1 -0
  111. package/dist/provider-handlers/provider-handler-registry.js +180 -0
  112. package/dist/provider-handlers/provider-handler-registry.js.map +1 -0
  113. package/dist/provider-handlers/provider-handler.d.ts +245 -0
  114. package/dist/provider-handlers/provider-handler.d.ts.map +1 -0
  115. package/dist/provider-handlers/provider-handler.js +238 -0
  116. package/dist/provider-handlers/provider-handler.js.map +1 -0
  117. package/dist/proxy.d.ts +44 -0
  118. package/dist/proxy.d.ts.map +1 -0
  119. package/dist/proxy.js +324 -0
  120. package/dist/proxy.js.map +1 -0
  121. package/dist/response-parser.d.ts +103 -0
  122. package/dist/response-parser.d.ts.map +1 -0
  123. package/dist/response-parser.js +232 -0
  124. package/dist/response-parser.js.map +1 -0
  125. package/dist/route.d.ts +185 -0
  126. package/dist/route.d.ts.map +1 -0
  127. package/dist/route.js +310 -0
  128. package/dist/route.js.map +1 -0
  129. package/dist/sse.d.ts +45 -0
  130. package/dist/sse.d.ts.map +1 -0
  131. package/dist/sse.js +77 -0
  132. package/dist/sse.js.map +1 -0
  133. package/dist/template.d.ts +86 -0
  134. package/dist/template.d.ts.map +1 -0
  135. package/dist/template.js +206 -0
  136. package/dist/template.js.map +1 -0
  137. package/dist/tracing.d.ts +88 -0
  138. package/dist/tracing.d.ts.map +1 -0
  139. package/dist/tracing.js +193 -0
  140. package/dist/tracing.js.map +1 -0
  141. package/dist/types.d.ts +618 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +5 -0
  144. package/dist/types.js.map +1 -0
  145. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/claude-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAO5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;AAE5C,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,wEAAwE;AACxE,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,GAAG,WAAW,CAAC;IAE9B;;;;;;;;;;;;OAYG;IACH,cAAc,CACZ,QAAsB,EACtB,KAA0B,EAC1B,YAAiC,EACjC,OAMC;QAED,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7F,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAE1E,4DAA4D;QAC5D,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QAElE,MAAM,OAAO,GAAoB;YAC/B,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,IAAI;SACR,CAAC;QAEF,wBAAwB;QACxB,sEAAsE;QACtE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,sCAAsC;QACtC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QACpC,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,4CAA4C;QAC5C,IAAI,cAAc,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;YAChD,kEAAkE;YAClE,4EAA4E;YAC5E,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,cAAc,GAAG;gBACvB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE,KAAK,EAAE,sCAAsC;iBACtD;aACF,CAAC;YACF,KAAK,CAAC,sDAAsD,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB,CAChB,UAAkB,EAClB,WAAgC,EAChC,YAAiC,EACjC,UAAuB;QAEvB,IAAI,aAAa,GAAG,UAAU,CAAC;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAE1E,mDAAmD;QACnD,4DAA4D;QAC5D,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,4DAA4D;YAC5D,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,CACjD,gCAAgC,EAChC,mCAAmC,2BAA2B,EAAE,CACjE,CAAC;YACF,aAAa,IAAI,YAAY,CAAC;QAChC,CAAC;QAED,+CAA+C;QAC/C,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC9B,kCAAkC;YAClC,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAChC,qEAAqE;YACrE,IAAI,YAAY,EAAE,CAAC;gBACjB,aAAa,IAAI;;8DAEqC,YAAY,CAAC,IAAI,UAAU,CAAC;YACpF,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,mDAAmD;QACnD,IAAI,cAAc,KAAK,MAAM,IAAI,YAAY,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAA4D,CAAC;YACrH,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAa,CAAC;YAElE,0CAA0C;YAC1C,MAAM,iBAAiB,GAAa,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC;gBAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;gBAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,IAAI,CAAC,OAAO,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAK,CAAuB,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CACjG,CAAC;YAEF,aAAa,IAAI;;;;;EAKrB,UAAU;;;;EAIV,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;;oFAE4C,CAAC;QACjF,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,iBAAiB,EAAE,IAAI,EAAE,qCAAqC;YAC9D,gBAAgB,EAAE,IAAI,EAAE,mDAAmD;YAC3E,SAAS,EAAE,IAAI,EAAE,qBAAqB;YACtC,MAAM,EAAE,IAAI,EAAE,4BAA4B;YAC1C,QAAQ,EAAE,IAAI,EAAE,uCAAuC;YACvD,aAAa,EAAE,KAAK,EAAE,mDAAmD;SAC1E,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,mBAAmB,CACjB,YAAiC,EACjC,YAAyB;QAEzB,0BAA0B;QAC1B,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,6EAA6E;IAC7E,yBAAyB;IACzB,6EAA6E;IAE7E;;;;;;OAMG;IACK,cAAc,CAAC,YAA0B;QAC/C,uCAAuC;QACvC,IAAI,YAAY,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,YAAY,CAAC,UAAU,IAAI,6BAA6B,EAAE,CAAC;gBAC7D,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC;QACxC,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAiD,CAAC;QAE5E,oBAAoB;QACpB,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,IAAI,6BAA6B,EAAE,CAAC;YAClF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yCAAyC;QACzC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpD,MAAM,EAAE,GAAG,WAAsC,CAAC;gBAClD,2BAA2B;gBAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;oBAC1C,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,0CAA0C;gBAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;oBACZ,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,sCAAsC;gBACtC,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAA4C,CAAC;oBAC9D,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;wBAC5C,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,6BAA6B;AAC7B,uBAAuB,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Gemini/Google provider handler.
3
+ *
4
+ * Optimized for Gemini models (Gemini 2.0 Flash, Gemini 1.5 Pro, etc.)
5
+ * using Google's best practices for tool calling and structured output.
6
+ *
7
+ * Features:
8
+ * - Native structured output via response_format (via Vercel AI SDK)
9
+ * - Native function calling support
10
+ * - Support for Gemini 2.x and 3.x models
11
+ * - Large context windows (up to 2M tokens)
12
+ *
13
+ * Based on Python's GeminiHandler:
14
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/gemini_handler.py
15
+ *
16
+ * Reference:
17
+ * - https://ai.google.dev/gemini-api/docs
18
+ */
19
+ import type { LlmMessage } from "../types.js";
20
+ import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type OutputSchema, type PreparedRequest, type OutputMode } from "./provider-handler.js";
21
+ /**
22
+ * Provider handler for Google Gemini models.
23
+ *
24
+ * Gemini Characteristics:
25
+ * - Native structured output via response_format (Vercel AI SDK translates)
26
+ * - Native function calling support
27
+ * - Large context windows (1M-2M tokens)
28
+ * - Multimodal support (text, images, video, audio)
29
+ * - Works well with concise, focused prompts
30
+ *
31
+ * Key Similarities with OpenAI:
32
+ * - Uses response_format for structured output (via Vercel AI SDK)
33
+ * - Native function calling format
34
+ * - Similar schema enforcement requirements
35
+ *
36
+ * Supported Models (via Vercel AI SDK):
37
+ * - gemini-2.0-flash (fast, efficient)
38
+ * - gemini-2.0-flash-lite (fastest, most efficient)
39
+ * - gemini-1.5-pro (high capability)
40
+ * - gemini-1.5-flash (balanced)
41
+ * - gemini-3-flash-preview (reasoning support)
42
+ * - gemini-3-pro-preview (advanced reasoning)
43
+ */
44
+ export declare class GeminiHandler implements ProviderHandler {
45
+ readonly vendor = "google";
46
+ /**
47
+ * Prepare request parameters for Gemini API via Vercel AI SDK.
48
+ *
49
+ * Gemini Strategy:
50
+ * - Use response_format parameter for structured JSON output
51
+ * - Vercel AI SDK handles translation to Gemini's native format
52
+ * - Skip structured output for text mode (string return types)
53
+ */
54
+ prepareRequest(messages: LlmMessage[], tools: ToolSchema[] | null, outputSchema: OutputSchema | null, options?: {
55
+ outputMode?: OutputMode;
56
+ temperature?: number;
57
+ maxOutputTokens?: number;
58
+ topP?: number;
59
+ [key: string]: unknown;
60
+ }): PreparedRequest;
61
+ /**
62
+ * Format system prompt for Gemini (concise approach).
63
+ *
64
+ * Gemini Strategy:
65
+ * 1. Use base prompt as-is
66
+ * 2. Add tool calling instructions if tools present
67
+ * 3. Minimal JSON instructions (response_format handles structure)
68
+ * 4. Keep prompt concise - Gemini works well with clear, direct prompts
69
+ */
70
+ formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
71
+ /**
72
+ * Return Gemini-specific capabilities.
73
+ */
74
+ getCapabilities(): VendorCapabilities;
75
+ /**
76
+ * Determine output mode - Gemini uses strict mode for schemas.
77
+ *
78
+ * Uses the default implementation since Gemini has good structured output support.
79
+ */
80
+ determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
81
+ }
82
+ //# sourceMappingURL=gemini-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/gemini-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAK/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,YAAY;IAE3B;;;;;;;OAOG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IAuDlB;;;;;;;;OAQG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IAsBT;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;OAIG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAGd"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Gemini/Google provider handler.
3
+ *
4
+ * Optimized for Gemini models (Gemini 2.0 Flash, Gemini 1.5 Pro, etc.)
5
+ * using Google's best practices for tool calling and structured output.
6
+ *
7
+ * Features:
8
+ * - Native structured output via response_format (via Vercel AI SDK)
9
+ * - Native function calling support
10
+ * - Support for Gemini 2.x and 3.x models
11
+ * - Large context windows (up to 2M tokens)
12
+ *
13
+ * Based on Python's GeminiHandler:
14
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/gemini_handler.py
15
+ *
16
+ * Reference:
17
+ * - https://ai.google.dev/gemini-api/docs
18
+ */
19
+ import { createDebug } from "../debug.js";
20
+ import { convertMessagesToVercelFormat, makeSchemaStrict, defaultDetermineOutputMode, BASE_TOOL_INSTRUCTIONS, } from "./provider-handler.js";
21
+ import { ProviderHandlerRegistry } from "./provider-handler-registry.js";
22
+ const debug = createDebug("gemini-handler");
23
+ /**
24
+ * Provider handler for Google Gemini models.
25
+ *
26
+ * Gemini Characteristics:
27
+ * - Native structured output via response_format (Vercel AI SDK translates)
28
+ * - Native function calling support
29
+ * - Large context windows (1M-2M tokens)
30
+ * - Multimodal support (text, images, video, audio)
31
+ * - Works well with concise, focused prompts
32
+ *
33
+ * Key Similarities with OpenAI:
34
+ * - Uses response_format for structured output (via Vercel AI SDK)
35
+ * - Native function calling format
36
+ * - Similar schema enforcement requirements
37
+ *
38
+ * Supported Models (via Vercel AI SDK):
39
+ * - gemini-2.0-flash (fast, efficient)
40
+ * - gemini-2.0-flash-lite (fastest, most efficient)
41
+ * - gemini-1.5-pro (high capability)
42
+ * - gemini-1.5-flash (balanced)
43
+ * - gemini-3-flash-preview (reasoning support)
44
+ * - gemini-3-pro-preview (advanced reasoning)
45
+ */
46
+ export class GeminiHandler {
47
+ vendor = "google";
48
+ /**
49
+ * Prepare request parameters for Gemini API via Vercel AI SDK.
50
+ *
51
+ * Gemini Strategy:
52
+ * - Use response_format parameter for structured JSON output
53
+ * - Vercel AI SDK handles translation to Gemini's native format
54
+ * - Skip structured output for text mode (string return types)
55
+ */
56
+ prepareRequest(messages, tools, outputSchema, options) {
57
+ const { outputMode, temperature, maxOutputTokens: maxTokens, topP, ...rest } = options ?? {};
58
+ const determinedMode = this.determineOutputMode(outputSchema, outputMode);
59
+ // Convert messages to Vercel AI SDK format (shared utility)
60
+ const convertedMessages = convertMessagesToVercelFormat(messages);
61
+ const request = {
62
+ messages: convertedMessages,
63
+ ...rest,
64
+ };
65
+ // Add tools if provided
66
+ // Vercel AI SDK will convert to Gemini's function_declarations format
67
+ if (tools && tools.length > 0) {
68
+ request.tools = tools;
69
+ }
70
+ // Add standard parameters if provided
71
+ if (temperature !== undefined) {
72
+ request.temperature = temperature;
73
+ }
74
+ if (maxTokens !== undefined) {
75
+ request.maxOutputTokens = maxTokens;
76
+ }
77
+ if (topP !== undefined) {
78
+ request.topP = topP;
79
+ }
80
+ // Skip structured output for text mode or no schema
81
+ if (determinedMode === "text" || !outputSchema) {
82
+ return request;
83
+ }
84
+ // Only add response_format in "strict" mode
85
+ // Hint mode relies on prompt instructions instead
86
+ if (determinedMode === "strict") {
87
+ // Vercel AI SDK translates this to Gemini's native format
88
+ const strictSchema = makeSchemaStrict(outputSchema.schema, { addAllRequired: true });
89
+ request.responseFormat = {
90
+ type: "json_schema",
91
+ jsonSchema: {
92
+ name: outputSchema.name,
93
+ schema: strictSchema,
94
+ strict: true, // Enforce schema compliance
95
+ },
96
+ };
97
+ debug(`Using response_format with strict schema: ${outputSchema.name}`);
98
+ }
99
+ return request;
100
+ }
101
+ /**
102
+ * Format system prompt for Gemini (concise approach).
103
+ *
104
+ * Gemini Strategy:
105
+ * 1. Use base prompt as-is
106
+ * 2. Add tool calling instructions if tools present
107
+ * 3. Minimal JSON instructions (response_format handles structure)
108
+ * 4. Keep prompt concise - Gemini works well with clear, direct prompts
109
+ */
110
+ formatSystemPrompt(basePrompt, toolSchemas, outputSchema, outputMode) {
111
+ let systemContent = basePrompt;
112
+ const determinedMode = this.determineOutputMode(outputSchema, outputMode);
113
+ // Add tool calling instructions if tools available
114
+ if (toolSchemas && toolSchemas.length > 0) {
115
+ systemContent += BASE_TOOL_INSTRUCTIONS;
116
+ }
117
+ // Skip JSON note for text mode
118
+ if (determinedMode === "text" || !outputSchema) {
119
+ return systemContent;
120
+ }
121
+ // Add brief JSON note (response_format handles enforcement)
122
+ systemContent += `
123
+
124
+ Your final response will be structured as JSON matching the ${outputSchema.name} format.`;
125
+ return systemContent;
126
+ }
127
+ /**
128
+ * Return Gemini-specific capabilities.
129
+ */
130
+ getCapabilities() {
131
+ return {
132
+ nativeToolCalling: true, // Gemini has native function calling
133
+ structuredOutput: true, // Supports structured output via response_format
134
+ streaming: true, // Supports streaming
135
+ vision: true, // Gemini supports multimodal (images, video, audio)
136
+ jsonMode: true, // Native JSON mode via response_format
137
+ };
138
+ }
139
+ /**
140
+ * Determine output mode - Gemini uses strict mode for schemas.
141
+ *
142
+ * Uses the default implementation since Gemini has good structured output support.
143
+ */
144
+ determineOutputMode(outputSchema, overrideMode) {
145
+ return defaultDetermineOutputMode(outputSchema, overrideMode);
146
+ }
147
+ }
148
+ // Register with the registry
149
+ // Use "google" as vendor name to match Vercel AI SDK model extraction
150
+ // (e.g., "google/gemini-2.0-flash" → vendor "google")
151
+ ProviderHandlerRegistry.register("google", GeminiHandler);
152
+ //# sourceMappingURL=gemini-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/gemini-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Generic provider handler for unknown/unsupported vendors.
3
+ *
4
+ * Provides sensible defaults using prompt-based approach similar to Claude.
5
+ *
6
+ * Based on Python's GenericHandler:
7
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/generic_handler.py
8
+ */
9
+ import type { LlmMessage } from "../types.js";
10
+ import type { ProviderHandler, VendorCapabilities, ToolSchema, OutputSchema, PreparedRequest, OutputMode } from "./provider-handler.js";
11
+ /**
12
+ * Generic provider handler for vendors without specific handlers.
13
+ *
14
+ * This handler provides a safe, conservative approach that should work
15
+ * with most LLM providers that follow OpenAI-compatible APIs:
16
+ * - Uses prompt-based JSON instructions
17
+ * - Standard tool calling format (via Vercel AI SDK normalization)
18
+ * - No vendor-specific features
19
+ * - Maximum compatibility
20
+ *
21
+ * Use Cases:
22
+ * - Fallback for unknown vendors
23
+ * - New providers before dedicated handler is created
24
+ * - Testing with custom/local models
25
+ * - Providers like: Cohere, Together, Replicate, Ollama, etc.
26
+ *
27
+ * Strategy:
28
+ * - Conservative, prompt-based approach
29
+ * - Relies on Vercel AI SDK to normalize vendor differences
30
+ * - Works with any provider that Vercel AI SDK supports
31
+ */
32
+ export declare class GenericHandler implements ProviderHandler {
33
+ readonly vendor: string;
34
+ constructor(vendor?: string);
35
+ /**
36
+ * Prepare request with standard parameters.
37
+ *
38
+ * Generic Strategy:
39
+ * - Use standard message format
40
+ * - Include tools if provided (Vercel AI SDK will normalize)
41
+ * - No vendor-specific parameters
42
+ * - Let Vercel AI SDK handle vendor differences
43
+ */
44
+ prepareRequest(messages: LlmMessage[], tools: ToolSchema[] | null, _outputSchema: OutputSchema | null, // unused in generic handler, but required by interface
45
+ options?: {
46
+ outputMode?: OutputMode;
47
+ temperature?: number;
48
+ maxOutputTokens?: number;
49
+ topP?: number;
50
+ [key: string]: unknown;
51
+ }): PreparedRequest;
52
+ /**
53
+ * Format system prompt with explicit JSON instructions.
54
+ *
55
+ * Generic Strategy:
56
+ * - Use detailed prompt instructions (works with most models)
57
+ * - Explicit JSON schema (since we can't assume response_format)
58
+ * - Clear tool calling guidelines
59
+ * - Maximum explicitness for compatibility
60
+ * - Skip JSON schema for text mode (string return type)
61
+ */
62
+ formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
63
+ /**
64
+ * Return conservative capability flags.
65
+ *
66
+ * For generic handler, we assume minimal capabilities
67
+ * to ensure maximum compatibility.
68
+ */
69
+ getCapabilities(): VendorCapabilities;
70
+ /**
71
+ * Determine output mode - generic handler always uses "hint" for schemas.
72
+ *
73
+ * Since we can't assume structured output support, we rely on
74
+ * prompt-based instructions (hint mode) for JSON schema compliance.
75
+ */
76
+ determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
77
+ }
78
+ //# sourceMappingURL=generic-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/generic-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,EACX,MAAM,uBAAuB,CAAC;AAG/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,GAAE,MAAkB;IAItC;;;;;;;;OAQG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,aAAa,EAAE,YAAY,GAAG,IAAI,EAAE,uDAAuD;IAC3F,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IA8BlB;;;;;;;;;OASG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IAwCT;;;;;OAKG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;;OAKG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAed"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Generic provider handler for unknown/unsupported vendors.
3
+ *
4
+ * Provides sensible defaults using prompt-based approach similar to Claude.
5
+ *
6
+ * Based on Python's GenericHandler:
7
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/generic_handler.py
8
+ */
9
+ import { ProviderHandlerRegistry } from "./provider-handler-registry.js";
10
+ /**
11
+ * Generic provider handler for vendors without specific handlers.
12
+ *
13
+ * This handler provides a safe, conservative approach that should work
14
+ * with most LLM providers that follow OpenAI-compatible APIs:
15
+ * - Uses prompt-based JSON instructions
16
+ * - Standard tool calling format (via Vercel AI SDK normalization)
17
+ * - No vendor-specific features
18
+ * - Maximum compatibility
19
+ *
20
+ * Use Cases:
21
+ * - Fallback for unknown vendors
22
+ * - New providers before dedicated handler is created
23
+ * - Testing with custom/local models
24
+ * - Providers like: Cohere, Together, Replicate, Ollama, etc.
25
+ *
26
+ * Strategy:
27
+ * - Conservative, prompt-based approach
28
+ * - Relies on Vercel AI SDK to normalize vendor differences
29
+ * - Works with any provider that Vercel AI SDK supports
30
+ */
31
+ export class GenericHandler {
32
+ vendor;
33
+ constructor(vendor = "unknown") {
34
+ this.vendor = vendor;
35
+ }
36
+ /**
37
+ * Prepare request with standard parameters.
38
+ *
39
+ * Generic Strategy:
40
+ * - Use standard message format
41
+ * - Include tools if provided (Vercel AI SDK will normalize)
42
+ * - No vendor-specific parameters
43
+ * - Let Vercel AI SDK handle vendor differences
44
+ */
45
+ prepareRequest(messages, tools, _outputSchema, // unused in generic handler, but required by interface
46
+ options) {
47
+ const { outputMode, temperature, maxOutputTokens: maxTokens, topP, ...rest } = options ?? {};
48
+ const request = {
49
+ messages: [...messages],
50
+ ...rest,
51
+ };
52
+ // Add tools if provided (Vercel AI SDK will convert to vendor format)
53
+ if (tools && tools.length > 0) {
54
+ request.tools = tools;
55
+ }
56
+ // Add standard parameters if provided
57
+ if (temperature !== undefined) {
58
+ request.temperature = temperature;
59
+ }
60
+ if (maxTokens !== undefined) {
61
+ request.maxOutputTokens = maxTokens;
62
+ }
63
+ if (topP !== undefined) {
64
+ request.topP = topP;
65
+ }
66
+ // Don't add responseFormat - not all vendors support it
67
+ // Rely on prompt-based JSON instructions instead
68
+ return request;
69
+ }
70
+ /**
71
+ * Format system prompt with explicit JSON instructions.
72
+ *
73
+ * Generic Strategy:
74
+ * - Use detailed prompt instructions (works with most models)
75
+ * - Explicit JSON schema (since we can't assume response_format)
76
+ * - Clear tool calling guidelines
77
+ * - Maximum explicitness for compatibility
78
+ * - Skip JSON schema for text mode (string return type)
79
+ */
80
+ formatSystemPrompt(basePrompt, toolSchemas, outputSchema, outputMode) {
81
+ let systemContent = basePrompt;
82
+ const mode = this.determineOutputMode(outputSchema, outputMode);
83
+ // Add tool calling instructions if tools available
84
+ if (toolSchemas && toolSchemas.length > 0) {
85
+ systemContent += `
86
+
87
+ TOOL CALLING RULES:
88
+ - You can call tools to gather information
89
+ - Make one tool call at a time
90
+ - Wait for tool results before making additional calls
91
+ - Use standard JSON function calling format
92
+ - Provide your final response after gathering needed information
93
+ `;
94
+ }
95
+ // Skip JSON schema for text mode
96
+ if (mode === "text" || !outputSchema) {
97
+ return systemContent;
98
+ }
99
+ // Add explicit JSON schema instructions
100
+ // (since we can't rely on vendor-specific structured output)
101
+ const schemaStr = JSON.stringify(outputSchema.schema, null, 2);
102
+ systemContent += `
103
+
104
+ IMPORTANT: Return your final response as valid JSON matching this exact schema:
105
+ ${schemaStr}
106
+
107
+ Rules:
108
+ - Return ONLY the JSON object, no markdown, no additional text
109
+ - Ensure all required fields are present
110
+ - Match the schema exactly
111
+ - Use double quotes for strings
112
+ - Do not include comments`;
113
+ return systemContent;
114
+ }
115
+ /**
116
+ * Return conservative capability flags.
117
+ *
118
+ * For generic handler, we assume minimal capabilities
119
+ * to ensure maximum compatibility.
120
+ */
121
+ getCapabilities() {
122
+ return {
123
+ nativeToolCalling: true, // Most modern LLMs support this via Vercel AI SDK
124
+ structuredOutput: false, // Can't assume all vendors support response_format
125
+ streaming: false, // Conservative - not all vendors support streaming
126
+ vision: false, // Conservative - not all models support vision
127
+ jsonMode: false, // Conservative - use prompt-based JSON instead
128
+ };
129
+ }
130
+ /**
131
+ * Determine output mode - generic handler always uses "hint" for schemas.
132
+ *
133
+ * Since we can't assume structured output support, we rely on
134
+ * prompt-based instructions (hint mode) for JSON schema compliance.
135
+ */
136
+ determineOutputMode(outputSchema, overrideMode) {
137
+ // Allow explicit override
138
+ if (overrideMode) {
139
+ return overrideMode;
140
+ }
141
+ // No schema means text mode
142
+ if (!outputSchema) {
143
+ return "text";
144
+ }
145
+ // Generic handler uses hint mode (prompt-based JSON instructions)
146
+ // since we can't assume structured output support
147
+ return "hint";
148
+ }
149
+ }
150
+ // Register as fallback handler
151
+ ProviderHandlerRegistry.setFallbackHandler(GenericHandler);
152
+ //# sourceMappingURL=generic-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-handler.js","sourceRoot":"","sources":["../../src/provider-handlers/generic-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Provider-specific handlers for LLM vendors.
3
+ *
4
+ * This package provides vendor-specific customization for different LLM providers
5
+ * (Claude, OpenAI, Gemini, etc.) to optimize API calls and response handling.
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * import { ProviderHandlerRegistry } from "@mcpmesh/sdk/provider-handlers";
10
+ *
11
+ * const handler = ProviderHandlerRegistry.getHandler("anthropic");
12
+ * const request = handler.prepareRequest(messages, tools, outputSchema);
13
+ * ```
14
+ *
15
+ * Based on Python's provider_handlers package:
16
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/
17
+ */
18
+ export type { ProviderHandler, VendorCapabilities, ToolSchema, OutputSchema, PreparedRequest, OutputMode, } from "./provider-handler.js";
19
+ export { convertMessagesToVercelFormat } from "./provider-handler.js";
20
+ export { ProviderHandlerRegistry, type ProviderHandlerConstructor, } from "./provider-handler-registry.js";
21
+ import "./generic-handler.js";
22
+ import "./claude-handler.js";
23
+ import "./openai-handler.js";
24
+ import "./gemini-handler.js";
25
+ export { GenericHandler } from "./generic-handler.js";
26
+ export { ClaudeHandler } from "./claude-handler.js";
27
+ export { OpenAIHandler } from "./openai-handler.js";
28
+ export { GeminiHandler } from "./gemini-handler.js";
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EACL,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,gCAAgC,CAAC;AAIxC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Provider-specific handlers for LLM vendors.
3
+ *
4
+ * This package provides vendor-specific customization for different LLM providers
5
+ * (Claude, OpenAI, Gemini, etc.) to optimize API calls and response handling.
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * import { ProviderHandlerRegistry } from "@mcpmesh/sdk/provider-handlers";
10
+ *
11
+ * const handler = ProviderHandlerRegistry.getHandler("anthropic");
12
+ * const request = handler.prepareRequest(messages, tools, outputSchema);
13
+ * ```
14
+ *
15
+ * Based on Python's provider_handlers package:
16
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/
17
+ */
18
+ export { convertMessagesToVercelFormat } from "./provider-handler.js";
19
+ // Export registry
20
+ export { ProviderHandlerRegistry, } from "./provider-handler-registry.js";
21
+ // Import handlers to trigger their self-registration
22
+ // Order matters: generic-handler sets fallback, then specific handlers register
23
+ import "./generic-handler.js";
24
+ import "./claude-handler.js";
25
+ import "./openai-handler.js";
26
+ import "./gemini-handler.js";
27
+ // Re-export handler classes for direct use or extension
28
+ export { GenericHandler } from "./generic-handler.js";
29
+ export { ClaudeHandler } from "./claude-handler.js";
30
+ export { OpenAIHandler } from "./openai-handler.js";
31
+ export { GeminiHandler } from "./gemini-handler.js";
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE,kBAAkB;AAClB,OAAO,EACL,uBAAuB,GAExB,MAAM,gCAAgC,CAAC;AAExC,qDAAqD;AACrD,gFAAgF;AAChF,OAAO,sBAAsB,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAE7B,wDAAwD;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * OpenAI provider handler.
3
+ *
4
+ * Optimized for OpenAI models (GPT-4, GPT-4 Turbo, GPT-3.5-turbo)
5
+ * using OpenAI's native structured output capabilities.
6
+ *
7
+ * Based on Python's OpenAIHandler:
8
+ * src/runtime/python/_mcp_mesh/engine/provider_handlers/openai_handler.py
9
+ */
10
+ import type { LlmMessage } from "../types.js";
11
+ import { type ProviderHandler, type VendorCapabilities, type ToolSchema, type OutputSchema, type PreparedRequest, type OutputMode } from "./provider-handler.js";
12
+ /**
13
+ * Provider handler for OpenAI models.
14
+ *
15
+ * OpenAI Characteristics:
16
+ * - Native structured output via response_format parameter
17
+ * - Strict JSON schema enforcement
18
+ * - Built-in function calling
19
+ * - Works best with concise, focused prompts
20
+ * - response_format ensures valid JSON matching schema
21
+ *
22
+ * Key Difference from Claude:
23
+ * - Uses response_format instead of prompt-based JSON instructions
24
+ * - OpenAI API guarantees JSON schema compliance
25
+ * - More strict parsing, less tolerance for malformed JSON
26
+ * - Shorter system prompts work better
27
+ *
28
+ * Supported Models:
29
+ * - gpt-4-turbo-preview and later
30
+ * - gpt-4-0125-preview and later
31
+ * - gpt-3.5-turbo-0125 and later
32
+ * - All gpt-4o models
33
+ *
34
+ * Reference: https://platform.openai.com/docs/guides/structured-outputs
35
+ */
36
+ export declare class OpenAIHandler implements ProviderHandler {
37
+ readonly vendor = "openai";
38
+ /**
39
+ * Prepare request parameters for OpenAI API with structured output.
40
+ *
41
+ * OpenAI Strategy:
42
+ * - Use response_format parameter for guaranteed JSON schema compliance
43
+ * - This is the KEY difference from Claude handler
44
+ * - response_format.json_schema ensures the response matches output schema
45
+ * - Skip structured output for text mode (string return types)
46
+ *
47
+ * Message Format (OpenAI-specific):
48
+ * - Assistant messages with tool_calls → content blocks with type "tool-call"
49
+ * - Tool result messages → content blocks with type "tool-result"
50
+ * This is required for Vercel AI SDK to properly convert to OpenAI's native format.
51
+ */
52
+ prepareRequest(messages: LlmMessage[], tools: ToolSchema[] | null, outputSchema: OutputSchema | null, options?: {
53
+ outputMode?: OutputMode;
54
+ temperature?: number;
55
+ maxOutputTokens?: number;
56
+ topP?: number;
57
+ [key: string]: unknown;
58
+ }): PreparedRequest;
59
+ /**
60
+ * Format system prompt for OpenAI (concise approach).
61
+ *
62
+ * OpenAI Strategy:
63
+ * 1. Use base prompt as-is
64
+ * 2. Add tool calling instructions if tools present
65
+ * 3. NO JSON schema instructions (response_format handles this)
66
+ * 4. Keep prompt concise - OpenAI works well with shorter prompts
67
+ * 5. Skip JSON note for text mode (string return type)
68
+ *
69
+ * Key Difference from Claude:
70
+ * - No JSON schema in prompt (response_format ensures compliance)
71
+ * - Shorter, more focused instructions
72
+ * - Let response_format handle output structure
73
+ */
74
+ formatSystemPrompt(basePrompt: string, toolSchemas: ToolSchema[] | null, outputSchema: OutputSchema | null, outputMode?: OutputMode): string;
75
+ /**
76
+ * Return OpenAI-specific capabilities.
77
+ */
78
+ getCapabilities(): VendorCapabilities;
79
+ /**
80
+ * Determine output mode - OpenAI always uses strict mode for schemas.
81
+ *
82
+ * Uses the default implementation since OpenAI has excellent structured output support.
83
+ */
84
+ determineOutputMode(outputSchema: OutputSchema | null, overrideMode?: OutputMode): OutputMode;
85
+ }
86
+ //# sourceMappingURL=openai-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-handler.d.ts","sourceRoot":"","sources":["../../src/provider-handlers/openai-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAK/B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,MAAM,YAAY;IAE3B;;;;;;;;;;;;;OAaG;IACH,cAAc,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,eAAe;IAyDlB;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAChC,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM;IA2BT;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAUrC;;;;OAIG;IACH,mBAAmB,CACjB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,YAAY,CAAC,EAAE,UAAU,GACxB,UAAU;CAGd"}