Files
Priceflow/app/routers/openrouter.py
T
Claude d6c39252f2 feat: Rebranding PriceFlow + OpenRouter + i18n FR + Docker
Modifications majeures:

1. Rebranding: Pricecious → PriceFlow
   - Mise à jour du titre, logo et noms de projet

2. Intégration OpenRouter
   - Ajout comme provider IA avec filtres (chat, vision, code, reasoning, free)
   - Récupération dynamique des modèles et coûts
   - Service et router dédiés (/api/openrouter/models)

3. Internationalisation (i18n)
   - Installation i18next + react-i18next
   - Application entièrement traduite en français
   - Fichier de traduction: fr.json

4. Configuration Docker
   - docker-compose.yml avec réseau nginx_default (external)
   - PostgreSQL sur port 5488:5432
   - Browserless sur port 3012:3000
   - init.sql pour initialisation de la base de données
   - .env.example avec variables documentées

5. Favicon
   - Documentation ajoutée dans index.html pour faciliter le remplacement
2025-11-22 09:22:39 +00:00

58 lines
2.0 KiB
Python

"""
Router pour les endpoints OpenRouter.
Permet de récupérer la liste des modèles et leurs coûts.
"""
from fastapi import APIRouter, Query
from app.services.openrouter_service import OpenRouterService
router = APIRouter(prefix="/openrouter", tags=["openrouter"])
@router.get("/models")
def get_openrouter_models(
api_key: str | None = Query(None, description="Clé API OpenRouter (optionnelle)"),
category: str | None = Query(None, description="Filtrer par catégorie: chat, vision, code, reasoning, free")
):
"""
Récupère la liste des modèles OpenRouter disponibles.
- **api_key**: Clé API OpenRouter (optionnelle pour la liste publique)
- **category**: Filtrer par catégorie (chat, vision, code, reasoning, free)
Retourne la liste des modèles avec:
- id: Identifiant du modèle
- name: Nom affiché
- description: Description du modèle
- context_length: Longueur de contexte maximale
- pricing: Coûts (prompt et completion par token)
- categories: Liste des catégories du modèle
"""
if category:
models = OpenRouterService.get_models_by_category(api_key, category)
else:
models = OpenRouterService.get_models(api_key)
return {
"models": models,
"total": len(models),
"categories": ["chat", "vision", "code", "reasoning", "free"]
}
@router.get("/categories")
def get_categories():
"""
Retourne la liste des catégories disponibles pour filtrer les modèles.
"""
return {
"categories": [
{"id": "chat", "name": "Chat", "description": "Modèles de conversation générale"},
{"id": "vision", "name": "Vision", "description": "Modèles avec capacités d'analyse d'images"},
{"id": "code", "name": "Code", "description": "Modèles spécialisés en programmation"},
{"id": "reasoning", "name": "Raisonnement", "description": "Modèles avec capacités de raisonnement avancé"},
{"id": "free", "name": "Gratuit", "description": "Modèles gratuits"}
]
}