← index
acidcam-gpu/ACMX2/shader_generator/mx2-ollama.hpp
Source: acidcam-gpu/ACMX2/shader_generator/mx2-ollama.hpp
#ifndef __MX2_OLLAMA_HPP__
#define __MX2_OLLAMA_HPP__

#include <algorithm>
#include <cctype>
#include <curl/curl.h>
#include <fstream>
#include <iostream>
#include <regex>
#include <sstream>
#include <string>

namespace mx {

    struct ResponseData {
        std::string response;
        std::ostringstream shader_stream;
    };

    class ObjectRequestException : public std::exception {
      public:
        explicit ObjectRequestException(const std::string &message) : msg(message) {}
        virtual const char *what() const noexcept override {
            return msg.c_str();
        }

      private:
        std::string msg;
    };

    class ObjectRequest {
      public:
        explicit ObjectRequest(const std::string &host_ = "localhost", const std::string &model_ = "codellama:7b", const std::string &filename_ = "shader.glsl") : host(host_), model(model_), filename(filename_) {}
        void setHost(const std::string &host_) {
            host = host_;
        }
        void setModel(const std::string &model_) {
            model = model_;
        }
        void setFilename(const std::string &filename_) {
            filename = filename_;
        }
        void setShader(const std::string &shader_) {
            shader = shader_;
        }

        void setPrompt(const std::string &prompt_) {
            prompt = prompt_;
        }

        static std::string unescape(const std::string &input);
        std::string generateCode();
        static size_t WriteCallback(void *contents, size_t size, size_t nmemb, ResponseData *data);

      private:
        std::string host;
        std::string model;
        std::string filename;
        std::string shader;
        std::string prompt;
    };

} // namespace mx

#endif