#pragma once
#include <optional>
#include <string>
#include <variant>
#include <vector>
#include <nlohmann/json.hpp>
struct SystemMessage
{
std::string content;
};
struct UserMessage
{
std::string content;
};
struct ToolCall
{
std::string id;
std::string name;
nlohmann::json arguments;
};
struct AssistantMessage
{
std::optional<std::string> content;
std::vector<ToolCall> tool_calls;
};
struct ToolResultMessage
{
std::string tool_call_id;
std::string content;
};
using Message = std::variant<SystemMessage, UserMessage, AssistantMessage,
ToolResultMessage>;
nlohmann::json toJson(const SystemMessage& msg);
nlohmann::json toJson(const UserMessage& msg);
nlohmann::json toJson(const ToolCall& msg);
nlohmann::json toJson(const AssistantMessage& msg);
nlohmann::json toJson(const ToolResultMessage& msg);
nlohmann::json toJson(const Message& msg);
struct Skill
{
std::string name;
std::string system_prompt;
std::vector<std::string> allowed_tools;
};