39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""
|
|
Фабрика LLM — переключение между провайдерами через .env.
|
|
LLM_PROVIDER=openai → gpt-oss-20b (пары)
|
|
LLM_PROVIDER=gigachat → GigaChat (дома, бесплатные токены Сбера)
|
|
"""
|
|
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
|
|
def get_llm():
|
|
provider = os.getenv("LLM_PROVIDER", "openai").lower()
|
|
|
|
if provider == "gigachat":
|
|
from langchain_community.chat_models import GigaChat
|
|
print(f"[LLM] 🏠 GigaChat ({os.getenv('GIGACHAT_MODEL', 'GigaChat-MAX')})")
|
|
return GigaChat(
|
|
credentials=os.getenv("GIGACHAT_CREDENTIALS"),
|
|
scope=os.getenv("GIGACHAT_SCOPE", "GIGACHAT_API_B2B"),
|
|
model=os.getenv("GIGACHAT_MODEL", "GigaChat-MAX"),
|
|
verify_ssl_certs=False,
|
|
temperature=0.2,
|
|
timeout=240,
|
|
)
|
|
else:
|
|
from langchain_openai import ChatOpenAI
|
|
from pydantic import SecretStr
|
|
model = os.getenv("OPENAI_MODEL", "openi/gpt-oss-20b")
|
|
print(f"[LLM] 🏫 OpenAI-compatible ({model})")
|
|
return ChatOpenAI(
|
|
model=model,
|
|
base_url=os.getenv("OPENAI_BASE_URL"),
|
|
api_key=SecretStr(os.getenv("OPENAI_API_KEY", "fake")),
|
|
temperature=0.2,
|
|
timeout=360,
|
|
)
|