Add C examples page, fix nav links to use correct paths
This commit is contained in:
parent
cce700e705
commit
6c0dfcb4ca
22 changed files with 405 additions and 602 deletions
385
public/c-examples.html
Normal file
385
public/c-examples.html
Normal file
|
|
@ -0,0 +1,385 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="theme-color" content="#43a047">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<title>C Examples | uncloseai.com</title>
|
||||
|
||||
<!-- PicoCSS -->
|
||||
<link rel="stylesheet" href="/css/pico.classless.min.css">
|
||||
<!-- ChunkFive Font -->
|
||||
<link rel="stylesheet" href="/css/chunkfive/stylesheet.css" type="text/css" charset="utf-8" />
|
||||
<!-- Sidebar Theme -->
|
||||
<link rel="stylesheet" href="/css/sidebar-theme.css">
|
||||
|
||||
<!-- Highlight.js for syntax highlighting -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/a11y-dark.min.css" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
|
||||
|
||||
<!-- Theme Switcher Script -->
|
||||
<script>
|
||||
function switchTheme(theme) {
|
||||
if (theme === "auto") {
|
||||
document.documentElement.removeAttribute('data-theme');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
// Disable custom styling for uncloseai.js - use PicoCSS instead
|
||||
window.UNCLOSEAI_CUSTOM_STYLING = false;
|
||||
</script>
|
||||
|
||||
<script src="https://uncloseai.com/uncloseai.js" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Mobile menu toggle -->
|
||||
<button class="sidebar-toggle" onclick="document.querySelector('.sidebar').classList.toggle('open')">
|
||||
☰
|
||||
</button>
|
||||
|
||||
<!-- Left sidebar - Main Navigation -->
|
||||
<aside class="sidebar">
|
||||
<div class="table-of-contents">
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/c-examples.html" class="active">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
<li><a href="/go-examples.html">Go Examples</a></li>
|
||||
<li><a href="/java-examples.html">Java Examples</a></li>
|
||||
<li><a href="/kotlin-examples.html">Kotlin Examples</a></li>
|
||||
<li><a href="/nodejs-examples.html">Node.js Examples</a></li>
|
||||
<li><a href="/php-examples.html">PHP Examples</a></li>
|
||||
<li><a href="/python-examples.html">Python Examples</a></li>
|
||||
<li><a href="/ruby-examples.html">Ruby Examples</a></li>
|
||||
<li><a href="/rust-examples.html">Rust Examples</a></li>
|
||||
<li><a href="/swift-examples.html">Swift Examples</a></li>
|
||||
<li><a href="/uncloseai-js.html">uncloseai.js Docs</a></li>
|
||||
<li><a href="/inference.html">Inference Setup</a></li>
|
||||
<li><a href="/text-to-speech.html">Text-to-Speech</a></li>
|
||||
<li><a href="/crawler.html">Our Crawler</a></li>
|
||||
<li><a href="/languages" target="_blank">🔗 All Languages</a></li>
|
||||
<li><a href="https://shop.unturf.com/p/8486f492-a93e-11f0-b477-02dfe05770ee/uncloseai-machine-learning-reference-guide-to-inference-clients" target="_blank">📚 Book</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main content -->
|
||||
<main>
|
||||
<header>
|
||||
<hgroup>
|
||||
<a href="https://uncloseai.com"><h1 class="unturf" style="font-family: 'ChunkFiveRegular';">uncloseai.</h1></a>
|
||||
<p>C Examples - Free LLM & TTS AI Service</p>
|
||||
</hgroup>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="#" onclick="switchTheme('auto')">Auto</a></li>
|
||||
<li><a href="#" onclick="switchTheme('light')">Light</a></li>
|
||||
<li><a href="#" onclick="switchTheme('dark')">Dark</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<h2 id="c-intro">C Examples</h2>
|
||||
<p>This page demonstrates how to use the <strong>uncloseai.</strong> API endpoints with C using libcurl. All examples use the OpenAI-compatible API interface, making it easy to switch between different models and endpoints.</p>
|
||||
|
||||
<p><strong>Available Endpoints:</strong></p>
|
||||
<ul>
|
||||
<li><strong>Hermes:</strong> <code>https://hermes.ai.unturf.com/v1</code> - General purpose conversational AI</li>
|
||||
<li><strong>Qwen 3 Coder:</strong> <code>https://qwen.ai.unturf.com/v1</code> - Specialized coding model</li>
|
||||
<li><strong>TTS:</strong> <code>https://speech.ai.unturf.com/v1</code> - Text-to-speech generation</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="c-setup">Setup & Dependencies</h3>
|
||||
<p>Install libcurl development libraries:</p>
|
||||
<pre><code class="bash"># Ubuntu/Debian
|
||||
sudo apt-get install libcurl4-openssl-dev
|
||||
|
||||
# macOS
|
||||
brew install curl
|
||||
|
||||
# Alpine
|
||||
apk add curl-dev</code></pre>
|
||||
|
||||
<p>Compile with:</p>
|
||||
<pre><code class="bash">gcc -o chat chat.c -lcurl</code></pre>
|
||||
|
||||
<h2 id="c-non-streaming">Non-Streaming Examples</h2>
|
||||
<p>Non-streaming mode waits for the complete response before returning. This is simpler to use but provides no intermediate feedback during generation.</p>
|
||||
|
||||
<h3 id="c-hermes-non-stream">Using Hermes (General Purpose)</h3>
|
||||
<pre><code class="c">#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
struct Memory {
|
||||
char *response;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
static size_t write_callback(void *data, size_t size, size_t nmemb, void *userp) {
|
||||
size_t realsize = size * nmemb;
|
||||
struct Memory *mem = (struct Memory *)userp;
|
||||
char *ptr = realloc(mem->response, mem->size + realsize + 1);
|
||||
if (!ptr) return 0;
|
||||
mem->response = ptr;
|
||||
memcpy(&(mem->response[mem->size]), data, realsize);
|
||||
mem->size += realsize;
|
||||
mem->response[mem->size] = 0;
|
||||
return realsize;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
CURL *curl = curl_easy_init();
|
||||
if (!curl) return 1;
|
||||
|
||||
struct Memory chunk = {.response = malloc(1), .size = 0};
|
||||
struct curl_slist *headers = NULL;
|
||||
headers = curl_slist_append(headers, "Content-Type: application/json");
|
||||
|
||||
const char *payload =
|
||||
"{"
|
||||
"\"model\": \"adamo1139/Hermes-3-Llama-3.1-8B-FP8-Dynamic\","
|
||||
"\"messages\": [{\"role\": \"user\", \"content\": \"Give a Python Fizzbuzz solution in one line of code?\"}],"
|
||||
"\"max_tokens\": 150"
|
||||
"}";
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "https://hermes.ai.unturf.com/v1/chat/completions");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
|
||||
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
if (res == CURLE_OK) {
|
||||
printf("Response:\n%s\n", chunk.response);
|
||||
}
|
||||
|
||||
curl_slist_free_all(headers);
|
||||
curl_easy_cleanup(curl);
|
||||
free(chunk.response);
|
||||
return 0;
|
||||
}</code></pre>
|
||||
|
||||
<h3 id="c-qwen-non-stream">Using Qwen 3 Coder (Specialized for Coding)</h3>
|
||||
<pre><code class="c">#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
// ... same write_callback and Memory struct as above ...
|
||||
|
||||
int main(void) {
|
||||
CURL *curl = curl_easy_init();
|
||||
if (!curl) return 1;
|
||||
|
||||
struct Memory chunk = {.response = malloc(1), .size = 0};
|
||||
struct curl_slist *headers = NULL;
|
||||
headers = curl_slist_append(headers, "Content-Type: application/json");
|
||||
|
||||
const char *payload =
|
||||
"{"
|
||||
"\"model\": \"hf.co/unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF:Q4_K_M\","
|
||||
"\"messages\": [{\"role\": \"user\", \"content\": \"Explain quicksort in C with code\"}],"
|
||||
"\"max_tokens\": 500"
|
||||
"}";
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "https://qwen.ai.unturf.com/v1/chat/completions");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
|
||||
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
if (res == CURLE_OK) {
|
||||
printf("Response:\n%s\n", chunk.response);
|
||||
}
|
||||
|
||||
curl_slist_free_all(headers);
|
||||
curl_easy_cleanup(curl);
|
||||
free(chunk.response);
|
||||
return 0;
|
||||
}</code></pre>
|
||||
|
||||
<h2 id="c-streaming">Streaming Examples</h2>
|
||||
<p>Streaming mode returns chunks of the response as they are generated, providing real-time feedback. This is ideal for interactive applications and long responses.</p>
|
||||
|
||||
<h3 id="c-hermes-stream">Streaming with Hermes</h3>
|
||||
<pre><code class="c">#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
static size_t stream_callback(void *data, size_t size, size_t nmemb, void *userp) {
|
||||
size_t realsize = size * nmemb;
|
||||
char *chunk = (char *)data;
|
||||
|
||||
// Process SSE data lines
|
||||
char *line = strtok(chunk, "\n");
|
||||
while (line) {
|
||||
if (strncmp(line, "data: ", 6) == 0) {
|
||||
const char *json = line + 6;
|
||||
if (strcmp(json, "[DONE]") != 0) {
|
||||
// Extract content from: {"choices":[{"delta":{"content":"..."}}]}
|
||||
const char *content_start = strstr(json, "\"content\":\"");
|
||||
if (content_start) {
|
||||
content_start += 11;
|
||||
const char *content_end = strchr(content_start, '"');
|
||||
if (content_end) {
|
||||
fwrite(content_start, 1, content_end - content_start, stdout);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
line = strtok(NULL, "\n");
|
||||
}
|
||||
return realsize;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
CURL *curl = curl_easy_init();
|
||||
if (!curl) return 1;
|
||||
|
||||
struct curl_slist *headers = NULL;
|
||||
headers = curl_slist_append(headers, "Content-Type: application/json");
|
||||
|
||||
const char *payload =
|
||||
"{"
|
||||
"\"model\": \"adamo1139/Hermes-3-Llama-3.1-8B-FP8-Dynamic\","
|
||||
"\"messages\": [{\"role\": \"user\", \"content\": \"Write a short poem about coding\"}],"
|
||||
"\"max_tokens\": 200,"
|
||||
"\"stream\": true"
|
||||
"}";
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "https://hermes.ai.unturf.com/v1/chat/completions");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, stream_callback);
|
||||
|
||||
printf("Streaming response:\n");
|
||||
curl_easy_perform(curl);
|
||||
printf("\n");
|
||||
|
||||
curl_slist_free_all(headers);
|
||||
curl_easy_cleanup(curl);
|
||||
return 0;
|
||||
}</code></pre>
|
||||
|
||||
<h2 id="c-tts">Text-to-Speech Examples</h2>
|
||||
<p>Generate audio from text using the TTS endpoint.</p>
|
||||
|
||||
<h3 id="c-tts-basic">Basic TTS</h3>
|
||||
<pre><code class="c">#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
static size_t write_file(void *data, size_t size, size_t nmemb, void *userp) {
|
||||
return fwrite(data, size, nmemb, (FILE *)userp);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
CURL *curl = curl_easy_init();
|
||||
if (!curl) return 1;
|
||||
|
||||
FILE *fp = fopen("output.mp3", "wb");
|
||||
if (!fp) {
|
||||
curl_easy_cleanup(curl);
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct curl_slist *headers = NULL;
|
||||
headers = curl_slist_append(headers, "Content-Type: application/json");
|
||||
|
||||
const char *payload =
|
||||
"{"
|
||||
"\"model\": \"tts-1\","
|
||||
"\"input\": \"Hello! This is a test of text to speech.\","
|
||||
"\"voice\": \"alloy\""
|
||||
"}";
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "https://speech.ai.unturf.com/v1/audio/speech");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_file);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
|
||||
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
if (res == CURLE_OK) {
|
||||
printf("Audio saved to output.mp3\n");
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
curl_slist_free_all(headers);
|
||||
curl_easy_cleanup(curl);
|
||||
return 0;
|
||||
}</code></pre>
|
||||
|
||||
<p><strong>Available voices:</strong> <code>alloy</code>, <code>echo</code>, <code>fable</code>, <code>onyx</code>, <code>nova</code>, <code>shimmer</code></p>
|
||||
|
||||
<h2 id="c-source">Full SDK Implementation</h2>
|
||||
<p>For a complete SDK with model discovery and advanced features, see the full implementations in the source repository:</p>
|
||||
<ul>
|
||||
<li><a href="/languages/c/curl/" target="_blank">C with libcurl</a></li>
|
||||
<li><a href="/languages/c/libsoup/" target="_blank">C with libsoup (GNOME)</a></li>
|
||||
<li><a href="/languages/c/nghttp2/" target="_blank">C with nghttp2 (HTTP/2)</a></li>
|
||||
</ul>
|
||||
|
||||
<script>hljs.highlightAll();</script>
|
||||
|
||||
<footer>
|
||||
<small>© uncloseai. 2025</small>
|
||||
<br>
|
||||
<small>Stylesheets by <a href="https://picocss.com" target="_blank">PicoCSS</a></small>
|
||||
<small>& <a href="https://highlightjs.org/" target="_blank">highlight.js</a></small>
|
||||
<br>
|
||||
<small><a href="/privacy-policy.html">Privacy Policy</a> | <a href="/terms-of-use.html">Terms of Use</a></small>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Simple active link highlighting
|
||||
document.querySelectorAll('.table-of-contents a').forEach(link => {
|
||||
link.addEventListener('click', function() {
|
||||
document.querySelectorAll('.table-of-contents a').forEach(a => a.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</main>
|
||||
|
||||
<!-- Right sidebar - Page TOC -->
|
||||
<aside class="sidebar-right">
|
||||
<div class="table-of-contents">
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="#c-intro" class="active">Introduction</a></li>
|
||||
<li><a href="#c-setup">Setup</a></li>
|
||||
<li><a href="#c-non-streaming">Non-Streaming</a>
|
||||
<ul>
|
||||
<li><a href="#c-hermes-non-stream">Hermes</a></li>
|
||||
<li><a href="#c-qwen-non-stream">Qwen Coder</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#c-streaming">Streaming</a>
|
||||
<ul>
|
||||
<li><a href="#c-hermes-stream">Hermes</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#c-tts">Text-to-Speech</a></li>
|
||||
<li><a href="#c-source">Full SDK</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,8 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/csharp-examples.html" class="active">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html" class="active">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html" class="active">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -57,8 +57,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/" class="active">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -1,266 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="theme-color" content="#43a047">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<title>C Implementations | uncloseai.com</title>
|
||||
|
||||
<!-- PicoCSS -->
|
||||
<link rel="stylesheet" href="/css/pico.classless.min.css">
|
||||
<!-- ChunkFive Font -->
|
||||
<link rel="stylesheet" href="/css/chunkfive/stylesheet.css" type="text/css" charset="utf-8" />
|
||||
<!-- Sidebar Theme -->
|
||||
<link rel="stylesheet" href="/css/sidebar-theme.css">
|
||||
|
||||
<!-- Highlight.js for syntax highlighting -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/a11y-dark.min.css" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
|
||||
|
||||
<!-- Theme Switcher Script -->
|
||||
<script>
|
||||
function switchTheme(theme) {
|
||||
if (theme === "auto") {
|
||||
document.documentElement.removeAttribute('data-theme');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
// Disable custom styling for uncloseai.js - use PicoCSS instead
|
||||
window.UNCLOSEAI_CUSTOM_STYLING = false;
|
||||
</script>
|
||||
|
||||
<script src="https://uncloseai.com/uncloseai.js" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Mobile menu toggle -->
|
||||
<button class="sidebar-toggle" onclick="document.querySelector('.sidebar').classList.toggle('open')">
|
||||
☰
|
||||
</button>
|
||||
|
||||
<!-- Left sidebar - Main Navigation -->
|
||||
<aside class="sidebar">
|
||||
<div class="table-of-contents">
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/" class="active">C Implementations</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/go-examples.html">Go Examples</a></li>
|
||||
<li><a href="/java-examples.html">Java Examples</a></li>
|
||||
<li><a href="/kotlin-examples.html">Kotlin Examples</a></li>
|
||||
<li><a href="/nodejs-examples.html">Node.js Examples</a></li>
|
||||
<li><a href="/php-examples.html">PHP Examples</a></li>
|
||||
<li><a href="/python-examples.html">Python Examples</a></li>
|
||||
<li><a href="/ruby-examples.html">Ruby Examples</a></li>
|
||||
<li><a href="/rust-examples.html">Rust Examples</a></li>
|
||||
<li><a href="/uncloseai-js.html">uncloseai.js Docs</a></li>
|
||||
<li><a href="/inference.html">Inference Setup</a></li>
|
||||
<li><a href="/text-to-speech.html">Text-to-Speech</a></li>
|
||||
<li><a href="/languages" target="_blank">All Languages</a></li>
|
||||
<li><a href="https://shop.unturf.com/p/8486f492-a93e-11f0-b477-02dfe05770ee/uncloseai-machine-learning-reference-guide-to-inference-clients" target="_blank">Book</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main content -->
|
||||
<main>
|
||||
<header>
|
||||
<hgroup>
|
||||
<a href="https://uncloseai.com"><h1 class="unturf" style="font-family: 'ChunkFiveRegular';">uncloseai.</h1></a>
|
||||
<p>C Implementations - OpenAI-Compatible API Clients</p>
|
||||
</hgroup>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="#" onclick="switchTheme('auto')">Auto</a></li>
|
||||
<li><a href="#" onclick="switchTheme('light')">Light</a></li>
|
||||
<li><a href="#" onclick="switchTheme('dark')">Dark</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<h2 id="c-intro">C Implementations</h2>
|
||||
<p>Three different C implementations of the OpenAI-compatible API client, each using a different HTTP library. All implementations support streaming, dynamic model discovery via environment variables, and text-to-speech generation.</p>
|
||||
|
||||
<p><strong>Available Endpoints:</strong></p>
|
||||
<ul>
|
||||
<li><strong>Hermes:</strong> <code>https://hermes.ai.unturf.com/v1</code> - General purpose conversational AI</li>
|
||||
<li><strong>Qwen 3 Coder:</strong> <code>https://qwen.ai.unturf.com/v1</code> - Specialized coding model</li>
|
||||
<li><strong>TTS:</strong> <code>https://speech.ai.unturf.com/v1</code> - Text-to-speech generation</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="implementations">Available Implementations</h2>
|
||||
|
||||
<article>
|
||||
<h3 id="curl">libcurl</h3>
|
||||
<p><strong>Recommended for most use cases.</strong> Uses the widely-available libcurl library for HTTP requests. Well-documented, portable, and supports SSL/TLS out of the box.</p>
|
||||
<ul>
|
||||
<li><strong>Library:</strong> <a href="https://curl.se/libcurl/" target="_blank">libcurl</a></li>
|
||||
<li><strong>Pros:</strong> Most portable, excellent documentation, widely available</li>
|
||||
<li><strong>Cons:</strong> Callback-based API can be verbose</li>
|
||||
</ul>
|
||||
<p><a href="curl/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-c-curl languages/c/curl/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-c-curl</code></pre>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h3 id="libsoup">libsoup (GNOME)</h3>
|
||||
<p>Uses GNOME's libsoup HTTP library. Integrates well with GLib-based applications and provides a cleaner API for async operations.</p>
|
||||
<ul>
|
||||
<li><strong>Library:</strong> <a href="https://libsoup.org/" target="_blank">libsoup</a></li>
|
||||
<li><strong>Pros:</strong> Clean GLib-style API, good async support, GNOME ecosystem integration</li>
|
||||
<li><strong>Cons:</strong> Heavier dependency, mainly for GTK/GNOME apps</li>
|
||||
</ul>
|
||||
<p><a href="libsoup/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-c-libsoup languages/c/libsoup/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-c-libsoup</code></pre>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h3 id="nghttp2">nghttp2 (HTTP/2)</h3>
|
||||
<p>Uses nghttp2 for native HTTP/2 support. Ideal for high-performance applications that benefit from HTTP/2 multiplexing and header compression.</p>
|
||||
<ul>
|
||||
<li><strong>Library:</strong> <a href="https://nghttp2.org/" target="_blank">nghttp2</a></li>
|
||||
<li><strong>Pros:</strong> Native HTTP/2, excellent performance, multiplexing support</li>
|
||||
<li><strong>Cons:</strong> More complex setup, HTTP/2 specific</li>
|
||||
</ul>
|
||||
<p><a href="nghttp2/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-c-nghttp2 languages/c/nghttp2/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-c-nghttp2</code></pre>
|
||||
</article>
|
||||
|
||||
<h2 id="features">Common Features</h2>
|
||||
<p>All three implementations share these features:</p>
|
||||
<ul>
|
||||
<li><strong>Dynamic Model Discovery:</strong> Reads <code>MODEL_ENDPOINT_1</code> through <code>MODEL_ENDPOINT_9999</code> environment variables</li>
|
||||
<li><strong>Streaming Support:</strong> Real-time response streaming via SSE parsing</li>
|
||||
<li><strong>Text-to-Speech:</strong> Audio generation via <code>TTS_ENDPOINT_*</code> variables</li>
|
||||
<li><strong>OpenAI Compatible:</strong> Works with vLLM, Ollama, and any OpenAI-compatible endpoint</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="api">API Structure</h2>
|
||||
<pre><code class="c">// Client initialization
|
||||
UncloseAIClient* uncloseai_init(void);
|
||||
|
||||
// Model discovery
|
||||
int uncloseai_discover_models(UncloseAIClient *client);
|
||||
|
||||
// Chat completion (non-streaming)
|
||||
char* uncloseai_chat(UncloseAIClient *client, int model_idx,
|
||||
const char *system_msg, const char *user_msg,
|
||||
int max_tokens);
|
||||
|
||||
// Chat completion (streaming)
|
||||
int uncloseai_chat_stream(UncloseAIClient *client, int model_idx,
|
||||
const char *system_msg, const char *user_msg,
|
||||
int max_tokens, StreamCallback callback,
|
||||
void *userdata);
|
||||
|
||||
// Text-to-speech
|
||||
int uncloseai_tts(UncloseAIClient *client, const char *text,
|
||||
const char *voice, const char *output_file);
|
||||
|
||||
// Cleanup
|
||||
void uncloseai_free(UncloseAIClient *client);</code></pre>
|
||||
|
||||
<h2 id="source">Source Code</h2>
|
||||
<p>View the full implementations in the git repository:</p>
|
||||
<ul>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/c/curl" target="_blank">C with libcurl</a></li>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/c/libsoup" target="_blank">C with libsoup</a></li>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/c/nghttp2" target="_blank">C with nghttp2</a></li>
|
||||
</ul>
|
||||
|
||||
<p>See the <strong>uncloseai. Machine Learning Reference Guide</strong> for complete documentation.</p>
|
||||
|
||||
<script>hljs.highlightAll();</script>
|
||||
|
||||
<footer>
|
||||
<small>© uncloseai. 2025</small>
|
||||
<br>
|
||||
<small>Stylesheets by <a href="https://picocss.com" target="_blank">PicoCSS</a></small>
|
||||
<small>& <a href="https://highlightjs.org/" target="_blank">highlight.js</a></small>
|
||||
<br>
|
||||
<small><a href="/privacy-policy.html">Privacy Policy</a> | <a href="/terms-of-use.html">Terms of Use</a></small>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Simple active link highlighting
|
||||
document.querySelectorAll('.table-of-contents a').forEach(link => {
|
||||
link.addEventListener('click', function() {
|
||||
document.querySelectorAll('.table-of-contents a').forEach(a => a.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
});
|
||||
});
|
||||
|
||||
// Highlight current section on scroll
|
||||
const sections = document.querySelectorAll('h2[id], h3[id]');
|
||||
const navLinks = document.querySelectorAll('.table-of-contents a');
|
||||
|
||||
window.addEventListener('scroll', () => {
|
||||
let current = '';
|
||||
sections.forEach(section => {
|
||||
const sectionTop = section.offsetTop;
|
||||
const sectionHeight = section.clientHeight;
|
||||
if (window.scrollY >= sectionTop - 100) {
|
||||
current = section.getAttribute('id');
|
||||
}
|
||||
});
|
||||
|
||||
navLinks.forEach(link => {
|
||||
link.classList.remove('active');
|
||||
if (link.getAttribute('href') === '#' + current) {
|
||||
link.classList.add('active');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</main>
|
||||
|
||||
<!-- Right sidebar - Page TOC -->
|
||||
<aside class="sidebar-right">
|
||||
<div class="table-of-contents">
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="#c-intro" class="active">Overview</a></li>
|
||||
<li><a href="#implementations">Implementations</a>
|
||||
<ul>
|
||||
<li><a href="#curl">libcurl</a></li>
|
||||
<li><a href="#libsoup">libsoup</a></li>
|
||||
<li><a href="#nghttp2">nghttp2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#api">API Structure</a></li>
|
||||
<li><a href="#source">Source Code</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -1,298 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="theme-color" content="#43a047">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<title>C# Implementations | uncloseai.com</title>
|
||||
|
||||
<!-- PicoCSS -->
|
||||
<link rel="stylesheet" href="/css/pico.classless.min.css">
|
||||
<!-- ChunkFive Font -->
|
||||
<link rel="stylesheet" href="/css/chunkfive/stylesheet.css" type="text/css" charset="utf-8" />
|
||||
<!-- Sidebar Theme -->
|
||||
<link rel="stylesheet" href="/css/sidebar-theme.css">
|
||||
|
||||
<!-- Highlight.js for syntax highlighting -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/a11y-dark.min.css" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
|
||||
|
||||
<!-- Theme Switcher Script -->
|
||||
<script>
|
||||
function switchTheme(theme) {
|
||||
if (theme === "auto") {
|
||||
document.documentElement.removeAttribute('data-theme');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-theme', theme);
|
||||
}
|
||||
}
|
||||
|
||||
// Disable custom styling for uncloseai.js - use PicoCSS instead
|
||||
window.UNCLOSEAI_CUSTOM_STYLING = false;
|
||||
</script>
|
||||
|
||||
<script src="https://uncloseai.com/uncloseai.js" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Mobile menu toggle -->
|
||||
<button class="sidebar-toggle" onclick="document.querySelector('.sidebar').classList.toggle('open')">
|
||||
☰
|
||||
</button>
|
||||
|
||||
<!-- Left sidebar - Main Navigation -->
|
||||
<aside class="sidebar">
|
||||
<div class="table-of-contents">
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/" class="active">C# Implementations</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/go-examples.html">Go Examples</a></li>
|
||||
<li><a href="/java-examples.html">Java Examples</a></li>
|
||||
<li><a href="/kotlin-examples.html">Kotlin Examples</a></li>
|
||||
<li><a href="/nodejs-examples.html">Node.js Examples</a></li>
|
||||
<li><a href="/php-examples.html">PHP Examples</a></li>
|
||||
<li><a href="/python-examples.html">Python Examples</a></li>
|
||||
<li><a href="/ruby-examples.html">Ruby Examples</a></li>
|
||||
<li><a href="/rust-examples.html">Rust Examples</a></li>
|
||||
<li><a href="/uncloseai-js.html">uncloseai.js Docs</a></li>
|
||||
<li><a href="/inference.html">Inference Setup</a></li>
|
||||
<li><a href="/text-to-speech.html">Text-to-Speech</a></li>
|
||||
<li><a href="/languages" target="_blank">All Languages</a></li>
|
||||
<li><a href="https://shop.unturf.com/p/8486f492-a93e-11f0-b477-02dfe05770ee/uncloseai-machine-learning-reference-guide-to-inference-clients" target="_blank">Book</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main content -->
|
||||
<main>
|
||||
<header>
|
||||
<hgroup>
|
||||
<a href="https://uncloseai.com"><h1 class="unturf" style="font-family: 'ChunkFiveRegular';">uncloseai.</h1></a>
|
||||
<p>C# Implementations - OpenAI-Compatible API Clients</p>
|
||||
</hgroup>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="#" onclick="switchTheme('auto')">Auto</a></li>
|
||||
<li><a href="#" onclick="switchTheme('light')">Light</a></li>
|
||||
<li><a href="#" onclick="switchTheme('dark')">Dark</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<h2 id="csharp-intro">C# Implementations</h2>
|
||||
<p>Multiple C# implementations of the OpenAI-compatible API client, supporting different runtimes and SDK approaches. All implementations support streaming, dynamic model discovery via environment variables, and text-to-speech generation.</p>
|
||||
|
||||
<p><strong>URL Aliases:</strong> This directory is accessible via both <code>/languages/csharp/</code> and <code>/languages/c#/</code></p>
|
||||
|
||||
<p><strong>Available Endpoints:</strong></p>
|
||||
<ul>
|
||||
<li><strong>Hermes:</strong> <code>https://hermes.ai.unturf.com/v1</code> - General purpose conversational AI</li>
|
||||
<li><strong>Qwen 3 Coder:</strong> <code>https://qwen.ai.unturf.com/v1</code> - Specialized coding model</li>
|
||||
<li><strong>TTS:</strong> <code>https://speech.ai.unturf.com/v1</code> - Text-to-speech generation</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="implementations">Available Implementations</h2>
|
||||
|
||||
<article>
|
||||
<h3 id="http">HttpClient (.NET 9)</h3>
|
||||
<p><strong>Recommended for most use cases.</strong> Uses .NET's built-in HttpClient with System.Text.Json for direct HTTP API calls. No external dependencies required.</p>
|
||||
<ul>
|
||||
<li><strong>Runtime:</strong> .NET 9.0</li>
|
||||
<li><strong>Pros:</strong> No external packages, lightweight, full control over HTTP</li>
|
||||
<li><strong>Cons:</strong> More verbose than SDK approach</li>
|
||||
</ul>
|
||||
<p><a href="http/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-csharp-http languages/csharp/http/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-csharp-http</code></pre>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h3 id="openai">OpenAI SDK (.NET 9)</h3>
|
||||
<p>Uses the official OpenAI .NET SDK for a higher-level API. Simpler code with built-in types for messages, completions, and audio.</p>
|
||||
<ul>
|
||||
<li><strong>Runtime:</strong> .NET 9.0</li>
|
||||
<li><strong>Package:</strong> <code>OpenAI</code> NuGet package</li>
|
||||
<li><strong>Pros:</strong> Clean API, type-safe, official SDK support</li>
|
||||
<li><strong>Cons:</strong> External dependency, SDK updates may lag API features</li>
|
||||
</ul>
|
||||
<p><a href="openai/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-csharp-openai languages/csharp/openai/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-csharp-openai</code></pre>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h3 id="dotnet10">.NET 10 Preview</h3>
|
||||
<p>Uses the latest .NET 10 preview runtime. Ideal for testing new language features and runtime improvements before general availability.</p>
|
||||
<ul>
|
||||
<li><strong>Runtime:</strong> .NET 10.0 Preview</li>
|
||||
<li><strong>Pros:</strong> Latest C# features, performance improvements</li>
|
||||
<li><strong>Cons:</strong> Preview/unstable, may have breaking changes</li>
|
||||
</ul>
|
||||
<p><a href="dotnet10/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-csharp-dotnet10 languages/csharp/dotnet10/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-csharp-dotnet10</code></pre>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h3 id="mono">Mono</h3>
|
||||
<p>Uses the Mono runtime for cross-platform compatibility. Ideal for environments where .NET Core/5+ isn't available or for legacy system integration.</p>
|
||||
<ul>
|
||||
<li><strong>Runtime:</strong> Mono 6.12</li>
|
||||
<li><strong>Pros:</strong> Wide platform support, mature runtime, works on older systems</li>
|
||||
<li><strong>Cons:</strong> Slower than .NET Core, fewer modern features</li>
|
||||
</ul>
|
||||
<p><a href="mono/">View Source Code →</a></p>
|
||||
<pre><code class="bash"># Build with Docker
|
||||
docker build -t uncloseai-csharp-mono languages/csharp/mono/
|
||||
|
||||
# Run
|
||||
docker run -e MODEL_ENDPOINT_1=https://hermes.ai.unturf.com/v1 \
|
||||
-e TTS_ENDPOINT_1=https://speech.ai.unturf.com/v1 \
|
||||
uncloseai-csharp-mono</code></pre>
|
||||
</article>
|
||||
|
||||
<h2 id="features">Common Features</h2>
|
||||
<p>All implementations share these features:</p>
|
||||
<ul>
|
||||
<li><strong>Dynamic Model Discovery:</strong> Reads <code>MODEL_ENDPOINT_1</code> through <code>MODEL_ENDPOINT_9999</code> environment variables</li>
|
||||
<li><strong>Streaming Support:</strong> Real-time response streaming via SSE parsing</li>
|
||||
<li><strong>Text-to-Speech:</strong> Audio generation via <code>TTS_ENDPOINT_*</code> variables</li>
|
||||
<li><strong>OpenAI Compatible:</strong> Works with vLLM, Ollama, and any OpenAI-compatible endpoint</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="choosing">Choosing an Implementation</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Implementation</th>
|
||||
<th>Best For</th>
|
||||
<th>Dependencies</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>HttpClient</td>
|
||||
<td>Production, minimal dependencies</td>
|
||||
<td>None (built-in)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>OpenAI SDK</td>
|
||||
<td>Rapid development, type safety</td>
|
||||
<td>OpenAI NuGet</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>.NET 10</td>
|
||||
<td>Testing new features</td>
|
||||
<td>None (built-in)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mono</td>
|
||||
<td>Legacy systems, wide platform support</td>
|
||||
<td>None (built-in)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="source">Source Code</h2>
|
||||
<p>View the full implementations in the git repository:</p>
|
||||
<ul>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/csharp/http" target="_blank">C# HttpClient (.NET 9)</a></li>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/csharp/openai" target="_blank">C# OpenAI SDK (.NET 9)</a></li>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/csharp/dotnet10" target="_blank">C# .NET 10 Preview</a></li>
|
||||
<li><a href="https://git.unturf.com/engineering/unturf/uncloseai.com/-/tree/master/public/languages/csharp/mono" target="_blank">C# Mono</a></li>
|
||||
</ul>
|
||||
|
||||
<p>See the <strong>uncloseai. Machine Learning Reference Guide</strong> for complete documentation.</p>
|
||||
|
||||
<script>hljs.highlightAll();</script>
|
||||
|
||||
<footer>
|
||||
<small>© uncloseai. 2025</small>
|
||||
<br>
|
||||
<small>Stylesheets by <a href="https://picocss.com" target="_blank">PicoCSS</a></small>
|
||||
<small>& <a href="https://highlightjs.org/" target="_blank">highlight.js</a></small>
|
||||
<br>
|
||||
<small><a href="/privacy-policy.html">Privacy Policy</a> | <a href="/terms-of-use.html">Terms of Use</a></small>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Simple active link highlighting
|
||||
document.querySelectorAll('.table-of-contents a').forEach(link => {
|
||||
link.addEventListener('click', function() {
|
||||
document.querySelectorAll('.table-of-contents a').forEach(a => a.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
});
|
||||
});
|
||||
|
||||
// Highlight current section on scroll
|
||||
const sections = document.querySelectorAll('h2[id], h3[id]');
|
||||
const navLinks = document.querySelectorAll('.table-of-contents a');
|
||||
|
||||
window.addEventListener('scroll', () => {
|
||||
let current = '';
|
||||
sections.forEach(section => {
|
||||
const sectionTop = section.offsetTop;
|
||||
const sectionHeight = section.clientHeight;
|
||||
if (window.scrollY >= sectionTop - 100) {
|
||||
current = section.getAttribute('id');
|
||||
}
|
||||
});
|
||||
|
||||
navLinks.forEach(link => {
|
||||
link.classList.remove('active');
|
||||
if (link.getAttribute('href') === '#' + current) {
|
||||
link.classList.add('active');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</main>
|
||||
|
||||
<!-- Right sidebar - Page TOC -->
|
||||
<aside class="sidebar-right">
|
||||
<div class="table-of-contents">
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="#csharp-intro" class="active">Overview</a></li>
|
||||
<li><a href="#implementations">Implementations</a>
|
||||
<ul>
|
||||
<li><a href="#http">HttpClient</a></li>
|
||||
<li><a href="#openai">OpenAI SDK</a></li>
|
||||
<li><a href="#dotnet10">.NET 10</a></li>
|
||||
<li><a href="#mono">Mono</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#choosing">Choosing</a></li>
|
||||
<li><a href="#source">Source Code</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -44,8 +44,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -44,8 +44,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -53,8 +53,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@
|
|||
<nav>
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/languages/c/">C Implementations</a></li>
|
||||
<li><a href="/languages/csharp/">C# Implementations</a></li>
|
||||
<li><a href="/c-examples.html">C Examples</a></li>
|
||||
<li><a href="/csharp-examples.html">C# Examples</a></li>
|
||||
<li><a href="/dart-examples.html">Dart Examples</a></li>
|
||||
<li><a href="/elixir-examples.html">Elixir Examples</a></li>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue