Implement tools (function calling) for Claude
This commit is contained in:
@@ -144,6 +144,8 @@ function applyAwsStrictValidation(req: Request): unknown {
|
||||
temperature: true,
|
||||
top_k: true,
|
||||
top_p: true,
|
||||
tools: true,
|
||||
tool_choice: true,
|
||||
})
|
||||
.strip()
|
||||
.parse(req.body);
|
||||
|
||||
@@ -24,7 +24,6 @@ export const signGcpRequest: RequestPreprocessor = async (req) => {
|
||||
req.isStreaming = String(stream) === "true";
|
||||
|
||||
// TODO: This should happen in transform-outbound-payload.ts
|
||||
// TODO: Support tools
|
||||
let strippedParams: Record<string, unknown>;
|
||||
strippedParams = AnthropicV1MessagesSchema.pick({
|
||||
messages: true,
|
||||
@@ -34,6 +33,8 @@ export const signGcpRequest: RequestPreprocessor = async (req) => {
|
||||
temperature: true,
|
||||
top_k: true,
|
||||
top_p: true,
|
||||
tools: true,
|
||||
tool_choice: true,
|
||||
stream: true,
|
||||
})
|
||||
.strip()
|
||||
|
||||
@@ -19,7 +19,12 @@ const AnthropicV1BaseSchema = z
|
||||
top_k: z.coerce.number().optional(),
|
||||
top_p: z.coerce.number().optional(),
|
||||
metadata: z.object({ user_id: z.string().optional() }).optional(),
|
||||
tools: z.array(z.any()).optional(),
|
||||
tool_choice: z.any().optional(),
|
||||
})
|
||||
.omit(
|
||||
Boolean(config.allowOpenAIToolUsage) ? {} : { tools: true, tool_choice: true }
|
||||
)
|
||||
.strip();
|
||||
|
||||
// https://docs.anthropic.com/claude/reference/complete_post [deprecated]
|
||||
@@ -44,6 +49,18 @@ const AnthropicV1MessageMultimodalContentSchema = z.array(
|
||||
data: z.string(),
|
||||
}),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal("tool_use"),
|
||||
id: z.string(),
|
||||
name: z.string(),
|
||||
input: z.object({}).passthrough(),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal("tool_result"),
|
||||
tool_use_id: z.string(),
|
||||
is_error: z.boolean().optional(),
|
||||
content: z.union([z.string(), z.object({}).passthrough()]).optional(),
|
||||
}),
|
||||
])
|
||||
);
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@ async function getTokenCountForMessages({
|
||||
case "image":
|
||||
numTokens += await getImageTokenCount(part.source.data);
|
||||
break;
|
||||
case "tool_use":
|
||||
case "tool_result":
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unsupported Anthropic content type.`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user