Tan
feat: rebuild UI with Next.js 15 + shadcn/ui + Vercel AI SDK
77ce963
Raw
History Blame Contribute Delete
2.76 kB
"""Multi-provider LLM factory. Người dùng chọn provider + model tuỳ thích."""
from __future__ import annotations
import os
from typing import Optional
# Danh sách model free khả dụng cho mỗi provider
PROVIDERS = {
"gemini": {
"label": "Google Gemini",
"env": "GOOGLE_API_KEY",
"models": [
"gemini-2.5-flash",
"gemini-2.5-flash-lite",
"gemini-2.5-pro",
"gemini-2.0-flash",
"gemini-2.0-flash-lite",
"gemini-flash-latest",
"gemini-pro-latest",
],
"default": "gemini-2.5-flash-lite",
},
"groq": {
"label": "Groq (cực nhanh)",
"env": "GROQ_API_KEY",
"models": [
"llama-3.3-70b-versatile",
"llama-3.1-8b-instant",
"llama-3.2-90b-vision-preview",
"mixtral-8x7b-32768",
"gemma2-9b-it",
],
"default": "llama-3.3-70b-versatile",
},
"github": {
"label": "GitHub Models",
"env": "GITHUB_TOKEN",
"models": [
"gpt-4o-mini",
"gpt-4o",
"Phi-3.5-mini-instruct",
"Mistral-Nemo",
"Llama-3.3-70B-Instruct",
],
"default": "gpt-4o-mini",
},
}
def available_providers() -> list[str]:
"""Trả về list provider có API key sẵn sàng dùng."""
return [p for p, cfg in PROVIDERS.items() if os.getenv(cfg["env"])]
def build_llm(provider: str, model: Optional[str] = None, temperature: float = 0.3):
"""Khởi tạo LLM theo provider chọn. Raise nếu thiếu key."""
if provider not in PROVIDERS:
raise ValueError(f"Provider không hỗ trợ: {provider}. Chọn 1 trong {list(PROVIDERS)}")
cfg = PROVIDERS[provider]
api_key = os.getenv(cfg["env"])
if not api_key:
raise RuntimeError(
f"Thiếu biến môi trường {cfg['env']} cho provider {provider}. "
f"Xem .env.example để lấy hướng dẫn API key."
)
model = model or cfg["default"]
if provider == "gemini":
from langchain_google_genai import ChatGoogleGenerativeAI
return ChatGoogleGenerativeAI(model=model, google_api_key=api_key, temperature=temperature)
if provider == "groq":
from langchain_groq import ChatGroq
return ChatGroq(model=model, groq_api_key=api_key, temperature=temperature)
if provider == "github":
from langchain_openai import ChatOpenAI
return ChatOpenAI(
model=model,
api_key=api_key,
base_url="https://models.inference.ai.azure.com",
temperature=temperature,
)
raise ValueError(f"Provider {provider} chưa implement")