using System; using System.Collections.Generic; using System.IO; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using AISApp; namespace AISApp { internal static class ProgramEntry { // Minimal REST server + static file serving private sealed class ChatInput { [JsonPropertyName("message")] public string? Message { get; set; } } public static async Task Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // Prepare static directory (relative to app base) var staticRoot = Path.Combine(builder.Environment.ContentRootPath, "static"); if (!Directory.Exists(staticRoot)) Directory.CreateDirectory(staticRoot); // Serve index.html at "/" and other assets from /static var fileProvider = new PhysicalFileProvider(staticRoot); var defaultFiles = new DefaultFilesOptions { FileProvider = fileProvider, RequestPath = "" }; defaultFiles.DefaultFileNames.Clear(); defaultFiles.DefaultFileNames.Add("index.html"); app.UseDefaultFiles(defaultFiles); app.UseStaticFiles(new StaticFileOptions { FileProvider = fileProvider, RequestPath = "" }); // Load system message from prompt.txt string systemMessage = System.IO.File.ReadAllText("prompt.txt"); // Single AIS instance for the app var ai = new AIS(model: "gemma", safeMode: false, systemMessage: systemMessage); // Minimal chat endpoint app.MapPost("/api/chat", async (HttpContext ctx) => { try { var input = await JsonSerializer.DeserializeAsync(ctx.Request.Body); var prompt = input?.Message ?? string.Empty; var result = await ai.ChatAsync(prompt); object replyPayload = result is JsonNode jn ? jn : (object)(result?.ToString() ?? ""); await ctx.Response.WriteAsJsonAsync(new { ok = true, reply = replyPayload }); } catch (Exception ex) { ctx.Response.StatusCode = 400; await ctx.Response.WriteAsJsonAsync(new { ok = false, error = ex.Message }); } }); await app.RunAsync(); } } }