File size: 1,495 Bytes
4db2d34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""backend/core/llm.py — LLM factory supporting Gemini and Grok."""
from __future__ import annotations


def get_llm(role: str, temperature: float = 0.1):
    """
    Return the right LLM based on LLM_PROVIDER in .env.
    role: "planner" | "executor" | "critic" | "memory"
    """
    from .config import get_settings
    settings = get_settings()

    max_tokens = settings.max_output_tokens

    if settings.llm_provider == "groq":
        from langchain_groq import ChatGroq

        model_map = {
            "planner": settings.groq_planner_model,
            "executor": settings.groq_executor_model,
            "critic": settings.groq_critic_model,
            "memory": settings.groq_memory_model,
        }
        return ChatGroq(
            model=model_map.get(role, "llama-3.3-70b-versatile"),
            temperature=temperature,
            api_key=settings.groq_api_key,
            max_tokens=max_tokens,
        )

    else:  # gemini (default)
        from langchain_google_genai import ChatGoogleGenerativeAI

        model_map = {
            "planner": settings.planner_model,
            "executor": settings.executor_model,
            "critic": settings.critic_model,
            "memory": settings.memory_model,
        }
        return ChatGoogleGenerativeAI(
            model=model_map.get(role, settings.planner_model),
            temperature=temperature,
            google_api_key=settings.google_api_key,
            max_output_tokens=max_tokens,
        )