feat: add Ollama audio transcription and runtime config reload
- add audio capability reporting for Ollama models - support Telegram voice messages via ffmpeg conversion and Ollama transcription - add USE_SYSTEM_PROMPT toggle and runtime reloading of .env/system prompt settings - support ollama_options.json for custom Ollama request options - improve Telegram MarkdownV2 escaping and formatting preservation - add environment setters for AI provider credentials and models - show audio capability in info/model commands
This commit is contained in:
+70
-13
@@ -24,8 +24,6 @@ export class Environment {
|
||||
|
||||
static ANSWERS: Answers;
|
||||
|
||||
static USE_NAMES_IN_PROMPT: boolean;
|
||||
|
||||
static MAX_PHOTO_SIZE: number;
|
||||
|
||||
static PROCESS_LINKS: boolean;
|
||||
@@ -37,13 +35,15 @@ export class Environment {
|
||||
static IMAGE_HANDLE_FALLBACK_POLICY: ImageHandleFallbackPolicy;
|
||||
|
||||
static SYSTEM_PROMPT?: string;
|
||||
static USE_NAMES_IN_PROMPT: boolean;
|
||||
static USE_SYSTEM_PROMPT: boolean;
|
||||
static SEND_TIME_TOOK: boolean;
|
||||
|
||||
static OLLAMA_API_KEY?: string;
|
||||
static OLLAMA_ADDRESS?: string;
|
||||
static OLLAMA_MODEL?: string;
|
||||
static OLLAMA_IMAGE_MODEL?: string;
|
||||
static OLLAMA_THINK_MODEL?: string;
|
||||
static OLLAMA_API_KEY?: string;
|
||||
|
||||
static GEMINI_API_KEY?: string;
|
||||
static GEMINI_MODEL: string;
|
||||
@@ -62,6 +62,7 @@ export class Environment {
|
||||
static waitThinkText = "⏳ Дайте-ка подумать...";
|
||||
static analyzingPictureText = "🔍 Внимательно изучаю изображение...";
|
||||
static analyzingPicturesText = "🔍 Внимательно изучаю изображения...";
|
||||
static transcribingAudioText = "🦻 Внимательно слушаю аудио...";
|
||||
static genImageText = "👨🎨 Генерирую изображение...";
|
||||
static ollamaCancelledText = "```Ollama\n❌ Отменено```";
|
||||
|
||||
@@ -79,8 +80,6 @@ export class Environment {
|
||||
|
||||
Environment.ENABLE_UNSAFE_EVAL = ifTrue(process.env.ENABLE_UNSAFE_EVAL);
|
||||
|
||||
Environment.USE_NAMES_IN_PROMPT = ifTrue(process.env.USE_NAMES_IN_PROMPT);
|
||||
|
||||
Environment.MAX_PHOTO_SIZE = Number(process.env.MAX_PHOTO_SIZE || "1280");
|
||||
|
||||
Environment.PROCESS_LINKS = ifTrue(process.env.PROCESS_LINKS);
|
||||
@@ -113,13 +112,15 @@ export class Environment {
|
||||
Environment.IMAGE_HANDLE_FALLBACK_POLICY = ImageHandleFallbackPolicy.NOTIFY_USER;
|
||||
}
|
||||
|
||||
Environment.SEND_TIME_TOOK = ifTrue(process.env.SEND_TOOK_TIME || false);
|
||||
Environment.USE_NAMES_IN_PROMPT = ifTrue(process.env.USE_NAMES_IN_PROMPT);
|
||||
Environment.USE_SYSTEM_PROMPT = ifTrue(process.env.USE_SYSTEM_PROMPT || "true");
|
||||
Environment.SEND_TIME_TOOK = ifTrue(process.env.SEND_TOOK_TIME || "false");
|
||||
|
||||
Environment.OLLAMA_API_KEY = process.env.OLLAMA_API_KEY;
|
||||
Environment.OLLAMA_ADDRESS = process.env.OLLAMA_ADDRESS;
|
||||
Environment.OLLAMA_MODEL = process.env.OLLAMA_MODEL || "gemma3:4b";
|
||||
Environment.OLLAMA_IMAGE_MODEL = process.env.OLLAMA_IMAGE_MODEL || Environment.OLLAMA_MODEL;
|
||||
Environment.OLLAMA_THINK_MODEL = process.env.OLLAMA_THINK_MODEL || Environment.OLLAMA_MODEL;
|
||||
Environment.OLLAMA_API_KEY = process.env.OLLAMA_API_KEY;
|
||||
|
||||
Environment.GEMINI_API_KEY = process.env.GEMINI_API_KEY;
|
||||
Environment.GEMINI_MODEL = process.env.GEMINI_MODEL || "gemini-2.5-flash-lite";
|
||||
@@ -134,10 +135,26 @@ export class Environment {
|
||||
Environment.OPENAI_IMAGE_MODEL = process.env.OPENAI_IMAGE_MODEL || "gpt-image-1-mini";
|
||||
}
|
||||
|
||||
static setSystemPrompt(prompt: string) {
|
||||
static setOnlyForCreatorMode(enable: boolean) {
|
||||
this.ONLY_FOR_CREATOR_MODE = enable;
|
||||
}
|
||||
|
||||
static setSystemPrompt(prompt: string | undefined) {
|
||||
this.SYSTEM_PROMPT = prompt;
|
||||
}
|
||||
|
||||
static setUseNamesInPrompt(use: boolean) {
|
||||
this.USE_NAMES_IN_PROMPT = use;
|
||||
}
|
||||
|
||||
static setUseSystemPrompt(use: boolean) {
|
||||
this.USE_SYSTEM_PROMPT = use;
|
||||
}
|
||||
|
||||
static setSendTimeTook(send: boolean) {
|
||||
this.SEND_TIME_TOOK = send;
|
||||
}
|
||||
|
||||
static setAdmins(admins: Set<number>) {
|
||||
this.ADMIN_IDS = admins;
|
||||
}
|
||||
@@ -185,19 +202,59 @@ export class Environment {
|
||||
this.ANSWERS = answers;
|
||||
}
|
||||
|
||||
static setOllamaModel(newModel: string) {
|
||||
Environment.OLLAMA_MODEL = newModel;
|
||||
static setOllamaApiKey(key: string) {
|
||||
this.OLLAMA_API_KEY = key;
|
||||
}
|
||||
|
||||
static setOllamaAddress(address: string) {
|
||||
this.OLLAMA_ADDRESS = address;
|
||||
}
|
||||
|
||||
static setOllamaModel(ollamaModel: string) {
|
||||
this.OLLAMA_MODEL = ollamaModel;
|
||||
}
|
||||
|
||||
static setOllamaThinkModel(ollamaThinkModel: string) {
|
||||
this.OLLAMA_THINK_MODEL = ollamaThinkModel;
|
||||
}
|
||||
|
||||
static setOllamaImageModel(ollamaImageModel: string) {
|
||||
this.OLLAMA_IMAGE_MODEL = ollamaImageModel;
|
||||
}
|
||||
|
||||
static setGeminiApiKey(geminiApiKey: string) {
|
||||
this.GEMINI_API_KEY = geminiApiKey;
|
||||
}
|
||||
|
||||
static setGeminiModel(newModel: string) {
|
||||
Environment.GEMINI_MODEL = newModel;
|
||||
this.GEMINI_MODEL = newModel;
|
||||
}
|
||||
|
||||
static setGeminiImageModel(newImageModel: string) {
|
||||
this.GEMINI_IMAGE_MODEL = newImageModel;
|
||||
}
|
||||
|
||||
static setMistralApiKey(newMistralApiKey: string) {
|
||||
this.MISTRAL_API_KEY = newMistralApiKey;
|
||||
}
|
||||
|
||||
static setMistralModel(newModel: string) {
|
||||
Environment.MISTRAL_MODEL = newModel;
|
||||
this.MISTRAL_MODEL = newModel;
|
||||
}
|
||||
|
||||
static setOpenAIBaseUrl(newAIBaseUrl: string) {
|
||||
this.OPENAI_BASE_URL = newAIBaseUrl;
|
||||
}
|
||||
|
||||
static setOpenAIApiKey(newAIApiKey: string) {
|
||||
this.OPENAI_API_KEY = newAIApiKey;
|
||||
}
|
||||
|
||||
static setOpenAIModel(newModel: string) {
|
||||
Environment.OPENAI_MODEL = newModel;
|
||||
this.OPENAI_MODEL = newModel;
|
||||
}
|
||||
|
||||
static setOpenAIImageModel(newImageModel: string) {
|
||||
this.OPENAI_IMAGE_MODEL = newImageModel;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user