{"id":23983414,"url":"https://github.com/spongeengine/koboldsharp","last_synced_at":"2025-04-24T06:51:07.562Z","repository":{"id":270365706,"uuid":"909826572","full_name":"SpongeEngine/KoboldSharp","owner":"SpongeEngine","description":"C# client for KoboldCpp.","archived":false,"fork":false,"pushed_at":"2025-02-23T19:23:23.000Z","size":181,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-23T19:38:42.412Z","etag":null,"topics":["ai","ai-client","csharp","dotnet","kobold-cpp","koboldai","koboldcpp","language-models","llm","llm-client","local-llm","local-llm-integration","local-llms","offline-ai","openai-compatible-api","self-hosted-ai","text-generation-webui"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/SpongeEngine.KoboldSharp","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SpongeEngine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-29T22:12:57.000Z","updated_at":"2025-02-23T19:22:15.000Z","dependencies_parsed_at":"2025-01-16T16:37:06.860Z","dependency_job_id":"f502dadf-18a0-4e7f-a6fc-648832b48646","html_url":"https://github.com/SpongeEngine/KoboldSharp","commit_stats":null,"previous_names":["spongeengine/localai.net.koboldcpp","spongeengine/koboldsharp"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpongeEngine%2FKoboldSharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpongeEngine%2FKoboldSharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpongeEngine%2FKoboldSharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpongeEngine%2FKoboldSharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SpongeEngine","download_url":"https://codeload.github.com/SpongeEngine/KoboldSharp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240576485,"owners_count":19823293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-client","csharp","dotnet","kobold-cpp","koboldai","koboldcpp","language-models","llm","llm-client","local-llm","local-llm-integration","local-llms","offline-ai","openai-compatible-api","self-hosted-ai","text-generation-webui"],"created_at":"2025-01-07T12:16:28.088Z","updated_at":"2025-02-24T23:45:19.896Z","avatar_url":"https://github.com/SpongeEngine.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# KoboldSharp\n[![NuGet](https://img.shields.io/nuget/v/SpongeEngine.KoboldSharp.svg)](https://www.nuget.org/packages/SpongeEngine.KoboldSharp)\n[![NuGet Downloads](https://img.shields.io/nuget/dt/SpongeEngine.KoboldSharp.svg)](https://www.nuget.org/packages/SpongeEngine.KoboldSharp)\n[![Run Tests](https://github.com/SpongeEngine/KoboldSharp/actions/workflows/run-tests.yml/badge.svg)](https://github.com/SpongeEngine/KoboldSharp/actions/workflows/run-tests.yml)\n[![License](https://img.shields.io/github/license/SpongeEngine/KoboldSharp)](LICENSE)\n[![.NET](https://img.shields.io/badge/.NET-6.0%20%7C%207.0%20%7C%208.0%2B-512BD4)](https://dotnet.microsoft.com/download)\n\nC# client for KoboldCpp.\n\n## Features\n- Complete support for KoboldCpp's native API\n- Streaming text generation\n- Built-in error handling and logging\n- Cross-platform compatibility\n- Full async/await support\n- Support for Stable Diffusion image generation\n- Support for Whisper audio transcription\n- Support for WebSearch integration\n- Support for multiplayer features\n\n📦 [View Package on NuGet](https://www.nuget.org/packages/SpongeEngine.KoboldSharp)\n\n## Installation\nInstall via NuGet:\n```bash\ndotnet add package SpongeEngine.KoboldSharp\n```\n\n## Quick Start\n\n### Basic Usage\n```csharp\nusing SpongeEngine.KoboldSharp;\n\n// Configure the client\nvar options = new KoboldSharpClientOptions\n{\n    HttpClient = new HttpClient\n    {\n        BaseAddress = new Uri(\"http://localhost:5001\")\n    },\n    // Optional client-side settings\n    MultiplayerEnabled = false,\n    WebSearchEnabled = false\n};\n\n// Create client instance\nusing var client = new KoboldSharpClient(options);\n\n// Generate completion\nvar request = new KoboldSharpRequest\n{\n    Prompt = \"Write a short story about a robot:\",\n    MaxLength = 200,\n    Temperature = 0.7f,\n    TopP = 0.9f\n};\n\nvar response = await client.GenerateAsync(request);\nConsole.WriteLine(response.Results[0].Text);\n\n// Stream completion\nawait foreach (var token in client.GenerateStreamAsync(request))\n{\n    Console.Write(token);\n}\n```\n\n## Configuration\n\n### Client Options\n```csharp\nvar options = new KoboldSharpClientOptions\n{\n    // Base configuration\n    HttpClient = new HttpClient\n    {\n        BaseAddress = new Uri(\"http://localhost:5001\")\n    },\n    JsonSerializerOptions = new JsonSerializerOptions(), // Optional JSON settings\n    Logger = loggerInstance,                             // Optional ILogger\n    \n    // Optional features\n    MultiplayerEnabled = false,           // Enable multiplayer support\n    WebSearchEnabled = false,             // Enable web search integration\n    \n    // Stable Diffusion settings (if using image generation)\n    StableDiffusionModelPath = \"path/to/model.safetensors\",\n    StableDiffusionVaePath = \"path/to/vae.safetensors\",\n    StableDiffusionUseQuantization = false,\n    StableDiffusionMaxResolution = 512,\n    StableDiffusionThreads = -1,\n};\n```\n\n### Generation Parameters\n```csharp\nvar request = new KoboldSharpRequest\n{\n    // Basic Parameters\n    Prompt = \"Your prompt here\",\n    MaxLength = 200,                     // Maximum tokens to generate\n    MaxContextLength = 2048,             // Maximum context length\n    Temperature = 0.7f,                  // Randomness (0.0-1.0)\n    \n    // Sampling Parameters\n    TopP = 0.9f,                        // Nucleus sampling threshold\n    TopK = 40,                          // Top-K sampling\n    TopA = 0.0f,                        // Top-A sampling\n    MinP = 0.0f,                        // Minimum P sampling\n    Typical = 1.0f,                     // Typical sampling\n    Tfs = 1.0f,                         // Tail-free sampling\n    \n    // Repetition Control\n    RepetitionPenalty = 1.1f,           // Base repetition penalty\n    RepetitionPenaltyRange = 320,       // How far back to apply penalty\n    RepetitionPenaltySlope = 1.0f,      // Penalty application slope\n    PresencePenalty = 0.0f,             // Presence penalty\n    \n    // Mirostat Parameters\n    MirostatMode = 0,                   // Mirostat sampling mode (0, 1, 2)\n    MirostatTau = 5.0f,                 // Target entropy\n    MirostatEta = 0.1f,                 // Learning rate\n\n    // Advanced Control\n    Seed = -1,                          // RNG seed (-1 for random)\n    StopSequences = new List\u003cstring\u003e(),  // Stop generation sequences\n    Stream = false,                      // Enable streaming\n    TrimStop = true,                    // Trim stop sequences\n    Grammar = null,                     // Optional grammar constraints\n    GrammarRetainState = false,         // Retain grammar state\n    Memory = null,                      // Optional context memory\n    BannedTokens = null,                // Tokens to never generate\n    LogitBias = null,                   // Token generation biases\n    \n    // Special Features\n    Images = null,                      // Images for multimodal models\n    AllowEosToken = true,               // Allow end of sequence token\n    BypassEosToken = false,             // Bypass EOS token\n    RenderSpecial = false,              // Render special tokens\n    \n    // Dynamic Temperature\n    DynamicTemperatureRange = 0.0f,     // Dynamic temperature range\n    DynamicTemperatureExponent = 1.0f,  // Dynamic temperature exponent\n    SmoothingFactor = 0.0f              // Output smoothing factor\n};\n```\n\n### Additional Features\n\n#### Image Generation with Stable Diffusion\n```csharp\n// Text to image\nvar txt2imgRequest = new StableDiffusionGenerationRequest\n{\n    Prompt = \"A beautiful mountain landscape\",\n    NegativePrompt = \"blur, haze\",\n    Width = 512,\n    Height = 512,\n    Steps = 20,\n    CfgScale = 7.0f,\n    SamplerName = \"euler_a\"\n};\n\nvar txt2imgResponse = await client.TextToImageAsync(txt2imgRequest);\n\n// Image to image\nvar img2imgRequest = new StableDiffusionImageToImageRequest\n{\n    InitImages = new List\u003cstring\u003e { Convert.ToBase64String(File.ReadAllBytes(\"input.png\")) },\n    Prompt = \"Convert to oil painting\",\n    DenoisingStrength = 0.75f\n};\n\nvar img2imgResponse = await client.ImageToImageAsync(img2imgRequest);\n```\n\n#### Audio Transcription with Whisper\n```csharp\nvar transcribeRequest = new WhisperRequest\n{\n    AudioData = Convert.ToBase64String(File.ReadAllBytes(\"audio.mp3\")),\n    Prompt = \"Optional transcription prompt\",\n    SuppressNonSpeech = true\n};\n\nvar transcription = await client.TranscribeAudioAsync(transcribeRequest);\n```\n\n## Error Handling\n```csharp\ntry\n{\n    var response = await client.GenerateAsync(request);\n}\ncatch (LlmSharpException ex)\n{\n    Console.WriteLine($\"Generation error: {ex.Message}\");\n    if (ex.StatusCode.HasValue)\n    {\n        Console.WriteLine($\"Status code: {ex.StatusCode}\");\n    }\n    if (ex.ResponseContent != null)\n    {\n        Console.WriteLine($\"Response content: {ex.ResponseContent}\");\n    }\n}\n```\n\n## Logging\nThe client supports Microsoft.Extensions.Logging:\n\n```csharp\nILogger logger = LoggerFactory\n    .Create(builder =\u003e builder\n        .AddConsole()\n        .SetMinimumLevel(LogLevel.Debug))\n    .CreateLogger\u003cKoboldSharpClient\u003e();\n\nvar options = new KoboldSharpClientOptions\n{\n    HttpClient = new HttpClient\n    {\n        BaseAddress = new Uri(\"http://localhost:5001\")\n    },\n    Logger = logger\n};\nvar client = new KoboldSharpClient(options);\n```\n\n## Testing\nTo run the tests:\n```bash\ndotnet test\n```\n\nConfigure test environment:\n```bash\nexport KOBOLDCPP_BASE_URL=\"http://localhost:5001\"\n```\n\n## License\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contributing\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Support\nFor issues and feature requests, please use the [GitHub issues page](https://github.com/SpongeEngine/KoboldSharp/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspongeengine%2Fkoboldsharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspongeengine%2Fkoboldsharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspongeengine%2Fkoboldsharp/lists"}