MCPcopy Create free account
hub / github.com/Tiiny-AI/PowerInfer / common_remote_get_content

Function common_remote_get_content

smallthinker/common/arg.cpp:564–606  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

562}
563
564std::pair<long, std::vector<char>> common_remote_get_content(const std::string & url, const common_remote_params & params) {
565 curl_ptr curl(curl_easy_init(), &curl_easy_cleanup);
566 curl_slist_ptr http_headers;
567 std::vector<char> res_buffer;
568
569 curl_easy_setopt(curl.get(), CURLOPT_URL, url.c_str());
570 curl_easy_setopt(curl.get(), CURLOPT_NOPROGRESS, 1L);
571 curl_easy_setopt(curl.get(), CURLOPT_FOLLOWLOCATION, 1L);
572 typedef size_t(*CURLOPT_WRITEFUNCTION_PTR)(void * ptr, size_t size, size_t nmemb, void * data);
573 auto write_callback = [](void * ptr, size_t size, size_t nmemb, void * data) -> size_t {
574 auto data_vec = static_cast<std::vector<char> *>(data);
575 data_vec->insert(data_vec->end(), (char *)ptr, (char *)ptr + size * nmemb);
576 return size * nmemb;
577 };
578 curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, static_cast<CURLOPT_WRITEFUNCTION_PTR>(write_callback));
579 curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &res_buffer);
580#if defined(_WIN32)
581 curl_easy_setopt(curl.get(), CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
582#endif
583 if (params.timeout > 0) {
584 curl_easy_setopt(curl.get(), CURLOPT_TIMEOUT, params.timeout);
585 }
586 if (params.max_size > 0) {
587 curl_easy_setopt(curl.get(), CURLOPT_MAXFILESIZE, params.max_size);
588 }
589 http_headers.ptr = curl_slist_append(http_headers.ptr, "User-Agent: llama-cpp");
590 for (const auto & header : params.headers) {
591 http_headers.ptr = curl_slist_append(http_headers.ptr, header.c_str());
592 }
593 curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, http_headers.ptr);
594
595 CURLcode res = curl_easy_perform(curl.get());
596
597 if (res != CURLE_OK) {
598 std::string error_msg = curl_easy_strerror(res);
599 throw std::runtime_error("error: cannot make GET request: " + error_msg);
600 }
601
602 long res_code;
603 curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &res_code);
604
605 return { res_code, std::move(res_buffer) };
606}
607
608/**
609 * Allow getting the HF file from the HF repo with tag (like ollama), for example:

Callers 3

mainFunction · 0.85
common_get_hf_fileFunction · 0.85

Calls 5

getMethod · 0.45
c_strMethod · 0.45
insertMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45

Tested by 1

mainFunction · 0.68