diff options
Diffstat (limited to 'src/domain/message.h')
| -rw-r--r-- | src/domain/message.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/domain/message.h b/src/domain/message.h new file mode 100644 index 0000000..fa36d2a --- /dev/null +++ b/src/domain/message.h @@ -0,0 +1,60 @@ +#ifndef TINY_CONVMEM_DOMAIN_MESSAGE_H +#define TINY_CONVMEM_DOMAIN_MESSAGE_H + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> + +#define TINY_MESSAGE_ID_LENGTH 26 +#define TINY_SESSION_ID_MAX 256 +#define TINY_CONTENT_MAX (1024U * 1024U) +#define TINY_TOOL_CALL_ID_MAX 256 +#define TINY_TAG_MAX 128 +#define TINY_TAG_COUNT_MAX 32 +#define TINY_QUERY_MAX 4096 + +typedef enum tiny_role +{ + TINY_ROLE_USER = 1, + TINY_ROLE_ASSISTANT = 2, + TINY_ROLE_SYSTEM = 3 +} tiny_role_t; + +typedef enum tiny_memory_tier +{ + TINY_TIER_SHORT = 1, + TINY_TIER_MID = 2, + TINY_TIER_LONG = 3, + TINY_TIER_DISCARD = 4 +} tiny_memory_tier_t; + +typedef struct tiny_metadata +{ + char *tool_call_id; + char **tags; + size_t tag_count; + tiny_memory_tier_t memory_tier; +} tiny_metadata_t; + +typedef struct tiny_message +{ + char message_id[TINY_MESSAGE_ID_LENGTH + 1]; + char *session_id; + int64_t timestamp_ms; + tiny_role_t role; + char *content; + tiny_metadata_t metadata; +} tiny_message_t; + +void tiny_message_init(tiny_message_t *message); +void tiny_message_free(tiny_message_t *message); +int tiny_message_copy(tiny_message_t *destination, const tiny_message_t *source); + +const char *tiny_role_name(tiny_role_t role); +bool tiny_role_parse(const char *value, tiny_role_t *role); +const char *tiny_tier_name(tiny_memory_tier_t tier); +bool tiny_tier_parse(const char *value, tiny_memory_tier_t *tier); +bool tiny_utf8_valid(const char *value, size_t length); +bool tiny_message_id_valid(const char *value); + +#endif |
