/
afanasevn
/
PdfEncoder
Обзор
Документация
Войти
/
afanasevn
/
PdfEncoder
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/PdfEncoder.Infrastructure/Llm/PromptTemplateProvider.cs
52 строки
2 KB
IBS\NAfanasev
Remote LLM base functional
01 июл 2026, 15:54
01 июл 2026, 15:54
05aa80e
Код
Авторство
О чём код?
using System.Reflection; using System.Text; namespace PdfEncoder.Infrastructure.Llm; /// <summary> /// Загрузка embedded prompt templates (prompt-v1). /// </summary> public sealed class PromptTemplateProvider { public const string PromptVersion = "prompt-v1"; private readonly Assembly _assembly = typeof(PromptTemplateProvider).Assembly; /// <summary> /// Возвращает содержимое embedded prompt-файла. /// </summary> /// <param name="resourceName">Имя файла без пути (например, <c>classify-system.txt</c>).</param> public string GetTemplate(string resourceName) { var fullName = _assembly .GetManifestResourceNames() .FirstOrDefault(name => name.EndsWith(resourceName, StringComparison.OrdinalIgnoreCase)); if (fullName is null) { throw new InvalidOperationException($"Prompt resource '{resourceName}' not found."); } using var stream = _assembly.GetManifestResourceStream(fullName) ?? throw new InvalidOperationException($"Prompt stream '{resourceName}' not found."); using var reader = new StreamReader(stream, Encoding.UTF8); return reader.ReadToEnd(); } /// <summary> /// Подставляет значения в шаблон вида <c>{key}</c>. /// </summary> public static string Format( string template, IReadOnlyDictionary<string, string> values) { var result = template; foreach (var (key, value) in values) { result = result.Replace($"{{{key}}}", value, StringComparison.Ordinal); } return result; } }