Spaces:
Runtime error
Runtime error
| """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") | |