add posibility to choose model

This commit is contained in:
dimitrievgs 2025-09-17 02:23:19 +03:00
parent d5a32a534f
commit b59c53ad07
5 changed files with 30 additions and 12 deletions

View File

@ -7,6 +7,7 @@
from flask import Flask, request, jsonify
from flask_cors import CORS
from workflows import run_agent, graph_history_manager
from llm_client import MODELS # Добавляем импорт списка моделей
api = Flask(__name__)
CORS(
@ -23,12 +24,13 @@ def chat():
parent_node_id = data.get(
"parent_node_id") # Получаем parent_node_id из запроса
system_prompt = data.get("system_prompt")
model = data.get("model")
if not message:
return jsonify({"error": "Сообщение не может быть пустым."}, 400)
result = run_agent(message, graph_id,
parent_node_id, system_prompt) # Передаем parent_node_id в run_agent
parent_node_id, system_prompt, model) # Передаем parent_node_id в run_agent
return jsonify(result)
@ -79,3 +81,7 @@ def get_messages_from_root_to_node(graph_id, node_id):
graph_data, target_node_id)
return jsonify(messages)
@api.route('/api/models', methods=['GET'])
def get_available_models():
"""API endpoint для получения списка доступных моделей."""
return jsonify(list(MODELS.keys()))

View File

@ -31,13 +31,12 @@ MODELS: Dict[str, Dict[str, Any]] = {
"stream": True,
"capabilities": ["vision"],
},
"gemini-2.5-flash-preview-05-20": {
"name": "gemini-2.5-flash-preview-05-20",
"gemini-2.5-flash-bh": {
"name": "gemini-2.5-flash",
"provider": "openai", # Изменено на "openai"
"model_name":
"gemini-2.5-flash-preview-05-20", # Добавлено имя модели для LangChain
"apiBase": "https://render-service-gsu7.onrender.com/g/v1beta",
"apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik",
"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"],
},
@ -204,3 +203,7 @@ def get_llm(name: str) -> CustomLLM:
if not config:
raise ValueError(f"Модель '{name}' не сконфигурирована.")
return CustomLLM(config)
def get_available_models():
"""Возвращает список доступных моделей."""
return list(MODELS.keys())

View File

@ -37,4 +37,5 @@ class AgentState(BaseModel):
temporary_chat_history: List[Dict[str, Any]] = Field(
[], description="Временная история чата, не сохраняемая в БД.")
system_prompt: Optional[str] = Field(None,
description="Системный промпт.")
description="Системный промпт.")
selected_model: str = Field(None, description="Модель llm.")

View File

@ -163,7 +163,9 @@ def call_llm_node(state: AgentState) -> AgentState:
elif msg["role"] == "assistant":
messages_for_llm.append(AIMessage(content=msg["content"]))
response = main_llm.invoke(messages_for_llm)
model_name = state.selected_model
llm = get_llm(model_name)
response = llm.invoke(messages_for_llm)
llm_node_id = str(uuid.uuid4())

View File

@ -93,7 +93,8 @@ app = workflow.compile()
def run_agent(user_input: str,
existing_graph_id: Optional[str] = None,
parent_node_id: Optional[str] = None,
system_prompt: Optional[str] = None) -> Dict[str, Any]:
system_prompt: Optional[str] = None,
model: Optional[str] = None) -> Dict[str, Any]:
"""
Запускает агента с заданным пользовательским вводом.
Может продолжить существующий граф по graph_id.
@ -101,8 +102,13 @@ def run_agent(user_input: str,
"""
# ---------------------------------------------------- Initial State Setup ----------------------------------------------------------------
initial_state = AgentState(input=user_input, parent_node_id=parent_node_id, system_prompt=system_prompt)
initial_state = AgentState(
input=user_input,
parent_node_id=parent_node_id,
system_prompt=system_prompt,
selected_model=model or "gemini-2.5-flash"
)
# Сохраняем исходные ID узлов и ребер для определения новых после выполнения графа
original_node_ids: Set[str] = set()
original_edge_ids: Set[str] = set()