@@ -794,7 +794,7 @@ function createMoonshotThinkingWrapper(
794794function requiresAnthropicToolPayloadCompatibilityForModel ( model : {
795795 api ?: unknown ;
796796 provider ?: unknown ;
797- baseUrl ?: unknown ;
797+ compat ?: unknown ;
798798} ) : boolean {
799799 if ( model . api !== "anthropic-messages" ) {
800800 return false ;
@@ -807,19 +807,49 @@ function requiresAnthropicToolPayloadCompatibilityForModel(model: {
807807 return true ;
808808 }
809809
810- if ( typeof model . baseUrl !== "string " || ! model . baseUrl . trim ( ) ) {
810+ if ( ! model . compat || typeof model . compat !== "object " || Array . isArray ( model . compat ) ) {
811811 return false ;
812812 }
813813
814- try {
815- const parsed = new URL ( model . baseUrl ) ;
816- const host = parsed . hostname . toLowerCase ( ) ;
817- const pathname = parsed . pathname . toLowerCase ( ) ;
818- return host . endsWith ( "kimi.com" ) && pathname . startsWith ( "/coding" ) ;
819- } catch {
820- const normalized = model . baseUrl . toLowerCase ( ) ;
821- return normalized . includes ( "kimi.com/coding" ) ;
814+ return (
815+ ( model . compat as { requiresOpenAiAnthropicToolPayload ?: unknown } )
816+ . requiresOpenAiAnthropicToolPayload === true
817+ ) ;
818+ }
819+
820+ function usesOpenAiFunctionAnthropicToolSchemaForModel ( model : {
821+ provider ?: unknown ;
822+ compat ?: unknown ;
823+ } ) : boolean {
824+ if ( typeof model . provider === "string" && usesOpenAiFunctionAnthropicToolSchema ( model . provider ) ) {
825+ return true ;
826+ }
827+ if ( ! model . compat || typeof model . compat !== "object" || Array . isArray ( model . compat ) ) {
828+ return false ;
822829 }
830+ return (
831+ ( model . compat as { requiresOpenAiAnthropicToolPayload ?: unknown } )
832+ . requiresOpenAiAnthropicToolPayload === true
833+ ) ;
834+ }
835+
836+ function usesOpenAiStringModeAnthropicToolChoiceForModel ( model : {
837+ provider ?: unknown ;
838+ compat ?: unknown ;
839+ } ) : boolean {
840+ if (
841+ typeof model . provider === "string" &&
842+ usesOpenAiStringModeAnthropicToolChoice ( model . provider )
843+ ) {
844+ return true ;
845+ }
846+ if ( ! model . compat || typeof model . compat !== "object" || Array . isArray ( model . compat ) ) {
847+ return false ;
848+ }
849+ return (
850+ ( model . compat as { requiresOpenAiAnthropicToolPayload ?: unknown } )
851+ . requiresOpenAiAnthropicToolPayload === true
852+ ) ;
823853}
824854
825855function normalizeOpenAiFunctionAnthropicToolDefinition (
@@ -903,19 +933,21 @@ function createAnthropicToolPayloadCompatibilityWrapper(
903933 return underlying ( model , context , {
904934 ...options ,
905935 onPayload : ( payload ) => {
906- const provider = typeof model . provider === "string" ? model . provider : undefined ;
907936 if (
908937 payload &&
909938 typeof payload === "object" &&
910939 requiresAnthropicToolPayloadCompatibilityForModel ( model )
911940 ) {
912941 const payloadObj = payload as Record < string , unknown > ;
913- if ( Array . isArray ( payloadObj . tools ) && usesOpenAiFunctionAnthropicToolSchema ( provider ) ) {
942+ if (
943+ Array . isArray ( payloadObj . tools ) &&
944+ usesOpenAiFunctionAnthropicToolSchemaForModel ( model )
945+ ) {
914946 payloadObj . tools = payloadObj . tools
915947 . map ( ( tool ) => normalizeOpenAiFunctionAnthropicToolDefinition ( tool ) )
916948 . filter ( ( tool ) : tool is Record < string , unknown > => ! ! tool ) ;
917949 }
918- if ( usesOpenAiStringModeAnthropicToolChoice ( provider ) ) {
950+ if ( usesOpenAiStringModeAnthropicToolChoiceForModel ( model ) ) {
919951 payloadObj . tool_choice = normalizeOpenAiStringModeAnthropicToolChoice (
920952 payloadObj . tool_choice ,
921953 ) ;
0 commit comments