# YAML schema for GGML remoting API functions
# This defines the structure for generating the remoting layer code

# Configuration for the generated files
config:
  # Base path for the generated files
  base_path: "ggml/src"

  # Header files to update
  files:
    apir_backend_header: "ggml-virtgpu-apir/backend/shared/apir_backend.gen.h"
    backend_dispatched_header: "ggml-virtgpu-apir/backend/backend-dispatched.gen.h"
    virtgpu_forward_header: "ggml-virtgpu-apir/virtgpu-forward.gen.h"

# Simplified function definitions with grouping and metadata combined
functions:
  device:
    group_description: "device"
    functions:
      get_device_count:
        # No specific metadata - uses default void return and base params

      get_count:
        frontend_return: "int"

      get_name:
        frontend_return: "char *"

      get_description:
        frontend_return: "char *"

      get_type:
        frontend_return: "uint32_t"

      get_memory:
        frontend_return: "void"
        frontend_extra_params:
        - "size_t *free"
        - "size_t *total"

      supports_op:
        frontend_return: "bool"
        frontend_extra_params:
        - "const ggml_tensor *op"

      get_buffer_type:
        frontend_return: "apir_buffer_type_host_handle_t"

      get_props:
        frontend_return: "void"
        frontend_extra_params:
        - "bool *async"
        - "bool *host_buffer"
        - "bool *buffer_from_host_ptr"
        - "bool *events"

      buffer_from_ptr:
        frontend_return: "apir_buffer_context_t"
        frontend_extra_params:
        - "size_t size"
        - "size_t max_tensor_size"

  buffer_type:
    group_description: "buffer-type"
    functions:
      get_name:
        frontend_return: "char *"
        frontend_extra_params:
        - "apir_buffer_type_host_handle_t host_handle"

      get_alignment:
        frontend_return: "size_t"
        frontend_extra_params:
        - "apir_buffer_type_host_handle_t host_handle"

      get_max_size:
        frontend_return: "size_t"
        frontend_extra_params:
        - "apir_buffer_type_host_handle_t host_handle"

      is_host:
        deprecated: true

      alloc_buffer:
        frontend_return: "apir_buffer_context_t"
        frontend_extra_params:
        - "apir_buffer_type_host_handle_t host_handle"
        - "size_t size"

      get_alloc_size:
        frontend_return: "size_t"
        frontend_extra_params:
        - "apir_buffer_type_host_handle_t host_handle"
        - "const ggml_tensor *op"

  buffer:
    group_description: "buffer"
    functions:
      get_base:
        frontend_return: "void *"
        frontend_extra_params:
        - "apir_buffer_context_t *buffer_context"

      set_tensor:
        frontend_return: "void"
        frontend_extra_params:
        - "apir_buffer_context_t *buffer_context"
        - "ggml_tensor *tensor"
        - "const void *data"
        - "size_t offset"
        - "size_t size"

      get_tensor:
        frontend_return: "void"
        frontend_extra_params:
        - "apir_buffer_context_t *buffer_context"
        - "const ggml_tensor *tensor"
        - "void *data"
        - "size_t offset"
        - "size_t size"

      cpy_tensor:
        frontend_return: "bool"
        frontend_extra_params:
        - "apir_buffer_context_t *buffer_context"
        - "const ggml_tensor *src"
        - "const ggml_tensor *dst"

      clear:
        frontend_return: "void"
        frontend_extra_params:
        - "apir_buffer_context_t *buffer_context"
        - "uint8_t value"

      free_buffer:
        frontend_return: "void"
        frontend_extra_params:
        - "apir_buffer_context_t *buffer_context"

  backend:
    group_description: "backend"
    functions:
      graph_compute:
        frontend_return: "ggml_status"
        frontend_extra_params:
        - "ggml_cgraph *cgraph"

      graph_optimize:
        frontend_return: "ggml_cgraph *"
        frontend_extra_params:
        - "ggml_cgraph *cgraph"
        enabled: false

# Naming patterns used for code generation
naming_patterns:
  # How to generate enum names
  enum_prefix: "APIR_COMMAND_TYPE_"

  # How to generate backend function names
  backend_function_prefix: "backend_"

  # How to generate frontend function names
  frontend_function_prefix: "apir_"

  # Standard frontend first parameter
  frontend_base_param: "struct virtgpu *gpu"
