import 'dart:io'; class AiConstants { AiConstants._(); // Server ports static const int chatServerPort = 8080; static const int embeddingServerPort = 8081; // API endpoints static String get chatApiUrl => 'http://localhost:$chatServerPort/v1/chat/completions'; static String get embeddingApiUrl => 'http://localhost:$embeddingServerPort/v1/embeddings'; // Model files static const String qwenModelFile = 'qwen2.5-7b-instruct-q4_k_m.gguf'; static const String nomicModelFile = 'nomic-embed-text-v1.5.Q4_K_M.gguf'; static const String nomicModelName = 'nomic-embed-text-v1.5.Q4_K_M'; // llama.cpp binary static const String llamaBuild = 'b8130'; static String get serverBinaryName => Platform.isWindows ? 'llama-server.exe' : 'llama-server'; // Model download URLs static const String nomicModelUrl = 'https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q4_K_M.gguf'; static const String qwenModelUrl = 'https://huggingface.co/bartowski/Qwen2.5-7B-Instruct-GGUF/resolve/main/Qwen2.5-7B-Instruct-Q4_K_M.gguf'; // Server configuration static const int qwenContextSize = 4096; static const int nomicContextSize = 8192; static const int gpuLayerOffload = 99; static const double chatTemperature = 0.7; // Timeouts static const Duration serverConnectTimeout = Duration(seconds: 30); static const Duration serverReceiveTimeout = Duration(minutes: 5); static const Duration embeddingConnectTimeout = Duration(seconds: 10); static const Duration embeddingReceiveTimeout = Duration(seconds: 60); // System prompt static const String baseSystemPrompt = 'You are a helpful AI fitness assistant for personal trainers. ' 'Help users design training plans, analyse exercise technique, ' 'and answer questions about sports science and nutrition.'; }