Add help command
This commit is contained in:
parent
f637c6e3c4
commit
d3449bb50d
|
|
@ -18,24 +18,6 @@ DEFAULT_TEMPERATURE = 1.0
|
||||||
|
|
||||||
# Конфигурация внешних моделей
|
# Конфигурация внешних моделей
|
||||||
MODELS: Dict[str, Dict[str, Any]] = {
|
MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"gemini-2.0-flash": {
|
|
||||||
"name": "gemini-2.0-flash",
|
|
||||||
"provider": "openai", # Изменено на "openai"
|
|
||||||
"model_name": "gemini-2.0-flash", # Добавлено имя модели для LangChain
|
|
||||||
"apiBase": "https://generativelanguage.googleapis.com/v1beta",
|
|
||||||
"apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik",
|
|
||||||
"stream": True,
|
|
||||||
"capabilities": ["vision"],
|
|
||||||
},
|
|
||||||
"gemini-2.5-flash": {
|
|
||||||
"name": "gemini-2.5-flash",
|
|
||||||
"provider": "openai", # Изменено на "openai"
|
|
||||||
"model_name": "gemini-2.5-flash", # Добавлено имя модели для LangChain
|
|
||||||
"apiBase": "https://generativelanguage.googleapis.com/v1beta",
|
|
||||||
"apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik",
|
|
||||||
"stream": True,
|
|
||||||
"capabilities": ["vision"],
|
|
||||||
},
|
|
||||||
"gemini-2.0-flash-r": {
|
"gemini-2.0-flash-r": {
|
||||||
"name": "gemini-2.0-flash-r",
|
"name": "gemini-2.0-flash-r",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai", # Изменено на "openai"
|
||||||
|
|
@ -46,10 +28,10 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
},
|
},
|
||||||
"gemini-2.0-flash-lite": {
|
"gemini-2.5-flash-lite-openrouter": {
|
||||||
"name": "google/gemini-2.0-flash-lite-001",
|
"name": "google/gemini-2.5-flash-lite",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"model_name": "google/gemini-2.0-flash-lite-001",
|
"model_name": "google/gemini-2.5-flash-lite",
|
||||||
"apiBase": "https://openrouter.ai/api/v1", # Добавлено /api/v1
|
"apiBase": "https://openrouter.ai/api/v1", # Добавлено /api/v1
|
||||||
"apiKey":
|
"apiKey":
|
||||||
"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",
|
"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",
|
||||||
|
|
@ -82,27 +64,6 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"include_reasoning": True
|
"include_reasoning": True
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gemini-2.5-flash-bh": {
|
|
||||||
"name": "gemini-2.5-flash",
|
|
||||||
"provider": "openai", # Изменено на "openai"
|
|
||||||
"model_name": "gemini-2.5-flash", # Добавлено имя модели для LangChain
|
|
||||||
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
|
||||||
"apiKey":
|
|
||||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
|
||||||
"stream": True,
|
|
||||||
"capabilities": ["vision"],
|
|
||||||
},
|
|
||||||
"gemini-3-flash-preview-bh": {
|
|
||||||
"name": "gemini-3-flash-preview",
|
|
||||||
"provider": "openai", # Изменено на "openai"
|
|
||||||
"model_name":
|
|
||||||
"gemini-3-flash-preview", # Добавлено имя модели для LangChain
|
|
||||||
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
|
||||||
"apiKey":
|
|
||||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
|
||||||
"stream": True,
|
|
||||||
"capabilities": ["vision"],
|
|
||||||
},
|
|
||||||
"gemini-3.0-flash-openrouter": {
|
"gemini-3.0-flash-openrouter": {
|
||||||
"name": "google/gemini-3-flash-preview",
|
"name": "google/gemini-3-flash-preview",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
|
|
@ -129,17 +90,6 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"include_reasoning": True
|
"include_reasoning": True
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gemini-3.1-pro-bh": {
|
|
||||||
"name": "gemini-3.1-pro-preview",
|
|
||||||
"provider": "openai", # Изменено на "openai"
|
|
||||||
"model_name":
|
|
||||||
"gemini-3.1-pro-preview", # Добавлено имя модели для LangChain
|
|
||||||
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
|
||||||
"apiKey":
|
|
||||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
|
||||||
"stream": True,
|
|
||||||
"capabilities": ["vision"],
|
|
||||||
},
|
|
||||||
"claude-4.5-sonnet-bh": {
|
"claude-4.5-sonnet-bh": {
|
||||||
"name": "claude-4.5-sonnet-bh",
|
"name": "claude-4.5-sonnet-bh",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai", # Изменено на "openai"
|
||||||
|
|
@ -194,6 +144,19 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"include_reasoning": True
|
"include_reasoning": True
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"deepseek-v4-flash-openrouter": {
|
||||||
|
"name": "deepseek/deepseek-v4-flash",
|
||||||
|
"provider": "openai",
|
||||||
|
"model_name": "deepseek/deepseek-v4-flash",
|
||||||
|
"apiBase": "https://openrouter.ai/api/v1", # Добавлено /api/v1
|
||||||
|
"apiKey":
|
||||||
|
"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",
|
||||||
|
"stream": True,
|
||||||
|
"capabilities": ["vision", "reasoning"],
|
||||||
|
"model_kwargs": {
|
||||||
|
"include_reasoning": True
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ def build_react_agent(model_name: str, temperature: float, max_tokens: int, agen
|
||||||
class PurePromptSchema(BaseModel):
|
class PurePromptSchema(BaseModel):
|
||||||
context: str = Field(description="Контекст, данные или текст, к которому нужно применить эту инструкцию/промпт.")
|
context: str = Field(description="Контекст, данные или текст, к которому нужно применить эту инструкцию/промпт.")
|
||||||
|
|
||||||
|
class SystemHelpSchema(BaseModel):
|
||||||
|
dummy: str = Field(default="", description="Необязательный параметр, оставь пустым.")
|
||||||
|
|
||||||
def create_subprocess_tool(script_path: str, method_name: str,
|
def create_subprocess_tool(script_path: str, method_name: str,
|
||||||
hidden_prompt: str):
|
hidden_prompt: str):
|
||||||
|
|
@ -228,6 +230,18 @@ def get_dynamic_tools(obsidian_settings: dict):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Ошибка генерации инструмента-скрипта '{name}': {e}")
|
print(f"❌ Ошибка генерации инструмента-скрипта '{name}': {e}")
|
||||||
|
|
||||||
|
def run_system_help(dummy: str = "") -> str:
|
||||||
|
return _generate_commands_list(custom_tools)
|
||||||
|
|
||||||
|
help_tool = StructuredTool.from_function(
|
||||||
|
func=run_system_help,
|
||||||
|
name="show_available_commands",
|
||||||
|
description="""Используй этот инструмент, если пользователь спрашивает "Что ты умеешь?",
|
||||||
|
"Покажи help", "Какие есть команды" или просит список возможностей.""",
|
||||||
|
args_schema=SystemHelpSchema
|
||||||
|
)
|
||||||
|
tools.append(help_tool)
|
||||||
|
|
||||||
return tools
|
return tools
|
||||||
|
|
||||||
def _build_pydantic_schema_from_func(func) -> type[BaseModel]:
|
def _build_pydantic_schema_from_func(func) -> type[BaseModel]:
|
||||||
|
|
@ -275,3 +289,21 @@ def _build_pydantic_schema_from_func(func) -> type[BaseModel]:
|
||||||
**fields
|
**fields
|
||||||
)
|
)
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
def _generate_commands_list(custom_tools: list[dict[str, Any]]) -> str:
|
||||||
|
"""
|
||||||
|
Генерирует форматированный список доступных команд и их описаний
|
||||||
|
для использования в инструменте help.
|
||||||
|
"""
|
||||||
|
if not custom_tools:
|
||||||
|
return "В данный момент нет доступных дополнительных команд. Ты работаешь как обычный собеседник."
|
||||||
|
|
||||||
|
lines = ["Я могу использовать следующие инструменты/команды:\n"]
|
||||||
|
for ct in custom_tools:
|
||||||
|
name = ct.get("name")
|
||||||
|
desc = ct.get("description", "Описание отсутствует")
|
||||||
|
if name:
|
||||||
|
lines.append(f"- **{name}**: {desc}")
|
||||||
|
|
||||||
|
lines.append("\nПерескажи этот список пользователю в удобном формате.")
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
@ -11,8 +11,8 @@ from llm_client import DEFAULT_TEMPERATURE, get_llm
|
||||||
from langchain_core.messages import SystemMessage, HumanMessage
|
from langchain_core.messages import SystemMessage, HumanMessage
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
DEFAULT_SUMMARIZATION_LLM_NAME = "gemini-2.0-flash-lite" # "mistral-small-latest" # "mistral-small-latest" #"gemini-2.0-flash-r"
|
DEFAULT_SUMMARIZATION_LLM_NAME = "gemini-2.5-flash-lite-openrouter" # "mistral-small-latest" # "mistral-small-latest" #"gemini-2.0-flash-r"
|
||||||
DEFAULT_VOICE_LLM_NAME = "gemini-2.0-flash-lite" # "gemini-3.0-flash-openrouter"
|
DEFAULT_VOICE_LLM_NAME = "deepseek-v4-flash-openrouter" # "gemini-3.0-flash-openrouter"
|
||||||
|
|
||||||
MAX_TITLE_GENERATION_CONTENT_LENGTH = 5000 # Максимальное количество символов для генерации заголовков
|
MAX_TITLE_GENERATION_CONTENT_LENGTH = 5000 # Максимальное количество символов для генерации заголовков
|
||||||
QUEUE_POLLING_INTERVAL = 4
|
QUEUE_POLLING_INTERVAL = 4
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user