2023-10-12 18:23:18 +03:00
#ifndef CLIP_H
#define CLIP_H
2023-11-06 22:36:23 +01:00
#include <stddef.h>
#include <stdint.h>
#ifdef LLAMA_SHARED
# if defined(_WIN32) && !defined(__MINGW32__)
# ifdef LLAMA_BUILD
# define CLIP_API __declspec(dllexport)
# else
# define CLIP_API __declspec(dllimport)
# endif
# else
# define CLIP_API __attribute__ ((visibility ("default")))
# endif
#else
# define CLIP_API
#endif
2023-10-12 18:23:18 +03:00
#ifdef __cplusplus
extern "C" {
#endif
2024-02-14 08:38:35 +01:00
struct clip_ctx ;
2023-10-12 18:23:18 +03:00
2024-08-09 18:33:53 +08:00
struct clip_image_size {
int width ;
int height ;
};
2023-10-12 18:23:18 +03:00
struct clip_image_u8_batch {
struct clip_image_u8 * data ;
size_t size ;
};
struct clip_image_f32_batch {
struct clip_image_f32 * data ;
size_t size ;
};
2024-02-14 08:38:35 +01:00
CLIP_API struct clip_ctx * clip_model_load ( const char * fname , int verbosity );
CLIP_API struct clip_ctx * clip_model_load_cpu ( const char * fname , int verbosity );
CLIP_API void clip_free ( struct clip_ctx * ctx );
CLIP_API size_t clip_embd_nbytes ( const struct clip_ctx * ctx );
2024-12-14 20:43:46 +08:00
CLIP_API size_t clip_embd_nbytes_by_img ( const struct clip_ctx * ctx , int img_h , int img_w );
2024-02-14 08:38:35 +01:00
CLIP_API int32_t clip_image_size ( const struct clip_ctx * ctx );
CLIP_API int32_t clip_patch_size ( const struct clip_ctx * ctx );
CLIP_API int32_t clip_hidden_size ( const struct clip_ctx * ctx );
// TODO: should be enum, not string
CLIP_API const char * clip_patch_merge_type ( const struct clip_ctx * ctx );
CLIP_API const int32_t * clip_image_grid ( const struct clip_ctx * ctx );
2025-02-24 09:09:51 -07:00
CLIP_API size_t get_clip_image_grid_size ( const struct clip_ctx * ctx );
2024-02-14 08:38:35 +01:00
2024-12-14 20:43:46 +08:00
CLIP_API int clip_n_patches ( const struct clip_ctx * ctx );
CLIP_API int clip_n_patches_by_img ( const struct clip_ctx * ctx , struct clip_image_f32 * img );
CLIP_API int clip_n_mmproj_embd ( const struct clip_ctx * ctx );
2024-02-14 08:38:35 +01:00
2024-08-09 18:33:53 +08:00
CLIP_API int clip_uhd_num_image_embeds_col ( struct clip_ctx * ctx_clip );
CLIP_API void clip_add_load_image_size ( struct clip_ctx * ctx_clip , struct clip_image_size * load_image_size );
2024-12-14 20:43:46 +08:00
CLIP_API struct clip_image_size * clip_get_load_image_size ( struct clip_ctx * ctx_clip );
2024-08-09 18:33:53 +08:00
CLIP_API struct clip_image_size * clip_image_size_init ();
2023-12-30 23:24:42 +02:00
CLIP_API struct clip_image_u8 * clip_image_u8_init ();
CLIP_API struct clip_image_f32 * clip_image_f32_init ();
2024-02-14 08:38:35 +01:00
CLIP_API void clip_image_u8_free ( struct clip_image_u8 * img );
2023-12-30 23:24:42 +02:00
CLIP_API void clip_image_f32_free ( struct clip_image_f32 * img );
2024-03-15 22:31:05 +08:00
CLIP_API void clip_image_u8_batch_free ( struct clip_image_u8_batch * batch );
CLIP_API void clip_image_f32_batch_free ( struct clip_image_f32_batch * batch );
2023-12-30 23:24:42 +02:00
2025-02-22 22:28:28 +08:00
/** build image from pixels decoded by other libraries instead of stb_image.h for better performance. The memory layout is RGBRGBRGB..., input buffer length must be 3*nx*ny bytes */
CLIP_API void clip_build_img_from_pixels ( const unsigned char * rgb_pixels , int nx , int ny , clip_image_u8 * img );
2023-11-06 22:36:23 +01:00
CLIP_API bool clip_image_load_from_file ( const char * fname , struct clip_image_u8 * img );
2023-12-30 23:24:42 +02:00
2023-11-06 22:36:23 +01:00
/** interpret bytes as an image file with length bytes_length, and use the result to populate img */
CLIP_API bool clip_image_load_from_bytes ( const unsigned char * bytes , size_t bytes_length , struct clip_image_u8 * img );
2024-05-28 11:48:16 +09:00
/** preprocess img and store the result in res_imgs, pad_to_square may be overridden to false depending on model configuration */
2024-03-15 22:31:05 +08:00
CLIP_API bool clip_image_preprocess ( struct clip_ctx * ctx , const struct clip_image_u8 * img , struct clip_image_f32_batch * res_imgs );
2024-02-14 08:38:35 +01:00
CLIP_API struct ggml_tensor * clip_get_newline_tensor ( const struct clip_ctx * ctx );
2023-12-30 23:24:42 +02:00
CLIP_API bool clip_image_encode ( struct clip_ctx * ctx , int n_threads , struct clip_image_f32 * img , float * vec );
CLIP_API bool clip_image_batch_encode ( struct clip_ctx * ctx , int n_threads , const struct clip_image_f32_batch * imgs , float * vec );
2023-10-12 18:23:18 +03:00
2023-12-30 23:24:42 +02:00
CLIP_API bool clip_model_quantize ( const char * fname_inp , const char * fname_out , int itype );
2023-10-12 18:23:18 +03:00
2024-08-16 21:34:41 +08:00
CLIP_API int clip_is_minicpmv ( const struct clip_ctx * ctx );
2025-02-24 09:09:51 -07:00
CLIP_API bool clip_is_glm ( const struct clip_ctx * ctx );
2024-12-14 20:43:46 +08:00
CLIP_API bool clip_is_qwen2vl ( const struct clip_ctx * ctx );
2025-02-24 09:09:51 -07:00
CLIP_API int get_deepest_feature_layer ( const struct clip_ctx * ctx );
2024-12-14 20:43:46 +08:00
CLIP_API bool clip_encode_float_image ( struct clip_ctx * ctx , int n_threads , float * img , int h , int w , float * vec );
2024-08-09 18:33:53 +08:00
2025-02-02 15:48:46 +08:00
2023-10-12 18:23:18 +03:00
#ifdef __cplusplus
}
#endif
#endif // CLIP_H