smarttrip_ai / utils /model_loader.py
swaraj
test_2
0fefb50
Raw
History Blame Contribute Delete
2.83 kB
import os
from dotenv import load_dotenv
from typing import Optional, Any
from pydantic import BaseModel, Field
from utils.config_loader import load_config
from langchain_groq import ChatGroq
from langchain_openai import ChatOpenAI
load_dotenv()
class ConfigLoader:
def __init__(self):
self.config = load_config()
def __getitem__(self, key):
return self.config[key]
def get(self, key, default=None):
return self.config.get(key, default)
class ModelLoader(BaseModel):
# Accepts "ollama", "openai", "groq" (or any openai-compatible provider name)
model_provider: str = "ollama"
config: Optional[ConfigLoader] = Field(default=None, exclude=True)
def model_post_init(self, __context: Any) -> None:
self.config = ConfigLoader()
class Config:
arbitrary_types_allowed = True
def load_llm(self):
"""
Load and return the LLM based on MODEL_PROVIDER env var or the
model_provider argument passed at construction time.
Priority for each setting:
1. Environment variable (MODEL_NAME, MODEL_BASE_URL, MODEL_API_KEY …)
2. config/config.yaml values
"""
load_dotenv()
provider = (os.getenv("MODEL_PROVIDER") or self.model_provider).lower()
print(f"[ModelLoader] Loading LLM — provider: {provider}")
if provider == "groq":
api_key = os.getenv("GROQ_API_KEY")
if not api_key:
raise EnvironmentError(
"GROQ_API_KEY not found in environment variables. "
"Set it in .env or as a Hugging Face Space secret."
)
model_name = (
os.getenv("MODEL_NAME")
or self.config["llm"].get("groq", {}).get("model_name", "llama-3.1-8b-instant")
)
return ChatGroq(model=model_name, api_key=api_key)
elif provider == "openai":
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise EnvironmentError(
"OPENAI_API_KEY not found in environment variables."
)
model_name = os.getenv("MODEL_NAME") or "gpt-4o-mini"
return ChatOpenAI(model=model_name, api_key=api_key)
else:
# Default: "ollama" or any OpenAI-compatible endpoint
api_key = os.getenv("OLLAMA_API_KEY") or os.getenv("MODEL_API_KEY", "ollama")
model_name = (
os.getenv("MODEL_NAME")
or self.config["llm"]["ollama"]["model_name"]
)
base_url = (
os.getenv("MODEL_BASE_URL")
or self.config["llm"]["ollama"]["base_url"]
)
return ChatOpenAI(model=model_name, base_url=base_url, api_key=api_key)