|
|
|
|
|
import json |
|
import requests |
|
from tools.context_builder import build_prompt |
|
|
|
LLM_ENDPOINT = "http://localhost:1234/v1/chat/completions" |
|
DEFAULT_MODEL = "gpt-4-llmstudio" |
|
|
|
|
|
def call_llm(context_blocks, user_message, model=DEFAULT_MODEL, temperature=0.7, max_tokens=2048): |
|
""" |
|
Вызывает LLM, передавая подготовленный системный и пользовательский промпт. |
|
Возвращает только текст ответа. |
|
""" |
|
messages = build_prompt(context_blocks, user_message) |
|
|
|
payload = { |
|
"model": model, |
|
"messages": messages, |
|
"temperature": temperature, |
|
"max_tokens": max_tokens, |
|
} |
|
|
|
try: |
|
response = requests.post(LLM_ENDPOINT, json=payload) |
|
response.raise_for_status() |
|
data = response.json() |
|
return data["choices"][0]["message"]["content"].strip() |
|
except Exception as e: |
|
return f"[LLM ERROR] {e}" |
|
|
|
|
|
def get_raw_response(context_blocks, user_message, model=DEFAULT_MODEL, temperature=0.7, max_tokens=2048): |
|
""" |
|
Возвращает полный JSON-ответ LLM (для дебага). |
|
""" |
|
messages = build_prompt(context_blocks, user_message) |
|
|
|
payload = { |
|
"model": model, |
|
"messages": messages, |
|
"temperature": temperature, |
|
"max_tokens": max_tokens, |
|
} |
|
|
|
try: |
|
response = requests.post(LLM_ENDPOINT, json=payload) |
|
response.raise_for_status() |
|
return response.json() |
|
except Exception as e: |
|
return {"error": str(e)} |
|
|