Sharma7's picture
fix: disable cloudflare AI gateway and update model IDs
9ad0d58
Raw
History Blame Contribute Delete
5.34 kB
"""
PolicyEye Configuration
Loads environment variables and defines intelligent multi-model routing.
Routing Strategy:
- Groq (Llama 3.3 70B) → Primary for text tasks (case analysis, explanation). Blazing fast, free.
- Gemini Flash → Primary for PDF/vision tasks (policy ingestion). Best free vision model.
- xAI Grok → Primary for long-form writing (grievance letters). $25/mo free credits.
- OpenRouter → Final fallback (multiple free models).
"""
import os
from dotenv import load_dotenv
load_dotenv()
# --- Provider API Keys ---
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
XAI_API_KEY = os.getenv("XAI_API_KEY")
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
CEREBRAS_API_KEY = os.getenv("CEREBRAS_API_KEY")
SAMBANOVA_API_KEY = os.getenv("SAMBANOVA_API_KEY")
HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY")
# --- Cloudflare AI Gateway (Optional) ---
CF_ACCOUNT_ID = os.getenv("CLOUDFLARE_ACCOUNT_ID")
CF_GATEWAY_NAME = os.getenv("CLOUDFLARE_GATEWAY_NAME")
# Providers fully supported by Cloudflare AI Gateway
_CF_SUPPORTED = {"groq", "cerebras", "openrouter"}
def get_gateway_url(provider: str, default_url: str) -> str:
"""Route through Cloudflare only for providers it reliably supports.
NOTE: Temporarily bypassing Cloudflare as it may be causing silent drops/timeouts.
"""
return default_url
# --- Provider Base URLs (fallback = direct API) ---
GOOGLE_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai"
GROQ_BASE_URL = get_gateway_url("groq", "https://api.groq.com/openai/v1")
XAI_BASE_URL = "https://api.x.ai/v1"
OPENROUTER_BASE_URL = get_gateway_url("openrouter", "https://openrouter.ai/api/v1/chat/completions")
CEREBRAS_BASE_URL = get_gateway_url("cerebras", "https://api.cerebras.ai/v1")
SAMBANOVA_BASE_URL = "https://api.sambanova.ai/v1"
HUGGINGFACE_BASE_URL = "https://api-inference.huggingface.co/v1"
# --- Provider Model Selections ---
GOOGLE_MODELS = {
"default": "gemini-2.0-flash",
"lite": "gemini-2.0-flash-lite",
}
GROQ_MODELS = {
"primary": "llama-3.3-70b-versatile",
"fast": "llama-3.1-8b-instant",
}
XAI_MODELS = {
"primary": "grok-3-mini-fast",
}
OPENROUTER_MODELS = {
"fallback_chain": [
"qwen/qwen3-coder:free",
"google/gemma-3-27b-it:free",
"meta-llama/llama-3.3-70b-instruct:free",
"microsoft/phi-4-reasoning-plus:free",
"nvidia/llama-3.1-nemotron-70b-instruct:free",
]
}
CEREBRAS_MODELS = {
"primary": "llama3.3-70b",
"fast": "llama3.3-70b",
}
SAMBANOVA_MODELS = {
"primary": "Meta-Llama-3.3-70B-Instruct",
"fast": "Meta-Llama-3.3-70B-Instruct",
}
HUGGINGFACE_MODELS = {
"primary": "meta-llama/Llama-3.3-70B-Instruct",
}
# --- Intelligent Task-Based Routing ---
# Each role maps to an ordered list of (provider, model) tuples.
# The router tries them in order until one succeeds.
TASK_ROUTING = {
"policy_ingestion": [
("cerebras", CEREBRAS_MODELS["primary"]),
("groq", GROQ_MODELS["primary"]),
("sambanova", SAMBANOVA_MODELS["primary"]),
("google", GOOGLE_MODELS["default"]),
("google", GOOGLE_MODELS["lite"]),
("huggingface", HUGGINGFACE_MODELS["primary"]),
("openrouter", None),
],
"case_analysis": [
("cerebras", CEREBRAS_MODELS["primary"]),
("groq", GROQ_MODELS["primary"]),
("sambanova", SAMBANOVA_MODELS["primary"]),
("google", GOOGLE_MODELS["default"]),
("huggingface", HUGGINGFACE_MODELS["primary"]),
("openrouter", None),
],
"explanation": [
("cerebras", CEREBRAS_MODELS["primary"]),
("groq", GROQ_MODELS["primary"]),
("sambanova", SAMBANOVA_MODELS["primary"]),
("google", GOOGLE_MODELS["default"]),
("huggingface", HUGGINGFACE_MODELS["primary"]),
("openrouter", None),
],
"grievance": [
("cerebras", CEREBRAS_MODELS["primary"]),
("groq", GROQ_MODELS["primary"]),
("sambanova", SAMBANOVA_MODELS["primary"]),
("google", GOOGLE_MODELS["default"]),
("huggingface", HUGGINGFACE_MODELS["primary"]),
("openrouter", None),
],
"chat": [
("cerebras", CEREBRAS_MODELS["fast"]),
("groq", GROQ_MODELS["fast"]),
("sambanova", SAMBANOVA_MODELS["fast"]),
("google", GOOGLE_MODELS["lite"]),
("openrouter", None),
],
}
# Default routing for any unrecognized role
DEFAULT_ROUTING = [
("cerebras", CEREBRAS_MODELS["primary"]),
("groq", GROQ_MODELS["primary"]),
("sambanova", SAMBANOVA_MODELS["primary"]),
("google", GOOGLE_MODELS["default"]),
("openrouter", None),
]
# --- Database ---
DATABASE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "secureshield.db")
# --- App ---
APP_NAME = "PolicyEye"
APP_VERSION = "1.0.0"
# --- Cache ---
CACHE_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), ".cache")
ENABLE_CACHE = os.getenv("ENABLE_CACHE", "true").lower() == "true"
# --- Authentication ---
SUPABASE_JWT_SECRET = os.getenv("SUPABASE_JWT_SECRET")
# --- Email (Resend — HTTP-based, works on HF Spaces) ---
RESEND_API_KEY = os.getenv("RESEND_API_KEY")
MAIL_FROM = os.getenv("MAIL_FROM", "PolicyEye <onboarding@resend.dev>")