add posibility to choose model
This commit is contained in:
parent
d5a32a534f
commit
b59c53ad07
|
|
@ -7,6 +7,7 @@
|
||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from workflows import run_agent, graph_history_manager
|
from workflows import run_agent, graph_history_manager
|
||||||
|
from llm_client import MODELS # Добавляем импорт списка моделей
|
||||||
|
|
||||||
api = Flask(__name__)
|
api = Flask(__name__)
|
||||||
CORS(
|
CORS(
|
||||||
|
|
@ -23,12 +24,13 @@ def chat():
|
||||||
parent_node_id = data.get(
|
parent_node_id = data.get(
|
||||||
"parent_node_id") # Получаем parent_node_id из запроса
|
"parent_node_id") # Получаем parent_node_id из запроса
|
||||||
system_prompt = data.get("system_prompt")
|
system_prompt = data.get("system_prompt")
|
||||||
|
model = data.get("model")
|
||||||
|
|
||||||
if not message:
|
if not message:
|
||||||
return jsonify({"error": "Сообщение не может быть пустым."}, 400)
|
return jsonify({"error": "Сообщение не может быть пустым."}, 400)
|
||||||
|
|
||||||
result = run_agent(message, graph_id,
|
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)
|
return jsonify(result)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -79,3 +81,7 @@ def get_messages_from_root_to_node(graph_id, node_id):
|
||||||
graph_data, target_node_id)
|
graph_data, target_node_id)
|
||||||
return jsonify(messages)
|
return jsonify(messages)
|
||||||
|
|
||||||
|
@api.route('/api/models', methods=['GET'])
|
||||||
|
def get_available_models():
|
||||||
|
"""API endpoint для получения списка доступных моделей."""
|
||||||
|
return jsonify(list(MODELS.keys()))
|
||||||
|
|
@ -31,13 +31,12 @@ MODELS: Dict[str, Dict[str, Any]] = {
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
},
|
},
|
||||||
"gemini-2.5-flash-preview-05-20": {
|
"gemini-2.5-flash-bh": {
|
||||||
"name": "gemini-2.5-flash-preview-05-20",
|
"name": "gemini-2.5-flash",
|
||||||
"provider": "openai", # Изменено на "openai"
|
"provider": "openai", # Изменено на "openai"
|
||||||
"model_name":
|
"model_name": "gemini-2.5-flash", # Добавлено имя модели для LangChain
|
||||||
"gemini-2.5-flash-preview-05-20", # Добавлено имя модели для LangChain
|
"apiBase": "https://bothub.chat/api/v2/openai/v1",
|
||||||
"apiBase": "https://render-service-gsu7.onrender.com/g/v1beta",
|
"apiKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQ3MTMwYTk0LTJiNmMtNDgzZi04Y2NiLWM5MjgwNzlmNDFlZSIsImlzRGV2ZWxvcGVyIjp0cnVlLCJpYXQiOjE3NTQ0NzYwMDcsImV4cCI6MjA3MDA1MjAwN30._64_DXNZatdd4-4VbXp8dOXdDhIlNWMQt9A_Nn6mu3g",
|
||||||
"apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik",
|
|
||||||
"stream": True,
|
"stream": True,
|
||||||
"capabilities": ["vision"],
|
"capabilities": ["vision"],
|
||||||
},
|
},
|
||||||
|
|
@ -204,3 +203,7 @@ def get_llm(name: str) -> CustomLLM:
|
||||||
if not config:
|
if not config:
|
||||||
raise ValueError(f"Модель '{name}' не сконфигурирована.")
|
raise ValueError(f"Модель '{name}' не сконфигурирована.")
|
||||||
return CustomLLM(config)
|
return CustomLLM(config)
|
||||||
|
|
||||||
|
def get_available_models():
|
||||||
|
"""Возвращает список доступных моделей."""
|
||||||
|
return list(MODELS.keys())
|
||||||
|
|
@ -37,4 +37,5 @@ class AgentState(BaseModel):
|
||||||
temporary_chat_history: List[Dict[str, Any]] = Field(
|
temporary_chat_history: List[Dict[str, Any]] = Field(
|
||||||
[], description="Временная история чата, не сохраняемая в БД.")
|
[], description="Временная история чата, не сохраняемая в БД.")
|
||||||
system_prompt: Optional[str] = Field(None,
|
system_prompt: Optional[str] = Field(None,
|
||||||
description="Системный промпт.")
|
description="Системный промпт.")
|
||||||
|
selected_model: str = Field(None, description="Модель llm.")
|
||||||
|
|
@ -163,7 +163,9 @@ def call_llm_node(state: AgentState) -> AgentState:
|
||||||
elif msg["role"] == "assistant":
|
elif msg["role"] == "assistant":
|
||||||
messages_for_llm.append(AIMessage(content=msg["content"]))
|
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())
|
llm_node_id = str(uuid.uuid4())
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,8 @@ app = workflow.compile()
|
||||||
def run_agent(user_input: str,
|
def run_agent(user_input: str,
|
||||||
existing_graph_id: Optional[str] = None,
|
existing_graph_id: Optional[str] = None,
|
||||||
parent_node_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.
|
Может продолжить существующий граф по graph_id.
|
||||||
|
|
@ -101,8 +102,13 @@ def run_agent(user_input: str,
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# ---------------------------------------------------- Initial State Setup ----------------------------------------------------------------
|
# ---------------------------------------------------- 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 узлов и ребер для определения новых после выполнения графа
|
# Сохраняем исходные ID узлов и ребер для определения новых после выполнения графа
|
||||||
original_node_ids: Set[str] = set()
|
original_node_ids: Set[str] = set()
|
||||||
original_edge_ids: Set[str] = set()
|
original_edge_ids: Set[str] = set()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user