settings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware": "Error",
"Microsoft.AspNetCore.Authentication": "Information",
"Microsoft.AspNetCore.Server.Kestrel": "Information",
"Microsoft.Extensions.Hosting": "Information",
"Microsoft.EntityFrameworkCore": "Warning",
"Npgsql": "Warning",
"Npgsql.Command": "Information",
"System.Net.Http": "Information",
"System.Net.NameResolution": "Information",
"System.Net.Sockets": "Information"
}
}
},
"ConnectionStrings": {
"TimettaDB": "host=postgres;Port=5432;Username=dba;Password=1;Database=data",
"PassportDB": "host=postgres;Port=5432;Username=dba;Password=1;Database=passport",
"SchedulerDB": "host=postgres;Port=5432;Username=dba;Password=1;Database=scheduler",
"Redis": "redis:6379,allowAdmin=true,password=1,abortConnect=false"
},
// Tenant settings.
"Tenant": {
"PrimaryDomain": "gazprom.com",
"ActiveDomains": ["myOtherCompany.ru"],
"TenantCulture": "ru-RU",
"TimeZone": "Russian Standard Time",
"DisplayName": "Sterling Cooper",
"LanguageCode": "ru-RU",
"CultureCode": "ru-RU",
"CurrencyCode": "RUB"
},
"RabbitMqServiceBusOptions": {
"ConnectionString": "amqp://admin:1@rabbitmq:5672/",
"QueueName": "events"
},
// SMTP Server settings.
"EmailSenderOptions": {
"SenderEmail": "system@timetta.com",
"SenderName": "system@timetta.com",
"ServerPort": "465",
"ServerAddress": "smtp.my-domain.com",
"UseStartTls": true,
"UseSsl": false,
"DisableCertificateValidation": true,
"Login": "****",
"Password": "****"
},
"SessionManager": {
"RedisDbNumber": "1"
},
"TenantManager": {
"RedisDbNumber": "1"
},
"UndoRedo": {
"UndoSize": "80",
"RedoSize": "20",
"SessionLifetimeMinutes": "30",
"RedisDbNumber": "1"
},
"PassportUrl": "http://passport",
"AppUrl": "https://op.timetta-test.com",
"AllowedCorsOrigins": "https://op.timetta-test.com,https://op.timetta-test.com:5402",
"TokenIssuer": "https://op.timetta-test.com:5401",
"WepAppClient": {
"RedirectUris": "https://op.timetta-test.com,https://op.timetta-test.com/auth-callback,https://op.timetta-test.com/assets/silent-refresh.html,https://op.timetta-test.com:5401/login-successful,https://op.timetta-test.com:5402/auth-callback,https://op.timetta-test.com:5402/auth-callback.html,https://op.timetta-test.com:5402/assets/silent-refresh.html",
"PostLogoutRedirectUris": "https://op.timetta-test.com:5401/logout-successful,https://op.timetta-test.com:5402/logout-successful",
"AllowedCorsOrigins": "https://op.timetta-test.com,https://op.timetta-test.com:5402"
},
// Certificate for Passport (to sign JWT Tokens) in PFX format,
"Certificate": "/app/secrets/certificate.pfx",
"CertificatePassword": "1",
"AES256HelperPassword": "***",
"LicenseKey": "***",
"HelpSearch": {
"Endpoint": "https://timetta.com/api/rag/search",
"MaxContentCharacters": 12000
},
"AI": {
"Embeddings": {
"Endpoint": "http://embeddings:8080",
"ApiKey": null,
"Model": "e5-large",
"Dimensions": 1024
},
"TextCommands": [
{
"Id": "fix-errors",
"Name": "Исправить ошибки",
"Prompt": "Исправь орфографические, пунктуационные и грамматические ошибки в тексте. Не меняй смысл, тон и стиль без необходимости. Не добавляй новый контент. Сохрани исходную структуру, порядок предложений и формат Markdown. Возвращай только исправленный текст без комментариев."
},
{
"Id": "more-formal",
"Name": "Более формально",
"Prompt": "Перепиши текст в формальном и деловом стиле. Убери разговорные выражения, жаргон и эмоциональные формулировки. Используй нейтральную лексику и четкие формулировки. Не изменяй факты и смысл. Сохрани структуру и формат Markdown. Возвращай только результат без пояснений."
},
{
"Id": "paraphrase",
"Name": "Другими словами",
"Prompt": "Перефразируй текст, используя другие формулировки и синонимы. Сохрани исходный смысл и объем (±10%). Не добавляй новую информацию. Сохрани структуру и формат Markdown. Возвращай только результат без пояснений."
},
{
"Id": "shorter",
"Name": "Кратко",
"Prompt": "Сократи текст на 10–20%, убрав повторы, вводные конструкции и второстепенные детали. Сохрани ключевой смысл и факты. Не искажай информацию. Сохрани структуру и формат Markdown. Возвращай только сокращенный текст без пояснений."
},
{
"Id": "simpler",
"Name": "Проще",
"Prompt": "Упрости текст: замени сложные и длинные конструкции на более короткие и понятные, используй простые слова и активный залог. Сохрани смысл и факты. Не упрощай терминологию, если она критична для понимания. Сохрани структуру и формат Markdown. Возвращай только результат без пояснений."
},
{
"Id": "more-complex",
"Name": "Сложнее",
"Prompt": "Сделай текст более формальным и профессиональным: используй более точную лексику, сложные синтаксические конструкции и терминологию. При необходимости слегка расширь формулировки (до +15%), но не добавляй новых фактов. Сохрани смысл, структуру и формат Markdown. Возвращай только результат без пояснений."
}
],
"Chat": {
"Enabled": true,
"DefaultModelKey": "system:deepseek-v4",
"ChatApiDefaultModelKey": "system:deepseek-v4",
"ServicesDefaultModelKey": "system:deepseek-v4",
"SystemProviders": [
{
"ProviderName": "yandex",
"BaseUrl": "https://ai.api.cloud.yandex.net/v1",
"ApiKey": "<api-key>",
"Models": [
{
"Key": "deepseek-v4",
"ExternalModelId": "gpt://<folder-id>/deepseek-v4-flash",
"DisplayName": "DeepSeek V4 Flash",
"SupportsStreaming": true,
"SupportsTools": true,
"SupportsVision": false
}
]
}
]
}
}
}
TextCommands задает команды обработки текста и не относится к embeddings. Список команд можно изменять и дополнять.
Значения DefaultModelKey, ChatApiDefaultModelKey и ServicesDefaultModelKey имеют формат system:<Key> и должны ссылаться на поле Key существующей модели в SystemProviders.
При AI:Chat:Enabled = true необходимо настроить хотя бы одного системного провайдера, его API-ключ и модель по умолчанию. API-ключ указывается непосредственно в защищенном settings.json; не сохраняйте реальный ключ в системе контроля версий.
Yandex Cloud приведен как пример. Можно использовать другой доступный из контура LLM-провайдер с OpenAI-совместимым API. Для функций AI, использующих инструменты, модель должна поддерживать tools.
Параметр HelpSearch:Endpoint задает внешний сервис поиска по официальной справке Timetta. Для его использования backend должен иметь исходящий HTTPS-доступ к timetta.com.
client-settings.json:
{
"api": {
"url": "https://op.timetta-test.com:5400"
},
"passport": {
"url": "https://op.timetta-test.com:5401"
},
"websocket": {
"url": "https://op.timetta-test.com:5404"
},
"aiBotLoader": "https://op.timetta-test.com:5402/loader.js"
}
Создайте файл ai-client-settings.json:
{
"passportUrl": "https://op.timetta-test.com:5401",
"apiUrl": "https://op.timetta-test.com:5400",
"aiBotUrl": "https://op.timetta-test.com:5402",
"webSocketUrl": "https://op.timetta-test.com:5404",
"apiTimettaUrl": "https://op.timetta-test.com:5400",
"baseAppUrl": "https://op.timetta-test.com"
}
Все параметры обязательны. Файл подключается к контейнеру AI-клиента ai-bot как /usr/share/nginx/html/config.json и /usr/share/nginx/html/assets/config.json.
Похоже, вам удобнее русский язык. Перейти на русскую версию?