#pragma once #include "esp_err.h" #include "cJSON.h" #include #include #include "mimi_config.h" /** * Initialize the LLM proxy. */ esp_err_t llm_proxy_init(void); /** * Send a chat completion request to Anthropic Messages API (streaming). * * @param system_prompt System prompt string * @param messages_json JSON array of messages: [{"role":"user","content":"..."},...] * @param response_buf Output buffer for the complete response text * @param buf_size Size of response_buf * @return ESP_OK on success */ esp_err_t llm_chat(const char *system_prompt, const char *messages_json, char *response_buf, size_t buf_size); /* ── Tool Use Support ──────────────────────────────────────────── */ typedef struct { char id[64]; /* "toolu_xxx" */ char name[32]; /* "web_search" */ char *input; /* heap-allocated JSON string */ size_t input_len; } llm_tool_call_t; typedef struct { char *text; /* accumulated text blocks */ size_t text_len; llm_tool_call_t calls[MIMI_MAX_TOOL_CALLS]; int call_count; bool tool_use; /* stop_reason == "tool_use" */ } llm_response_t; void llm_response_free(llm_response_t *resp); /** * Send a chat completion request with tools to Anthropic Messages API (streaming). * * @param system_prompt System prompt string * @param messages cJSON array of messages (caller owns) * @param tools_json Pre-built JSON string of tools array, or NULL for no tools * @param resp Output: structured response with text and tool calls * @return ESP_OK on success */ esp_err_t llm_chat_tools(const char *system_prompt, cJSON *messages, const char *tools_json, llm_response_t *resp);