[{"data":1,"prerenderedAt":1972},["ShallowReactive",2],{"layout-article-sidebar-fr-laravel_vs_symfony":3,"similar-articles-fr-laravel_vs_symfony":178,"article-fr-laravel_vs_symfony":1869},{"id":4,"title":5,"body":6,"date":162,"description":163,"extension":164,"image":165,"meta":166,"navigation":167,"path":168,"seo":169,"stem":170,"tags":171,"type":175,"updatedAt":176,"__hash__":177},"articlesFr\u002Farticles\u002Ffr\u002Flaravel_vs_symfony.md","Laravel vs Symfony : quel framework apprendre en 2026 ?",{"type":7,"value":8,"toc":152},"minimark",[9,14,18,21,26,86,90,122,126,146,149],[10,11,13],"h2",{"id":12},"symfony-vs-laravel-quel-framework-apprendre-en-2026","Symfony vs Laravel : quel framework apprendre en 2026 ?",[15,16,17],"p",{},"Le débat entre Symfony et Laravel reste dynamique en 2026, chaque framework proposant des philosophies et des écosystèmes convaincants pour le développement PHP moderne.",[15,19,20],{},"Mais les deux ont de bonnes propositions dans leur champ d'application et des philosophies très différentes.",[22,23,25],"h3",{"id":24},"laravel-développement-rapide-et-écosystème-riche","Laravel – Développement rapide et écosystème riche",[27,28,29,42,74,80],"ul",{},[30,31,32,36,37,41],"li",{},[33,34,35],"strong",{},"Rapidité de mise sur le marché"," : Laravel excelle à livrer des MVP et prototypes rapidement. Sa syntaxe expressive et son CLI puissant (",[38,39,40],"code",{},"artisan",") permettent de scaffolder des applications en quelques minutes.",[30,43,44,47,48],{},[33,45,46],{},"Paquets complets"," :\n",[27,49,50,56,62,68],{},[30,51,52,55],{},[33,53,54],{},"Laravel Cashier"," – intégration transparente de Stripe pour la facturation par abonnement.",[30,57,58,61],{},[33,59,60],{},"Laravel Sail"," – environnement Docker‑Compose avec Redis, MySQL, etc., prêt à l’emploi.",[30,63,64,67],{},[33,65,66],{},"Laravel Breeze \u002F Jetstream \u002F Inertia"," – kits de démarrage pour Blade, Vue ou React, permettant un développement full‑stack sans quitter le framework.",[30,69,70,73],{},[33,71,72],{},"Laravel Octane"," – améliore les performances en s’appuyant sur RoadRunner ou FrankenPHP, réduisant la latence de démarrage à froid et supportant des charges élevées.",[30,75,76,79],{},[33,77,78],{},"Eloquent ORM"," – un constructeur de requêtes intuitif qui simplifie les relations complexes, avec des fonctionnalités intégrées comme les soft‑deletes et les timestamps.",[30,81,82,85],{},[33,83,84],{},"Communauté et écosystème"," – un vaste marché de paquets, tutoriels et conférences facilite la recherche de solutions pour presque tous les besoins.",[22,87,89],{"id":88},"symfony-architecture-dentreprise-et-flexibilité","Symfony – Architecture d’entreprise et flexibilité",[27,91,92,98,104,110,116],{},[30,93,94,97],{},[33,95,96],{},"Fondation mature"," : Sorti en 2002, Symfony alimente de nombreuses applications à grande échelle en Europe, apprécié pour sa scalabilité, sa résilience et sa sécurité.",[30,99,100,103],{},[33,101,102],{},"Composants modulaires"," : Utilisez uniquement les bundles dont vous avez besoin. L’architecture basée sur des composants permet de créer des applications minimalistes ou des systèmes complets.",[30,105,106,109],{},[33,107,108],{},"Configuration robuste"," : Prend en charge les annotations, le YAML et la configuration PHP, offrant un contrôle fin du routage, des services et de l’injection de dépendances.",[30,111,112,115],{},[33,113,114],{},"Doctrine ORM"," – un ORM puissant et riche en fonctionnalités qui rivalise avec Eloquent, offrant un mapping avancé, du caching et des migrations.",[30,117,118,121],{},[33,119,120],{},"Performance"," : Optimisé pour les architectures micro‑services ; combiné avec Messenger, Redis et des patterns événementiels, Symfony peut gérer des back‑ends complexes et à fort trafic.",[22,123,125],{"id":124},"choisir-le-bon-outil","Choisir le bon outil",[27,127,128,134,140],{},[30,129,130,133],{},[33,131,132],{},"Prototypes rapides ou startups"," – L’approche « batteries incluses » de Laravel permet de lancer une application web aboutie en une semaine.",[30,135,136,139],{},[33,137,138],{},"Systèmes complexes ou à fort trafic"," – La flexibilité et les composants d’entreprise de Symfony le rendent idéal pour les micro‑services, les API et les applications nécessitant des performances et une sécurité strictes.",[30,141,142,145],{},[33,143,144],{},"Expertise de l’équipe"," – Tenez compte des compétences existantes ; la courbe d’apprentissage de Laravel est plus douce, tandis que Symfony peut requérir une connaissance plus approfondie des patterns de conception et de la configuration.",[15,147,148],{},"En 2026, la décision ne porte pas tant sur « quel framework est supérieur » que sur l’alignement des forces du framework avec les objectifs du projet, l’expérience de l’équipe et la stratégie de maintenance à long terme. Laravel et Symfony continuent d’évoluer, et maîtriser l’un ou l’autre vous dotera de compétences précieuses dans l’écosystème PHP moderne.",[15,150,151],{},"Vous pouvez créer des applications simples et des sites web ou des applications lourdes avec les deux.",{"title":153,"searchDepth":154,"depth":154,"links":155},"",2,[156],{"id":12,"depth":154,"text":13,"children":157},[158,160,161],{"id":24,"depth":159,"text":25},3,{"id":88,"depth":159,"text":89},{"id":124,"depth":159,"text":125},"2026-03-20","Comparaison complète de Laravel et Symfony en 2026, vous aidant à choisir le bon framework PHP pour votre prochain projet.","md","\u002Farticles\u002Flaravel_vs_symfony\u002Fheader.jpeg",{},true,"\u002Farticles\u002Ffr\u002Flaravel_vs_symfony",{"title":5,"description":163},"articles\u002Ffr\u002Flaravel_vs_symfony",[172,173,174,175],"laravel","symfony","php","backend",null,"WSnegBo4KzZVkN92cZl-teIibvV2eQKw_iQuwOvfMKs",[179,1766],{"id":180,"title":181,"body":182,"date":1755,"description":1756,"extension":164,"image":1757,"meta":1758,"navigation":167,"path":1759,"seo":1760,"stem":1761,"tags":1762,"type":175,"updatedAt":176,"__hash__":1765},"articlesFr\u002Farticles\u002Ffr\u002FOllama.md","Comment disposer d'une IA locale performante sans dépendre d'un fournisseur externe ?",{"type":7,"value":183,"toc":1737},[184,189,192,196,199,202,205,209,213,216,248,251,255,258,282,286,289,292,299,314,318,321,351,354,361,365,368,372,386,389,395,399,402,455,458,469,472,478,482,493,636,639,789,795,799,802,809,914,917,921,1113,1117,1697,1704,1717,1720,1724,1727,1730,1733],[185,186,188],"h1",{"id":187},"le-problème-principal","Le problème principal",[15,190,191],{},"La question centrale est : comment intégrer une IA puissante dans notre entreprise ou nos projets sans dépendre d’un fournisseur externe, afin de garder nos données privées ?",[10,193,195],{"id":194},"la-solution-ollama","La solution : Ollama",[15,197,198],{},"Je pense qu’Ollama offre le meilleur des deux mondes. D’une part, Ollama est auto‑hébergeable, ce qui vous permet d’importer de nombreux modèles open‑source provenant de différents fournisseurs (Meta, Microsoft, Mistral AI, etc.). D’autre part, grâce à la quantisation des modèles, Ollama délivre d’excellentes performances même sur un petit serveur.",[15,200,201],{},"Ollama est disponible sur toutes les plateformes (Linux, macOS, Windows) et se télécharge en une seule commande. De plus, Ollama ne se limite pas à être un simple LLM local ; il ouvre la porte à des cas d’usage avancés (RAG, documentation, automatisation, …) et l’intégration se fait via un unique point d’accès API.",[15,203,204],{},"Ollama s’intègre à de nombreux outils : notebooks, recherches web, IDE, etc. Pour les développeurs et les professionnels, c’est un véritable changeur de jeu ; les possibilités sont impressionnantes.",[10,206,208],{"id":207},"mise-en-route","Mise en route",[22,210,212],{"id":211},"étape1-téléchargement","Étape 1 : téléchargement",[15,214,215],{},"Tout d’abord, téléchargez Ollama sur votre ordinateur ou serveur :",[217,218,222],"pre",{"className":219,"code":220,"language":221,"meta":153,"style":153},"language-bash shiki shiki-themes material-theme-lighter github-light monokai","curl -fsSL https:\u002F\u002Follama.com\u002Finstall.sh | sh\n","bash",[38,223,224],{"__ignoreMap":153},[225,226,229,233,237,241,245],"span",{"class":227,"line":228},"line",1,[225,230,232],{"class":231},"ssU3Q","curl",[225,234,236],{"class":235},"sZ_HY"," -fsSL",[225,238,240],{"class":239},"sqNgn"," https:\u002F\u002Follama.com\u002Finstall.sh",[225,242,244],{"class":243},"sBHfy"," |",[225,246,247],{"class":231}," sh\n",[15,249,250],{},"Cette commande télécharge Ollama, installe la boîte à outils associée et prépare votre environnement IA. Aucun modèle n’est fourni par défaut.",[22,252,254],{"id":253},"étape2-vérification","Étape 2 : vérification",[15,256,257],{},"Vérifiez que l’installation s’est bien déroulée :",[217,259,261],{"className":219,"code":260,"language":221,"meta":153,"style":153},"ollama serve\n# ou simplement\nollama\n",[38,262,263,271,277],{"__ignoreMap":153},[225,264,265,268],{"class":227,"line":228},[225,266,267],{"class":231},"ollama",[225,269,270],{"class":239}," serve\n",[225,272,273],{"class":227,"line":154},[225,274,276],{"class":275},"skxtS","# ou simplement\n",[225,278,279],{"class":227,"line":159},[225,280,281],{"class":231},"ollama\n",[22,283,285],{"id":284},"étape3-téléchargement-dun-modèle","Étape 3 : téléchargement d’un modèle",[15,287,288],{},"Nous devons maintenant télécharger un modèle pour pouvoir discuter !",[15,290,291],{},"Le premier modèle que nous allons utiliser est Phi‑3 de Microsoft. Ce modèle représente un excellent compromis entre performances et taille ; il fonctionne parfaitement sur un ordinateur portable avec 8 Go de RAM et convient aux tests locaux ou à une petite production interne.",[15,293,294,295,298],{},"Nous utiliserons la version ",[38,296,297],{},"phi3:3.8b",", d’une taille raisonnable (2,2 Go) et d’une fenêtre de contexte de 128 K.",[217,300,302],{"className":219,"code":301,"language":221,"meta":153,"style":153},"ollama run phi3:3.8b\n",[38,303,304],{"__ignoreMap":153},[225,305,306,308,311],{"class":227,"line":228},[225,307,267],{"class":231},[225,309,310],{"class":239}," run",[225,312,313],{"class":239}," phi3:3.8b\n",[10,315,317],{"id":316},"étape4-vérification-des-modèles","Étape 4 : vérification des modèles",[15,319,320],{},"Assurez‑vous que le modèle a bien été téléchargé et qu’il est prêt à l’emploi :",[217,322,324],{"className":219,"code":323,"language":221,"meta":153,"style":153},"ollama list   # liste les modèles téléchargés\n# ou\nollama ps     # montre les modèles en cours d’exécution\n",[38,325,326,336,341],{"__ignoreMap":153},[225,327,328,330,333],{"class":227,"line":228},[225,329,267],{"class":231},[225,331,332],{"class":239}," list",[225,334,335],{"class":275},"   # liste les modèles téléchargés\n",[225,337,338],{"class":227,"line":154},[225,339,340],{"class":275},"# ou\n",[225,342,343,345,348],{"class":227,"line":159},[225,344,267],{"class":231},[225,346,347],{"class":239}," ps",[225,349,350],{"class":275},"     # montre les modèles en cours d’exécution\n",[15,352,353],{},"Vous devriez voir quelque chose de similaire :",[15,355,356],{},[357,358],"img",{"alt":359,"src":360},"ollama terminal","\u002Farticles\u002Follama\u002Fterminal.png",[10,362,364],{"id":363},"utilisation","Utilisation",[15,366,367],{},"Une fois le modèle prêt, plusieurs méthodes permettent d’interagir avec lui :",[22,369,371],{"id":370},"via-le-terminal","Via le terminal",[217,373,375],{"className":219,"code":374,"language":221,"meta":153,"style":153},"ollama run phi3\n",[38,376,377],{"__ignoreMap":153},[225,378,379,381,383],{"class":227,"line":228},[225,380,267],{"class":231},[225,382,310],{"class":239},[225,384,385],{"class":239}," phi3\n",[15,387,388],{},"Vous obtenez alors un prompt interactif pour discuter avec le modèle.",[15,390,391],{},[357,392],{"alt":393,"src":394},"ollama chat phi3","\u002Farticles\u002Follama\u002Fchat-phi3.png",[22,396,398],{"id":397},"via-curl","Via cURL",[15,400,401],{},"Vous pouvez envoyer des requêtes HTTP avec cURL :",[217,403,405],{"className":219,"code":404,"language":221,"meta":153,"style":153},"curl -X POST http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate -d '{\n  \"model\": \"phi3:3.8b\",\n  \"prompt\": \"Bonjour, comment ça va ?\",\n  \"stream\": false\n}'\n",[38,406,407,430,435,440,446],{"__ignoreMap":153},[225,408,409,411,414,417,420,423,427],{"class":227,"line":228},[225,410,232],{"class":231},[225,412,413],{"class":235}," -X",[225,415,416],{"class":239}," POST",[225,418,419],{"class":239}," http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate",[225,421,422],{"class":235}," -d",[225,424,426],{"class":425},"ssona"," '",[225,428,429],{"class":239},"{\n",[225,431,432],{"class":227,"line":154},[225,433,434],{"class":239},"  \"model\": \"phi3:3.8b\",\n",[225,436,437],{"class":227,"line":159},[225,438,439],{"class":239},"  \"prompt\": \"Bonjour, comment ça va ?\",\n",[225,441,443],{"class":227,"line":442},4,[225,444,445],{"class":239},"  \"stream\": false\n",[225,447,449,452],{"class":227,"line":448},5,[225,450,451],{"class":239},"}",[225,453,454],{"class":425},"'\n",[15,456,457],{},"Cette approche est très pratique pour l’intégrer à des scripts bash ou créer votre propre interface de chat.",[15,459,460,461,464,465,468],{},"Le paramètre ",[38,462,463],{},"stream"," est crucial ; réglé à ",[38,466,467],{},"true",", il permet d’obtenir des réponses en temps réel, à l’image de ChatGPT.",[15,470,471],{},"Nous pouvons imaginer de nombreux cas d’usage : génération de code, documentation, tests automatisés, etc.",[15,473,474],{},[357,475],{"alt":476,"src":477},"ollama chat phi3 bash","\u002Farticles\u002Follama\u002Fchat-phi3-bash.png",[22,479,481],{"id":480},"via-python","Via Python",[15,483,484,485,492],{},"Ollama propose une bibliothèque Python officielle, très simple d’utilisation. Vous la trouverez sur ",[486,487,491],"a",{"href":488,"rel":489},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama-python",[490],"nofollow","GitHub",".",[217,494,498],{"className":495,"code":496,"language":497,"meta":153,"style":153},"language-python shiki shiki-themes material-theme-lighter github-light monokai","from ollama import chat\n\nresponse = chat(\n    model='phi3',\n    messages=[{'role': 'user', 'content': 'Bonjour !'}],\n)\nprint(response.message.content)\n","python",[38,499,500,516,521,537,556,605,611],{"__ignoreMap":153},[225,501,502,506,510,513],{"class":227,"line":228},[225,503,505],{"class":504},"sLY2T","from",[225,507,509],{"class":508},"s_bef"," ollama ",[225,511,512],{"class":504},"import",[225,514,515],{"class":508}," chat\n",[225,517,518],{"class":227,"line":154},[225,519,520],{"emptyLinePlaceholder":167},"\n",[225,522,523,526,529,533],{"class":227,"line":159},[225,524,525],{"class":508},"response ",[225,527,528],{"class":243},"=",[225,530,532],{"class":531},"sSgJ6"," chat",[225,534,536],{"class":535},"sWZ6u","(\n",[225,538,539,543,545,548,551,553],{"class":227,"line":442},[225,540,542],{"class":541},"s8oAg","    model",[225,544,528],{"class":243},[225,546,547],{"class":425},"'",[225,549,550],{"class":239},"phi3",[225,552,547],{"class":425},[225,554,555],{"class":535},",\n",[225,557,558,561,563,566,568,571,573,576,578,581,583,586,588,591,593,595,597,600,602],{"class":227,"line":448},[225,559,560],{"class":541},"    messages",[225,562,528],{"class":243},[225,564,565],{"class":535},"[{",[225,567,547],{"class":425},[225,569,570],{"class":239},"role",[225,572,547],{"class":425},[225,574,575],{"class":535},":",[225,577,426],{"class":425},[225,579,580],{"class":239},"user",[225,582,547],{"class":425},[225,584,585],{"class":535},",",[225,587,426],{"class":425},[225,589,590],{"class":239},"content",[225,592,547],{"class":425},[225,594,575],{"class":535},[225,596,426],{"class":425},[225,598,599],{"class":239},"Bonjour !",[225,601,547],{"class":425},[225,603,604],{"class":535},"}],\n",[225,606,608],{"class":227,"line":607},6,[225,609,610],{"class":535},")\n",[225,612,614,618,621,624,626,630,632,634],{"class":227,"line":613},7,[225,615,617],{"class":616},"sOhXc","print",[225,619,620],{"class":535},"(",[225,622,623],{"class":531},"response",[225,625,492],{"class":535},[225,627,629],{"class":628},"saQHy","message",[225,631,492],{"class":535},[225,633,590],{"class":628},[225,635,610],{"class":535},[15,637,638],{},"Vous pouvez également appeler directement l’API HTTP :",[217,640,642],{"className":495,"code":641,"language":497,"meta":153,"style":153},"import requests\n\nollama_url = \"http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate\"\n\nres = requests.post(ollama_url, json={\n    \"model\": \"phi3\",\n    \"prompt\": \"Bonjour, comment ça va ?\",\n    \"stream\": False\n})\n\nprint(res.json())\n",[38,643,644,651,655,671,675,704,725,745,760,766,771],{"__ignoreMap":153},[225,645,646,648],{"class":227,"line":228},[225,647,512],{"class":504},[225,649,650],{"class":508}," requests\n",[225,652,653],{"class":227,"line":154},[225,654,520],{"emptyLinePlaceholder":167},[225,656,657,660,662,665,668],{"class":227,"line":159},[225,658,659],{"class":508},"ollama_url ",[225,661,528],{"class":243},[225,663,664],{"class":425}," \"",[225,666,667],{"class":239},"http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate",[225,669,670],{"class":425},"\"\n",[225,672,673],{"class":227,"line":442},[225,674,520],{"emptyLinePlaceholder":167},[225,676,677,680,682,685,687,690,692,695,697,700,702],{"class":227,"line":448},[225,678,679],{"class":508},"res ",[225,681,528],{"class":243},[225,683,684],{"class":508}," requests",[225,686,492],{"class":535},[225,688,689],{"class":531},"post",[225,691,620],{"class":535},[225,693,694],{"class":531},"ollama_url",[225,696,585],{"class":535},[225,698,699],{"class":541}," json",[225,701,528],{"class":243},[225,703,429],{"class":535},[225,705,706,709,712,715,717,719,721,723],{"class":227,"line":607},[225,707,708],{"class":425},"    \"",[225,710,711],{"class":239},"model",[225,713,714],{"class":425},"\"",[225,716,575],{"class":535},[225,718,664],{"class":425},[225,720,550],{"class":239},[225,722,714],{"class":425},[225,724,555],{"class":535},[225,726,727,729,732,734,736,738,741,743],{"class":227,"line":613},[225,728,708],{"class":425},[225,730,731],{"class":239},"prompt",[225,733,714],{"class":425},[225,735,575],{"class":535},[225,737,664],{"class":425},[225,739,740],{"class":239},"Bonjour, comment ça va ?",[225,742,714],{"class":425},[225,744,555],{"class":535},[225,746,748,750,752,754,756],{"class":227,"line":747},8,[225,749,708],{"class":425},[225,751,463],{"class":239},[225,753,714],{"class":425},[225,755,575],{"class":535},[225,757,759],{"class":758},"sIz4-"," False\n",[225,761,763],{"class":227,"line":762},9,[225,764,765],{"class":535},"})\n",[225,767,769],{"class":227,"line":768},10,[225,770,520],{"emptyLinePlaceholder":167},[225,772,774,776,778,781,783,786],{"class":227,"line":773},11,[225,775,617],{"class":616},[225,777,620],{"class":535},[225,779,780],{"class":531},"res",[225,782,492],{"class":535},[225,784,785],{"class":531},"json",[225,787,788],{"class":535},"())\n",[15,790,791,792,492],{},"Si Ollama tourne localement, la bibliothèque Python suffit. En cas d’exécution dans un conteneur distant, il suffit d’ajuster l’URL ou d’utiliser la méthode ",[38,793,794],{},"requests",[10,796,798],{"id":797},"utilisation-dollama-avec-docker","Utilisation d’Ollama avec Docker",[15,800,801],{},"À mon avis, Docker est la meilleure solution pour déployer Ollama en production. Cela permet d’obtenir d’excellentes performances même sur un serveur modeste, tout en restant simple à déployer.",[15,803,804,805,808],{},"Voici un exemple de fichier ",[38,806,807],{},"docker‑compose.yml"," :",[217,810,814],{"className":811,"code":812,"language":813,"meta":153,"style":153},"language-yaml shiki shiki-themes material-theme-lighter github-light monokai","services:\n  ollama:\n    image: ollama\u002Follama\n    container_name: ollama\n    ports:\n      - \"11434:11434\"\n    volumes:\n      - ollama_data:\u002Froot\u002F.ollama\n    restart: unless-stopped\n\nvolumes:\n  ollama_data:\n","yaml",[38,815,816,825,832,842,852,859,871,878,885,895,899,906],{"__ignoreMap":153},[225,817,818,822],{"class":227,"line":228},[225,819,821],{"class":820},"s5svD","services",[225,823,824],{"class":535},":\n",[225,826,827,830],{"class":227,"line":154},[225,828,829],{"class":820},"  ollama",[225,831,824],{"class":535},[225,833,834,837,839],{"class":227,"line":159},[225,835,836],{"class":820},"    image",[225,838,575],{"class":535},[225,840,841],{"class":239}," ollama\u002Follama\n",[225,843,844,847,849],{"class":227,"line":442},[225,845,846],{"class":820},"    container_name",[225,848,575],{"class":535},[225,850,851],{"class":239}," ollama\n",[225,853,854,857],{"class":227,"line":448},[225,855,856],{"class":820},"    ports",[225,858,824],{"class":535},[225,860,861,864,866,869],{"class":227,"line":607},[225,862,863],{"class":535},"      -",[225,865,664],{"class":425},[225,867,868],{"class":239},"11434:11434",[225,870,670],{"class":425},[225,872,873,876],{"class":227,"line":613},[225,874,875],{"class":820},"    volumes",[225,877,824],{"class":535},[225,879,880,882],{"class":227,"line":747},[225,881,863],{"class":535},[225,883,884],{"class":239}," ollama_data:\u002Froot\u002F.ollama\n",[225,886,887,890,892],{"class":227,"line":762},[225,888,889],{"class":820},"    restart",[225,891,575],{"class":535},[225,893,894],{"class":239}," unless-stopped\n",[225,896,897],{"class":227,"line":768},[225,898,520],{"emptyLinePlaceholder":167},[225,900,901,904],{"class":227,"line":773},[225,902,903],{"class":820},"volumes",[225,905,824],{"class":535},[225,907,909,912],{"class":227,"line":908},12,[225,910,911],{"class":820},"  ollama_data",[225,913,824],{"class":535},[15,915,916],{},"Cette image officielle, disponible sur Docker Hub, est optimisée pour la performance.",[10,918,920],{"id":919},"exemple-de-structure-de-projet-avec-ollama","Exemple de structure de projet avec Ollama",[217,922,924],{"className":219,"code":923,"language":221,"meta":153,"style":153},".\n├── __pycache__\n│   ├── locustfile.cpython-311.pyc\n│   └── main.cpython-314.pyc\n├── docker-compose.yml\n├── Dockerfile\n├── get_reportings.py\n├── jmeter\n│   ├── __pycache__\n│   ├── plan.jmx\n│   └── results.jtl\n├── locustfile.py\n├── main.py\n├── prometheus\n│   └── prometheus.yml\n├── pytest.ini\n├── README.md\n├── reports\n├── requirements.txt\n├── sonar-project.properties\n└── tests\n    ├── __pycache__\n    └── test_api.py\n",[38,925,926,931,939,950,960,967,974,981,988,996,1005,1014,1021,1029,1037,1047,1055,1063,1071,1079,1087,1096,1104],{"__ignoreMap":153},[225,927,928],{"class":227,"line":228},[225,929,930],{"class":616},".\n",[225,932,933,936],{"class":227,"line":154},[225,934,935],{"class":231},"├──",[225,937,938],{"class":239}," __pycache__\n",[225,940,941,944,947],{"class":227,"line":159},[225,942,943],{"class":231},"│  ",[225,945,946],{"class":239}," ├──",[225,948,949],{"class":239}," locustfile.cpython-311.pyc\n",[225,951,952,954,957],{"class":227,"line":442},[225,953,943],{"class":231},[225,955,956],{"class":239}," └──",[225,958,959],{"class":239}," main.cpython-314.pyc\n",[225,961,962,964],{"class":227,"line":448},[225,963,935],{"class":231},[225,965,966],{"class":239}," docker-compose.yml\n",[225,968,969,971],{"class":227,"line":607},[225,970,935],{"class":231},[225,972,973],{"class":239}," Dockerfile\n",[225,975,976,978],{"class":227,"line":613},[225,977,935],{"class":231},[225,979,980],{"class":239}," get_reportings.py\n",[225,982,983,985],{"class":227,"line":747},[225,984,935],{"class":231},[225,986,987],{"class":239}," jmeter\n",[225,989,990,992,994],{"class":227,"line":762},[225,991,943],{"class":231},[225,993,946],{"class":239},[225,995,938],{"class":239},[225,997,998,1000,1002],{"class":227,"line":768},[225,999,943],{"class":231},[225,1001,946],{"class":239},[225,1003,1004],{"class":239}," plan.jmx\n",[225,1006,1007,1009,1011],{"class":227,"line":773},[225,1008,943],{"class":231},[225,1010,956],{"class":239},[225,1012,1013],{"class":239}," results.jtl\n",[225,1015,1016,1018],{"class":227,"line":908},[225,1017,935],{"class":231},[225,1019,1020],{"class":239}," locustfile.py\n",[225,1022,1024,1026],{"class":227,"line":1023},13,[225,1025,935],{"class":231},[225,1027,1028],{"class":239}," main.py\n",[225,1030,1032,1034],{"class":227,"line":1031},14,[225,1033,935],{"class":231},[225,1035,1036],{"class":239}," prometheus\n",[225,1038,1040,1042,1044],{"class":227,"line":1039},15,[225,1041,943],{"class":231},[225,1043,956],{"class":239},[225,1045,1046],{"class":239}," prometheus.yml\n",[225,1048,1050,1052],{"class":227,"line":1049},16,[225,1051,935],{"class":231},[225,1053,1054],{"class":239}," pytest.ini\n",[225,1056,1058,1060],{"class":227,"line":1057},17,[225,1059,935],{"class":231},[225,1061,1062],{"class":239}," README.md\n",[225,1064,1066,1068],{"class":227,"line":1065},18,[225,1067,935],{"class":231},[225,1069,1070],{"class":239}," reports\n",[225,1072,1074,1076],{"class":227,"line":1073},19,[225,1075,935],{"class":231},[225,1077,1078],{"class":239}," requirements.txt\n",[225,1080,1082,1084],{"class":227,"line":1081},20,[225,1083,935],{"class":231},[225,1085,1086],{"class":239}," sonar-project.properties\n",[225,1088,1090,1093],{"class":227,"line":1089},21,[225,1091,1092],{"class":231},"└──",[225,1094,1095],{"class":239}," tests\n",[225,1097,1099,1102],{"class":227,"line":1098},22,[225,1100,1101],{"class":231},"    ├──",[225,1103,938],{"class":239},[225,1105,1107,1110],{"class":227,"line":1106},23,[225,1108,1109],{"class":231},"    └──",[225,1111,1112],{"class":239}," test_api.py\n",[10,1114,1116],{"id":1115},"le-fichier-principal-illustrant-la-puissance-dollama","Le fichier principal illustrant la puissance d’Ollama",[217,1118,1120],{"className":495,"code":1119,"language":497,"meta":153,"style":153},"import requests\nimport datetime\n\nquery = \"http_requests_created[1m]\"\nollama_url = \"http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate\"\nurl = f\"http:\u002F\u002Flocalhost:9090\u002Fapi\u002Fv1\u002Fquery?query={query}\"\n\nresponse = requests.get(url).json()\n\ntry:\n    with open(\"jmeter\u002Fresults.jtl\", \"r\", encoding=\"utf-8\") as f:\n        jmeter_content = f.read()\nexcept FileNotFoundError:\n    print(\"Fichier de résultats JMeter introuvable.\\n\")\n    jmeter_content = \"Aucun résultat JMeter disponible.\"\n\nprompt = f\"\"\"\nAnalyse ces métriques provenant de Prometheus :\n\n{response}\n\nFournis‑moi un rapport avec la structure suivante :\n\n# titre\n\n## Analyse des métriques provenant de Prometheus.\n\n### Votre analyse (max 5‑6 lignes)\n\n### Comment améliorer ou corriger (max 2 lignes)\n\"\"\"\n\nres = requests.post(ollama_url, json={\n    \"model\": \"phi3\",\n    \"prompt\": prompt,\n    \"stream\": False\n})\n\nnow = datetime.datetime.now().strftime(\"%Y-%m-%d_%H-%M\")\n\nwith open(f\"reports\u002Freport_{now}.md\", \"w\", encoding=\"utf-8\") as f:\n    f.write(\"Rapport Prometheus\\n\\n\")\n    f.write(res.json()['response'])\n    f.write(\"\\n\\n\")\n",[38,1121,1122,1128,1135,1139,1153,1165,1190,1194,1220,1224,1231,1281,1297,1308,1328,1342,1346,1358,1363,1367,1376,1380,1385,1389,1395,1400,1406,1411,1417,1422,1428,1433,1438,1463,1482,1498,1511,1516,1521,1565,1570,1624,1649,1678],{"__ignoreMap":153},[225,1123,1124,1126],{"class":227,"line":228},[225,1125,512],{"class":504},[225,1127,650],{"class":508},[225,1129,1130,1132],{"class":227,"line":154},[225,1131,512],{"class":504},[225,1133,1134],{"class":508}," datetime\n",[225,1136,1137],{"class":227,"line":159},[225,1138,520],{"emptyLinePlaceholder":167},[225,1140,1141,1144,1146,1148,1151],{"class":227,"line":442},[225,1142,1143],{"class":508},"query ",[225,1145,528],{"class":243},[225,1147,664],{"class":425},[225,1149,1150],{"class":239},"http_requests_created[1m]",[225,1152,670],{"class":425},[225,1154,1155,1157,1159,1161,1163],{"class":227,"line":448},[225,1156,659],{"class":508},[225,1158,528],{"class":243},[225,1160,664],{"class":425},[225,1162,667],{"class":239},[225,1164,670],{"class":425},[225,1166,1167,1170,1172,1176,1179,1183,1186,1188],{"class":227,"line":607},[225,1168,1169],{"class":508},"url ",[225,1171,528],{"class":243},[225,1173,1175],{"class":1174},"sWNEL"," f",[225,1177,1178],{"class":239},"\"http:\u002F\u002Flocalhost:9090\u002Fapi\u002Fv1\u002Fquery?query=",[225,1180,1182],{"class":1181},"sYBsF","{",[225,1184,1185],{"class":508},"query",[225,1187,451],{"class":1181},[225,1189,670],{"class":239},[225,1191,1192],{"class":227,"line":613},[225,1193,520],{"emptyLinePlaceholder":167},[225,1195,1196,1198,1200,1202,1204,1207,1209,1212,1215,1217],{"class":227,"line":747},[225,1197,525],{"class":508},[225,1199,528],{"class":243},[225,1201,684],{"class":508},[225,1203,492],{"class":535},[225,1205,1206],{"class":531},"get",[225,1208,620],{"class":535},[225,1210,1211],{"class":531},"url",[225,1213,1214],{"class":535},").",[225,1216,785],{"class":531},[225,1218,1219],{"class":535},"()\n",[225,1221,1222],{"class":227,"line":762},[225,1223,520],{"emptyLinePlaceholder":167},[225,1225,1226,1229],{"class":227,"line":768},[225,1227,1228],{"class":504},"try",[225,1230,824],{"class":535},[225,1232,1233,1236,1239,1241,1243,1246,1248,1250,1252,1255,1257,1259,1262,1264,1266,1269,1271,1274,1277,1279],{"class":227,"line":773},[225,1234,1235],{"class":504},"    with",[225,1237,1238],{"class":616}," open",[225,1240,620],{"class":535},[225,1242,714],{"class":425},[225,1244,1245],{"class":239},"jmeter\u002Fresults.jtl",[225,1247,714],{"class":425},[225,1249,585],{"class":535},[225,1251,664],{"class":425},[225,1253,1254],{"class":239},"r",[225,1256,714],{"class":425},[225,1258,585],{"class":535},[225,1260,1261],{"class":541}," encoding",[225,1263,528],{"class":243},[225,1265,714],{"class":425},[225,1267,1268],{"class":239},"utf-8",[225,1270,714],{"class":425},[225,1272,1273],{"class":535},")",[225,1275,1276],{"class":504}," as",[225,1278,1175],{"class":508},[225,1280,824],{"class":535},[225,1282,1283,1286,1288,1290,1292,1295],{"class":227,"line":908},[225,1284,1285],{"class":508},"        jmeter_content ",[225,1287,528],{"class":243},[225,1289,1175],{"class":508},[225,1291,492],{"class":535},[225,1293,1294],{"class":531},"read",[225,1296,1219],{"class":535},[225,1298,1299,1302,1306],{"class":227,"line":1023},[225,1300,1301],{"class":504},"except",[225,1303,1305],{"class":1304},"sYDhL"," FileNotFoundError",[225,1307,824],{"class":535},[225,1309,1310,1313,1315,1317,1320,1324,1326],{"class":227,"line":1031},[225,1311,1312],{"class":616},"    print",[225,1314,620],{"class":535},[225,1316,714],{"class":425},[225,1318,1319],{"class":239},"Fichier de résultats JMeter introuvable.",[225,1321,1323],{"class":1322},"sE9CP","\\n",[225,1325,714],{"class":425},[225,1327,610],{"class":535},[225,1329,1330,1333,1335,1337,1340],{"class":227,"line":1039},[225,1331,1332],{"class":508},"    jmeter_content ",[225,1334,528],{"class":243},[225,1336,664],{"class":425},[225,1338,1339],{"class":239},"Aucun résultat JMeter disponible.",[225,1341,670],{"class":425},[225,1343,1344],{"class":227,"line":1049},[225,1345,520],{"emptyLinePlaceholder":167},[225,1347,1348,1351,1353,1355],{"class":227,"line":1057},[225,1349,1350],{"class":508},"prompt ",[225,1352,528],{"class":243},[225,1354,1175],{"class":1174},[225,1356,1357],{"class":239},"\"\"\"\n",[225,1359,1360],{"class":227,"line":1065},[225,1361,1362],{"class":239},"Analyse ces métriques provenant de Prometheus :\n",[225,1364,1365],{"class":227,"line":1073},[225,1366,520],{"emptyLinePlaceholder":167},[225,1368,1369,1371,1373],{"class":227,"line":1081},[225,1370,1182],{"class":1181},[225,1372,623],{"class":508},[225,1374,1375],{"class":1181},"}\n",[225,1377,1378],{"class":227,"line":1089},[225,1379,520],{"emptyLinePlaceholder":167},[225,1381,1382],{"class":227,"line":1098},[225,1383,1384],{"class":239},"Fournis‑moi un rapport avec la structure suivante :\n",[225,1386,1387],{"class":227,"line":1106},[225,1388,520],{"emptyLinePlaceholder":167},[225,1390,1392],{"class":227,"line":1391},24,[225,1393,1394],{"class":239},"# titre\n",[225,1396,1398],{"class":227,"line":1397},25,[225,1399,520],{"emptyLinePlaceholder":167},[225,1401,1403],{"class":227,"line":1402},26,[225,1404,1405],{"class":239},"## Analyse des métriques provenant de Prometheus.\n",[225,1407,1409],{"class":227,"line":1408},27,[225,1410,520],{"emptyLinePlaceholder":167},[225,1412,1414],{"class":227,"line":1413},28,[225,1415,1416],{"class":239},"### Votre analyse (max 5‑6 lignes)\n",[225,1418,1420],{"class":227,"line":1419},29,[225,1421,520],{"emptyLinePlaceholder":167},[225,1423,1425],{"class":227,"line":1424},30,[225,1426,1427],{"class":239},"### Comment améliorer ou corriger (max 2 lignes)\n",[225,1429,1431],{"class":227,"line":1430},31,[225,1432,1357],{"class":239},[225,1434,1436],{"class":227,"line":1435},32,[225,1437,520],{"emptyLinePlaceholder":167},[225,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461],{"class":227,"line":1440},33,[225,1442,679],{"class":508},[225,1444,528],{"class":243},[225,1446,684],{"class":508},[225,1448,492],{"class":535},[225,1450,689],{"class":531},[225,1452,620],{"class":535},[225,1454,694],{"class":531},[225,1456,585],{"class":535},[225,1458,699],{"class":541},[225,1460,528],{"class":243},[225,1462,429],{"class":535},[225,1464,1466,1468,1470,1472,1474,1476,1478,1480],{"class":227,"line":1465},34,[225,1467,708],{"class":425},[225,1469,711],{"class":239},[225,1471,714],{"class":425},[225,1473,575],{"class":535},[225,1475,664],{"class":425},[225,1477,550],{"class":239},[225,1479,714],{"class":425},[225,1481,555],{"class":535},[225,1483,1485,1487,1489,1491,1493,1496],{"class":227,"line":1484},35,[225,1486,708],{"class":425},[225,1488,731],{"class":239},[225,1490,714],{"class":425},[225,1492,575],{"class":535},[225,1494,1495],{"class":531}," prompt",[225,1497,555],{"class":535},[225,1499,1501,1503,1505,1507,1509],{"class":227,"line":1500},36,[225,1502,708],{"class":425},[225,1504,463],{"class":239},[225,1506,714],{"class":425},[225,1508,575],{"class":535},[225,1510,759],{"class":758},[225,1512,1514],{"class":227,"line":1513},37,[225,1515,765],{"class":535},[225,1517,1519],{"class":227,"line":1518},38,[225,1520,520],{"emptyLinePlaceholder":167},[225,1522,1524,1527,1529,1532,1534,1537,1539,1542,1545,1548,1550,1552,1555,1558,1561,1563],{"class":227,"line":1523},39,[225,1525,1526],{"class":508},"now ",[225,1528,528],{"class":243},[225,1530,1531],{"class":508}," datetime",[225,1533,492],{"class":535},[225,1535,1536],{"class":628},"datetime",[225,1538,492],{"class":535},[225,1540,1541],{"class":531},"now",[225,1543,1544],{"class":535},"().",[225,1546,1547],{"class":531},"strftime",[225,1549,620],{"class":535},[225,1551,714],{"class":425},[225,1553,1554],{"class":239},"%Y-%m-",[225,1556,1557],{"class":1181},"%d",[225,1559,1560],{"class":239},"_%H-%M",[225,1562,714],{"class":425},[225,1564,610],{"class":535},[225,1566,1568],{"class":227,"line":1567},40,[225,1569,520],{"emptyLinePlaceholder":167},[225,1571,1573,1576,1578,1580,1583,1586,1588,1590,1592,1595,1597,1599,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622],{"class":227,"line":1572},41,[225,1574,1575],{"class":504},"with",[225,1577,1238],{"class":616},[225,1579,620],{"class":535},[225,1581,1582],{"class":1174},"f",[225,1584,1585],{"class":239},"\"reports\u002Freport_",[225,1587,1182],{"class":1181},[225,1589,1541],{"class":531},[225,1591,451],{"class":1181},[225,1593,1594],{"class":239},".md\"",[225,1596,585],{"class":535},[225,1598,664],{"class":425},[225,1600,1601],{"class":239},"w",[225,1603,714],{"class":425},[225,1605,585],{"class":535},[225,1607,1261],{"class":541},[225,1609,528],{"class":243},[225,1611,714],{"class":425},[225,1613,1268],{"class":239},[225,1615,714],{"class":425},[225,1617,1273],{"class":535},[225,1619,1276],{"class":504},[225,1621,1175],{"class":508},[225,1623,824],{"class":535},[225,1625,1627,1630,1632,1635,1637,1639,1642,1645,1647],{"class":227,"line":1626},42,[225,1628,1629],{"class":508},"    f",[225,1631,492],{"class":535},[225,1633,1634],{"class":531},"write",[225,1636,620],{"class":535},[225,1638,714],{"class":425},[225,1640,1641],{"class":239},"Rapport Prometheus",[225,1643,1644],{"class":1322},"\\n\\n",[225,1646,714],{"class":425},[225,1648,610],{"class":535},[225,1650,1652,1654,1656,1658,1660,1662,1664,1666,1669,1671,1673,1675],{"class":227,"line":1651},43,[225,1653,1629],{"class":508},[225,1655,492],{"class":535},[225,1657,1634],{"class":531},[225,1659,620],{"class":535},[225,1661,780],{"class":531},[225,1663,492],{"class":535},[225,1665,785],{"class":531},[225,1667,1668],{"class":535},"()[",[225,1670,547],{"class":425},[225,1672,623],{"class":239},[225,1674,547],{"class":425},[225,1676,1677],{"class":535},"])\n",[225,1679,1681,1683,1685,1687,1689,1691,1693,1695],{"class":227,"line":1680},44,[225,1682,1629],{"class":508},[225,1684,492],{"class":535},[225,1686,1634],{"class":531},[225,1688,620],{"class":535},[225,1690,714],{"class":425},[225,1692,1644],{"class":1322},[225,1694,714],{"class":425},[225,1696,610],{"class":535},[15,1698,1699,1700,1703],{},"Nous utilisons l’URL locale d’Ollama car le projet tourne sous Docker ; le script s’exécute sur ma machine, pas dans le conteneur, d’où l’usage de ",[38,1701,1702],{},"localhost"," au lieu du nom du conteneur.",[15,1705,1706,1707,1709,1710,1713,1714,492],{},"Ce script récupère des données depuis JMeter et Prometheus, envoie un prompt simple à Ollama (modèle ",[38,1708,297],{},") et génère un rapport au format Markdown, stocké dans le répertoire ",[38,1711,1712],{},"reports\u002F"," sous le nom ",[38,1715,1716],{},"report_YYYY‑MM‑DD_HH‑MM.md",[15,1718,1719],{},"Il s’agit d’un exemple très basique, mais il montre bien ce que l’on peut faire avec Ollama.",[10,1721,1723],{"id":1722},"conclusion","Conclusion",[15,1725,1726],{},"Pour moi, Ollama est un outil exceptionnel pour les développeurs et les professionnels qui souhaitent exploiter des LLM localement, sans connexion Internet et avec une interface ultra‑simple.",[15,1728,1729],{},"Il est totalement gratuit et open‑source ; vous pouvez l’utiliser pour des projets sérieux ou simplement pour le plaisir. Les possibilités sont très impressionnantes.",[15,1731,1732],{},"Je n’ai pas encore exploré toutes les potentialités d’Ollama, mais je prévois de le faire à l’avenir : par exemple, l’associer à Open‑Claw, Claude, ou à tout autre fournisseur compatible.",[1734,1735,1736],"style",{},"html pre.shiki code .ssU3Q, html code.shiki .ssU3Q{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#A6E22E}html pre.shiki code .sZ_HY, html code.shiki .sZ_HY{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#AE81FF}html pre.shiki code .sqNgn, html code.shiki .sqNgn{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#E6DB74}html pre.shiki code .sBHfy, html code.shiki .sBHfy{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F92672}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .skxtS, html code.shiki .skxtS{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#88846F;--shiki-dark-font-style:inherit}html pre.shiki code .ssona, html code.shiki .ssona{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#E6DB74}html pre.shiki code .sLY2T, html code.shiki .sLY2T{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F92672;--shiki-dark-font-style:inherit}html pre.shiki code .s_bef, html code.shiki .s_bef{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#F8F8F2}html pre.shiki code .sSgJ6, html code.shiki .sSgJ6{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#F8F8F2}html pre.shiki code .sWZ6u, html code.shiki .sWZ6u{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#F8F8F2}html pre.shiki code .s8oAg, html code.shiki .s8oAg{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FD971F;--shiki-dark-font-style:italic}html pre.shiki code .sOhXc, html code.shiki .sOhXc{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#66D9EF}html pre.shiki code .saQHy, html code.shiki .saQHy{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#F8F8F2}html pre.shiki code .sIz4-, html code.shiki .sIz4-{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#AE81FF}html pre.shiki code .s5svD, html code.shiki .s5svD{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#F92672}html pre.shiki code .sWNEL, html code.shiki .sWNEL{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .sYBsF, html code.shiki .sYBsF{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#AE81FF}html pre.shiki code .sYDhL, html code.shiki .sYDhL{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .sE9CP, html code.shiki .sE9CP{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#AE81FF}",{"title":153,"searchDepth":154,"depth":154,"links":1738},[1739,1740,1745,1746,1751,1752,1753,1754],{"id":194,"depth":154,"text":195},{"id":207,"depth":154,"text":208,"children":1741},[1742,1743,1744],{"id":211,"depth":159,"text":212},{"id":253,"depth":159,"text":254},{"id":284,"depth":159,"text":285},{"id":316,"depth":154,"text":317},{"id":363,"depth":154,"text":364,"children":1747},[1748,1749,1750],{"id":370,"depth":159,"text":371},{"id":397,"depth":159,"text":398},{"id":480,"depth":159,"text":481},{"id":797,"depth":154,"text":798},{"id":919,"depth":154,"text":920},{"id":1115,"depth":154,"text":1116},{"id":1722,"depth":154,"text":1723},"2026-03-15","Comment obtenir une IA excellente pour votre entreprise ou vos projets sans recourir à un fournisseur externe, tout en protégeant vos données ?","\u002Farticles\u002Follama\u002Follama.png",{},"\u002Farticles\u002Ffr\u002Follama",{"title":181,"description":1756},"articles\u002Ffr\u002FOllama",[1763,267,1764,497,221],"ai","docker","LmLCwy-ma_xaWWZhwn-WzG7SDIXgEmCKnbkbPc4gZ4k",{"id":4,"title":5,"body":1767,"date":162,"description":163,"extension":164,"image":165,"meta":1866,"navigation":167,"path":168,"seo":1867,"stem":170,"tags":1868,"type":175,"updatedAt":176,"__hash__":177},{"type":7,"value":1768,"toc":1859},[1769,1771,1773,1775,1777,1815,1817,1839,1841,1855,1857],[10,1770,13],{"id":12},[15,1772,17],{},[15,1774,20],{},[22,1776,25],{"id":24},[27,1778,1779,1785,1807,1811],{},[30,1780,1781,36,1783,41],{},[33,1782,35],{},[38,1784,40],{},[30,1786,1787,47,1789],{},[33,1788,46],{},[27,1790,1791,1795,1799,1803],{},[30,1792,1793,55],{},[33,1794,54],{},[30,1796,1797,61],{},[33,1798,60],{},[30,1800,1801,67],{},[33,1802,66],{},[30,1804,1805,73],{},[33,1806,72],{},[30,1808,1809,79],{},[33,1810,78],{},[30,1812,1813,85],{},[33,1814,84],{},[22,1816,89],{"id":88},[27,1818,1819,1823,1827,1831,1835],{},[30,1820,1821,97],{},[33,1822,96],{},[30,1824,1825,103],{},[33,1826,102],{},[30,1828,1829,109],{},[33,1830,108],{},[30,1832,1833,115],{},[33,1834,114],{},[30,1836,1837,121],{},[33,1838,120],{},[22,1840,125],{"id":124},[27,1842,1843,1847,1851],{},[30,1844,1845,133],{},[33,1846,132],{},[30,1848,1849,139],{},[33,1850,138],{},[30,1852,1853,145],{},[33,1854,144],{},[15,1856,148],{},[15,1858,151],{},{"title":153,"searchDepth":154,"depth":154,"links":1860},[1861],{"id":12,"depth":154,"text":13,"children":1862},[1863,1864,1865],{"id":24,"depth":159,"text":25},{"id":88,"depth":159,"text":89},{"id":124,"depth":159,"text":125},{},{"title":5,"description":163},[172,173,174,175],{"id":4,"title":5,"body":1870,"date":162,"description":163,"extension":164,"image":165,"meta":1969,"navigation":167,"path":168,"seo":1970,"stem":170,"tags":1971,"type":175,"updatedAt":176,"__hash__":177},{"type":7,"value":1871,"toc":1962},[1872,1874,1876,1878,1880,1918,1920,1942,1944,1958,1960],[10,1873,13],{"id":12},[15,1875,17],{},[15,1877,20],{},[22,1879,25],{"id":24},[27,1881,1882,1888,1910,1914],{},[30,1883,1884,36,1886,41],{},[33,1885,35],{},[38,1887,40],{},[30,1889,1890,47,1892],{},[33,1891,46],{},[27,1893,1894,1898,1902,1906],{},[30,1895,1896,55],{},[33,1897,54],{},[30,1899,1900,61],{},[33,1901,60],{},[30,1903,1904,67],{},[33,1905,66],{},[30,1907,1908,73],{},[33,1909,72],{},[30,1911,1912,79],{},[33,1913,78],{},[30,1915,1916,85],{},[33,1917,84],{},[22,1919,89],{"id":88},[27,1921,1922,1926,1930,1934,1938],{},[30,1923,1924,97],{},[33,1925,96],{},[30,1927,1928,103],{},[33,1929,102],{},[30,1931,1932,109],{},[33,1933,108],{},[30,1935,1936,115],{},[33,1937,114],{},[30,1939,1940,121],{},[33,1941,120],{},[22,1943,125],{"id":124},[27,1945,1946,1950,1954],{},[30,1947,1948,133],{},[33,1949,132],{},[30,1951,1952,139],{},[33,1953,138],{},[30,1955,1956,145],{},[33,1957,144],{},[15,1959,148],{},[15,1961,151],{},{"title":153,"searchDepth":154,"depth":154,"links":1963},[1964],{"id":12,"depth":154,"text":13,"children":1965},[1966,1967,1968],{"id":24,"depth":159,"text":25},{"id":88,"depth":159,"text":89},{"id":124,"depth":159,"text":125},{},{"title":5,"description":163},[172,173,174,175],1775574493170]