AutonomousVehicleControlBeginnersGuide
关于自动驾驶车辆控制算法的 Python 示例代码与文档。本项目可作为技术指南书,供初学者学习这些算法与软件架构。
AI 翻译
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Reviix est une application de révision pour lycéens/étudiants : elle transforme des notes de cours (texte, photos, PDF, Word) en fiches de révision structurées, génère un planning de révision par répétition espacée à partir des examens à venir, et propose un quiz par chapitre pour se tester.
Copier .env.example en .env.local et renseigner :
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
SUPABASE_SECRET_KEY=
ANTHROPIC_API_KEY=
WHOP_API_KEY=
WHOP_WEBHOOK_SECRET=
WHOP_PLAN_ID_TIER1=
WHOP_PLAN_ID_TIER2=
WHOP_PLAN_ID_TIER3=
WHOP_ACCOUNT_ID=
NEXT_PUBLIC_SITE_URL=http://localhost:3000
SUPABASE_SECRET_KEY et ANTHROPIC_API_KEY ne doivent jamais être
exposées côté client : elles ne sont lues que dans des Route Handlers /
modules serveur (marqués import "server-only").
http://localhost:3000/auth/callback et l'équivalent en production
(https://ton-domaine/auth/callback).signInWithPassword), sans
nouveau lien à envoyer.Les migrations vivent dans supabase/migrations/ :
0001_init.sql : schéma complet (profiles, subjects, chapters, fiches,
exams, exam_chapters, planning_tasks, quizzes, quiz_attempts,
subscriptions), RLS auth.uid() = user_id sur chaque table, trigger
handle_new_user qui crée la ligne profiles à l'inscription.0002_ai_lock.sql : table ai_lock + fonctions try_acquire_ai_lock /
release_ai_lock, un verrou global qui sérialisait tous les appels à
Claude — supprimé par 0012_drop_ai_lock.sql une fois la génération de
fiches parallélisée (voir plus bas).0003_fiche_drafts.sql : table fiche_drafts, stockage temporaire entre
la génération d'une fiche et son assignation matière/chapitre — voir
"Flux d'enregistrement d'une fiche" plus bas.Appliquer avec la CLI Supabase :
supabase link --project-ref <ton-project-ref>
supabase db push
(ou coller le contenu des deux fichiers dans l'éditeur SQL du dashboard, dans l'ordre.)
npm install
npm run dev
L'application est servie sur http://localhost:3000.
Whop n'a pas d'équivalent de la Stripe CLI pour relayer les webhooks vers
localhost. Pour tester en local, exposer le serveur de dev via un tunnel
(ex. ngrok http 3000) et configurer l'URL publique obtenue comme endpoint
webhook (https://<tunnel>/api/whop/webhook) dans le dashboard Whop, avec
au minimum les événements membership.activated, membership.deactivated
et payment.succeeded.
Sans webhook configuré, un paiement Whop ne mettra jamais à jour la table
subscriptions — l'abonnement ne passera donc jamais à active en local.
Mode sandbox : WHOP_SANDBOX=true fait basculer lib/whop/client.ts
vers https://sandbox-api.whop.com/api/v1 et vers les variables
WHOP_API_KEY_SANDBOX/WHOP_WEBHOOK_SECRET_SANDBOX/
WHOP_PLAN_ID_TIER1_SANDBOX/WHOP_PLAN_ID_TIER2_SANDBOX/
WHOP_PLAN_ID_TIER3_SANDBOX/WHOP_ACCOUNT_ID_SANDBOX au lieu des
variables de production — permet de
tester un paiement complet avec de fausses cartes sans jamais toucher aux
identifiants ni à l'argent réel. Le webhook ne vérifie qu'un seul secret à
la fois selon ce réglage : un événement sandbox est rejeté tant que
WHOP_SANDBOX=false, et inversement — sandbox et production se testent
l'un après l'autre, jamais simultanément. Remettre WHOP_SANDBOX=false (ou
la retirer) repasse en production sans toucher au reste du code.
lib/anthropic/client.ts — appel Claude avec validation strictegenerateJson() encapsule l'appel à l'API Messages de Claude (modèle
claude-opus-5) et exige une réponse JSON strictement valide. Une réponse
peut être un succès HTTP (200) tout en étant vide ou tronquée
(stop_reason === "max_tokens") — dans les deux cas, comme en cas de JSON
invalide ou de structure incomplète (le paramètre validate fourni par
l'appelant), la fonction relance automatiquement l'appel (jusqu'à 3
tentatives) avant d'abandonner avec une erreur explicite.
Le system prompt (identique à chaque appel pour un même label) est envoyé
avec cache_control: { type: "ephemeral" }, pour que les appels fiche/quiz
qui se suivent ou tournent en parallèle le lisent en cache plutôt que de le
repayer au prix plein.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗