{"repo": "adamy/botwire", "files": {"src/BotWire.AspNetCore/OpenAIProviderOptions.cs": {"58da4715b0a5614f658773718cb849a930d56bf4": {"t": 1785746215.1749732, "n": 1912, "h": "cdbdcb7d6fe0d4c4", "c": "// BotWire\n// Copyright (C) 2026 Object IT Limited\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BotWire.AspNetCore;\n\n/// Configuration for a single OpenAI or OpenAI-compatible provider endpoint.\npublic sealed class OpenAIProviderOptions\n{\n /// API key for the provider.\n [Required]\n public string ApiKey { get; set; } = \"\";\n\n /// Model identifier, e.g. gpt-4o or text-embedding-3-small.\n [Required]\n public string Model { get; set; } = \"\";\n\n /// \n /// Optional base URL for OpenAI-compatible endpoints, e.g. https://api.deepseek.com/v1.\n /// When , the default OpenAI endpoint is used.\n /// \n public string? BaseUrl { get; set; }\n\n /// \n /// Sampling temperature for chat completions. Defaults to 0.2 — low, so a KB-grounded\n /// support bot answers consistently instead of occasionally drifting or escalating an\n /// answerable question. Raise it for more varied wording. Set to omit\n /// the parameter entirely and use the provider's own default.\n /// \n public float? Temperature { get; set; } = 0.2f;\n}\n"}, "d90ed307f6841c0be4e42650bbaa335391c041f9": {"t": 1785760670.5004795, "n": 1912, "h": "cdbdcb7d6fe0d4c4", "c": "// BotWire\n// Copyright (C) 2026 Object IT Limited\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BotWire.AspNetCore;\n\n/// Configuration for a single OpenAI or OpenAI-compatible provider endpoint.\npublic sealed class OpenAIProviderOptions\n{\n /// API key for the provider.\n [Required]\n public string ApiKey { get; set; } = \"\";\n\n /// Model identifier, e.g. gpt-4o or text-embedding-3-small.\n [Required]\n public string Model { get; set; } = \"\";\n\n /// \n /// Optional base URL for OpenAI-compatible endpoints, e.g. https://api.deepseek.com/v1.\n /// When , the default OpenAI endpoint is used.\n /// \n public string? BaseUrl { get; set; }\n\n /// \n /// Sampling temperature for chat completions. Defaults to 0.2 — low, so a KB-grounded\n /// support bot answers consistently instead of occasionally drifting or escalating an\n /// answerable question. Raise it for more varied wording. Set to omit\n /// the parameter entirely and use the provider's own default.\n /// \n public float? Temperature { get; set; } = 0.2f;\n}\n"}, "456003a73580cd245067fe521e3f6d3da881594d": {"t": 1785760672.8295574, "n": 1468, "h": "9b5f5147dfbb2b28", "c": "// BotWire\n// Copyright (C) 2026 Object IT Limited\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BotWire.AspNetCore;\n\n/// Configuration for a single OpenAI or OpenAI-compatible provider endpoint.\npublic sealed class OpenAIProviderOptions\n{\n /// API key for the provider.\n [Required]\n public string ApiKey { get; set; } = \"\";\n\n /// Model identifier, e.g. gpt-4o or text-embedding-3-small.\n [Required]\n public string Model { get; set; } = \"\";\n\n /// \n /// Optional base URL for OpenAI-compatible endpoints, e.g. https://api.deepseek.com/v1.\n /// When , the default OpenAI endpoint is used.\n /// \n public string? BaseUrl { get; set; }\n}\n"}}, "NUGET.md": {"58da4715b0a5614f658773718cb849a930d56bf4": {"t": 1785747166.0654275, "n": 2329, "h": "884c24145ab7a3b7", "c": "# BotWire\n\n**A 24/7 AI customer-support bot for your .NET app — self-hosted, bring-your-own-key, no SaaS fees.**\n\nDrop one package into your ASP.NET Core site, point it at your FAQ, and ship a support assistant that answers customers instantly from *your* docs — and quietly opens a human ticket the moment one is actually needed. You supply an OpenAI-compatible API key, so your only running cost is model tokens (pennies per conversation on `gpt-4o-mini` or DeepSeek).\n\n## Two lines to wire it up\n\n```csharp\nbuilder.Services.AddBotWire(opts =>\n{\n opts.TopicDescription = \"Online store customer support\";\n opts.Documents = [\"docs/faq.md\"];\n opts.ChatProvider = new OpenAIProviderOptions { ApiKey = \"sk-...\", Model = \"gpt-4o-mini\" };\n});\n\napp.MapBotWire();\n```\n\nEmbed the zero-dependency widget on any page:\n\n```html\n\n\n```\n\n## What you get\n\n- **Grounded answers.** Replies come only from the Markdown knowledge base you supply — no hallucinated policies, prices, or promises.\n- **Knows when to get a human.** Collects contact details and raises a support ticket (emailed to your team) instead of guessing.\n- **Streaming chat widget.** ~12 KB Web Component, Shadow DOM, no framework, one `\n\n```\n\n## What you get\n\n- **Grounded answers.** Replies come only from the Markdown knowledge base you supply — no hallucinated policies, prices, or promises.\n- **Knows when to get a human.** Collects contact details and raises a support ticket (emailed to your team) instead of guessing.\n- **Streaming chat widget.** ~12 KB Web Component, Shadow DOM, no framework, one `\n\n```\n\n## What you get\n\n- **Grounded answers.** Replies come only from the Markdown knowledge base you supply — no hallucinated policies, prices, or promises.\n- **Knows when to get a human.** Collects contact details and raises a support ticket (emailed to your team) instead of guessing.\n- **Streaming chat widget.** ~12 KB Web Component, Shadow DOM, no framework, one `