import{s as Zt,n as $t,o as Gt}from"../chunks/scheduler.505acc25.js";import{S as Ct,i as Wt,e as i,s,c as r,q as ue,h as _t,a,d as l,b as o,f as Pe,g as p,j as u,r as re,k as le,l as f,m as n,n as m,t as c,o as d,p as M}from"../chunks/index.b1175496.js";import{C as It,H as pe}from"../chunks/Heading.988e52fa.js";import{C as ne}from"../chunks/CodeBlock.ed64aebc.js";import{E as Lt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.3d47a398.js";function Vt(lt){let T,de,me,Me,j,fe,U,be,J,nt=`<strong>Définir un ensemble clair d’outils est crucial pour la performance.</strong> Comme nous l’avons discuté dans l’<a href="../../unit1/tools">Unité 1</a>, des interfaces claires sont plus faciles à utiliser pour les LLM.
Tout comme une interface API logicielle pour les ingénieurs humains, ils peuvent tirer profit de l’outil s’il est facile de comprendre comment il fonctionne.`,ye,Z,st="Il y a <strong>quatre types principaux d’outils dans LlamaIndex</strong> :",Te,$,ot='<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/tools.png" alt="Tools"/>',ve,G,it="<li><code>FunctionTool</code> : Convertit n’importe quelle fonction Python en un outil qu’un agent peut utiliser. Il comprend automatiquement comment la fonction fonctionne.</li> <li><code>QueryEngineTool</code> : Un outil qui permet aux agents d’utiliser des <em>query engines</em>. Puisque les agents sont construits sur des <em>query engines</em>, ils peuvent également utiliser d’autres agents comme outil.</li> <li><code>Toolspecs</code> : Ensembles d’outils créés par la communauté, en incluant souvent pour des services spécifiques comme Gmail.</li> <li><code>Utility Tools</code> : Outils spéciaux qui aident à gérer de grandes quantités de données d’autres outils.</li>",he,C,at="Nous passerons en revue chacun d’eux plus en détail ci-dessous.",ge,W,we,v,ut='<p>Vous pouvez suivre le code dans <a href="https://huggingface.co/agents-course/notebooks/blob/main/fr/unit2/llama-index/tools.ipynb" target="_blank">ce <i>notebook</i></a> que vous pouvez exécuter avec Google Colab.</p>',xe,_,rt=`<em>FunctionTool</em> fournit un moyen simple d’envelopper n’importe quelle fonction Python et de la rendre disponible à un agent.
Vous pouvez passer soit une fonction synchrone soit asynchrone à l’outil, avec des paramètres optionnels <code>name</code> et <code>description</code>.
Le nom et la description sont particulièrement importants car ils aident l’agent à comprendre quand et comment utiliser l’outil efficacement.
Regardons comment créer un <em>FunctionTool</em> ci-dessous puis l’appeler.`,je,I,Ue,h,pt='<p>Lors de l’utilisation d’un agent ou d’un LLM avec l’appel de fonctions, l’outil sélectionné (et les arguments écrits pour celui-ci) dépendent fortement de son nom, t de la description du but et des arguments. Apprenez-en plus sur l’appel de fonctions dans le <a href="https://docs.llamaindex.ai/en/stable/examples/workflow/function_calling_agent/">Guide sur l’appel de fonctions</a>.</p>',Je,L,Ze,V,mt=`Le <code>QueryEngine</code> que nous avons défini dans l’unité précédente peut être facilement transformé en un outil en utilisant la classe <code>QueryEngineTool</code>.
Voyons comment créer un <code>QueryEngineTool</code> à partir d’un <code>QueryEngine</code> dans l’exemple ci-dessous.`,$e,B,Ge,H,Ce,k,ct=`Pensez au <code>ToolSpecs</code> comme des collections d’outils qui fonctionnent ensemble harmonieusement à l’instar d’une boîte à outils professionnelle bien organisée.
Tout comme la boîte à outils d’un mécanicien contient des outils complémentaires qui fonctionnent ensemble pour les réparations de véhicules, un <code>ToolSpec</code> combine des outils apparentés pour des objectifs spécifiques.
Par exemple, le <code>ToolSpec</code> d’un agent comptable pourrait intégrer élégamment des capacités de tableur, des fonctionnalités email et des outils de calcul pour gérer les tâches financières avec précision et efficacité.`,We,b,se,dt="Installer le <i>Toolspec</i> Google",Ae,E,Mt="section sur le <i>LlamaHub</i>",Ke,oe,ft="toolspec",De,q,_e,Q,bt="Et maintenant nous pouvons charger le <em>toolspec</em> et le convertir en une liste d’outils.",Ie,S,Le,R,yt="Pour obtenir une vue plus détaillée des outils, nous pouvons examiner les <code>metadata</code> de chacun d’eux.",Ve,N,Be,Y,He,X,Tt=`LlamaIndex permet également d’utiliser les outils <em>MCP</em> grâce à un <a href="https://llamahub.ai/l/tools/llama-index-tools-mcp?from=" rel="nofollow"><em>ToolSpec</em> sur le LlamaHub</a>.
Vous pouvez simplement lancer un serveur MCP et commencer à l’utiliser grâce à l’implémentation suivante.`,ke,F,vt='Si vous voulez approfondir MCP, vous pouvez consulter notre <a href="https://huggingface.co/learn/mcp-course/" rel="nofollow">cours gratuit</a>.',Ee,y,ie,ht="Installer le <i>Toolspec</i> MCP",Oe,z,gt="section sur le LlamaHub",et,ae,wt="toolspec",tt,P,qe,A,Qe,K,Se,D,xt=`Souvent, interroger directement une API <strong>peut retourner une quantité excessive de données</strong>, dont certaines peuvent être non pertinentes, déborder la fenêtre de contexte du LLM, ou augmenter inutilement le nombre de <em>tokens</em> que vous utilisez.
Passons en revue nos deux <em>utility tools</em> principaux ci-dessous.`,Re,O,jt="<li><code>OnDemandToolLoader</code> : Cet outil transforme n’importe quel chargeur de données LlamaIndex existant (classe <em>BaseReader</em>) en un outil qu’un agent peut utiliser. Il peut être appelé avec tous les paramètres nécessaires pour déclencher <code>load_data</code> du chargeur de données, ainsi qu’une chaîne de requête en langage naturel. Pendant l’exécution, nous chargeons d’abord les données du chargeur de données, les indexons (par exemple avec un <em>vector store</em>), puis les interrogeons à la demande. Ces trois étapes se produisent dans un seul appel de l’outil.</li> <li><code>LoadAndSearchToolSpec</code> : Le <em>LoadAndSearchToolSpec</em> prend n’importe quel outil existant en entrée. En tant que <em>tool spec</em>, il implémente <code>to_tool_list</code>, et quand cette fonction est appelée, deux outils sont retournés : un outil de chargement puis un outil de recherche. L’exécution du premier appellerait l’outil sous-jacent, puis indexerait la sortie (par défaut avec un <em>vector index</em>). L’exécution du second prendrait une chaîne de requête en entrée et appellerait l’index sous-jacent.</li>",Ne,g,Ut='<p>Vous pouvez trouver des <i>toolspecs</i> et des <i>utility tools</i> sur le <a href="https://llamahub.ai/">LlamaHub</a>.</p>',Ye,ee,Jt="Maintenant que nous comprenons les bases des agents et des outils dans LlamaIndex, voyons comment nous pouvons <strong>utiliser LlamaIndex pour créer des <em>workflows</em> configurables et gérables !</strong>",Xe,te,Fe,ce,ze;return j=new It({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),U=new pe({props:{title:"Utiliser les outils dans LlamaIndex",local:"utiliser-les-outils-dans-llamaindex",headingTag:"h1"}}),W=new pe({props:{title:"Créer un FunctionTool",local:"créer-un-functiontool",headingTag:"h2"}}),I=new ne({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUudG9vbHMlMjBpbXBvcnQlMjBGdW5jdGlvblRvb2wlMEElMEFkZWYlMjBnZXRfd2VhdGhlcihsb2NhdGlvbiUzQSUyMHN0ciklMjAtJTNFJTIwc3RyJTNBJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyVXRpbGUlMjBwb3VyJTIwb2J0ZW5pciUyMGxlJTIwdGVtcHMlMjBxdSdpbCUyMGZhaXQlMjAlQzMlQTAlMjB1biUyMGVuZHJvaXQlMjBkb25uJUMzJUE5LiUyMiUyMiUyMiUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJHZXR0aW5nJTIwd2VhdGhlciUyMGZvciUyMCU3QmxvY2F0aW9uJTdEJTIyKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGYlMjJUaGUlMjB3ZWF0aGVyJTIwaW4lMjAlN0Jsb2NhdGlvbiU3RCUyMGlzJTIwc3VubnklMjIlMEElMEF0b29sJTIwJTNEJTIwRnVuY3Rpb25Ub29sLmZyb21fZGVmYXVsdHMoJTBBJTIwJTIwJTIwJTIwZ2V0X3dlYXRoZXIlMkMlMEElMjAlMjAlMjAlMjBuYW1lJTNEJTIybXlfd2VhdGhlcl90b29sJTIyJTJDJTBBJTIwJTIwJTIwJTIwZGVzY3JpcHRpb24lM0QlMjJVc2VmdWwlMjBmb3IlMjBnZXR0aW5nJTIwdGhlJTIwd2VhdGhlciUyMGZvciUyMGElMjBnaXZlbiUyMGxvY2F0aW9uLiUyMiUyQyUwQSklMEF0b29sLmNhbGwoJTIyTmV3JTIwWW9yayUyMik=",highlighted:`<span class="hljs-keyword">from</span> llama_index.core.tools <span class="hljs-keyword">import</span> FunctionTool

<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_weather</span>(<span class="hljs-params">location: <span class="hljs-built_in">str</span></span>) -&gt; <span class="hljs-built_in">str</span>:
    <span class="hljs-string">&quot;&quot;&quot;Utile pour obtenir le temps qu&#x27;il fait à un endroit donné.&quot;&quot;&quot;</span>
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Getting weather for <span class="hljs-subst">{location}</span>&quot;</span>)
    <span class="hljs-keyword">return</span> <span class="hljs-string">f&quot;The weather in <span class="hljs-subst">{location}</span> is sunny&quot;</span>

tool = FunctionTool.from_defaults(
    get_weather,
    name=<span class="hljs-string">&quot;my_weather_tool&quot;</span>,
    description=<span class="hljs-string">&quot;Useful for getting the weather for a given location.&quot;</span>,
)
tool.call(<span class="hljs-string">&quot;New York&quot;</span>)`,wrap:!1}}),L=new pe({props:{title:"Créer un QueryEngineTool",local:"créer-un-queryenginetool",headingTag:"h2"}}),B=new ne({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUlMjBpbXBvcnQlMjBWZWN0b3JTdG9yZUluZGV4JTBBZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUudG9vbHMlMjBpbXBvcnQlMjBRdWVyeUVuZ2luZVRvb2wlMEFmcm9tJTIwbGxhbWFfaW5kZXgubGxtcy5odWdnaW5nZmFjZV9hcGklMjBpbXBvcnQlMjBIdWdnaW5nRmFjZUluZmVyZW5jZUFQSSUwQWZyb20lMjBsbGFtYV9pbmRleC5lbWJlZGRpbmdzLmh1Z2dpbmdmYWNlJTIwaW1wb3J0JTIwSHVnZ2luZ0ZhY2VFbWJlZGRpbmclMEFmcm9tJTIwbGxhbWFfaW5kZXgudmVjdG9yX3N0b3Jlcy5jaHJvbWElMjBpbXBvcnQlMjBDaHJvbWFWZWN0b3JTdG9yZSUwQSUwQWVtYmVkX21vZGVsJTIwJTNEJTIwSHVnZ2luZ0ZhY2VFbWJlZGRpbmcoJTIyQkFBSSUyRmJnZS1zbWFsbC1lbi12MS41JTIyKSUwQSUwQWRiJTIwJTNEJTIwY2hyb21hZGIuUGVyc2lzdGVudENsaWVudChwYXRoJTNEJTIyLiUyRmFsZnJlZF9jaHJvbWFfZGIlMjIpJTBBY2hyb21hX2NvbGxlY3Rpb24lMjAlM0QlMjBkYi5nZXRfb3JfY3JlYXRlX2NvbGxlY3Rpb24oJTIyYWxmcmVkJTIyKSUwQXZlY3Rvcl9zdG9yZSUyMCUzRCUyMENocm9tYVZlY3RvclN0b3JlKGNocm9tYV9jb2xsZWN0aW9uJTNEY2hyb21hX2NvbGxlY3Rpb24pJTBBJTBBaW5kZXglMjAlM0QlMjBWZWN0b3JTdG9yZUluZGV4LmZyb21fdmVjdG9yX3N0b3JlKHZlY3Rvcl9zdG9yZSUyQyUyMGVtYmVkX21vZGVsJTNEZW1iZWRfbW9kZWwpJTBBJTBBbGxtJTIwJTNEJTIwSHVnZ2luZ0ZhY2VJbmZlcmVuY2VBUEkobW9kZWxfbmFtZSUzRCUyMlF3ZW4lMkZRd2VuMi41LUNvZGVyLTMyQi1JbnN0cnVjdCUyMiklMEFxdWVyeV9lbmdpbmUlMjAlM0QlMjBpbmRleC5hc19xdWVyeV9lbmdpbmUobGxtJTNEbGxtKSUwQXRvb2wlMjAlM0QlMjBRdWVyeUVuZ2luZVRvb2wuZnJvbV9kZWZhdWx0cyhxdWVyeV9lbmdpbmUlMkMlMjBuYW1lJTNEJTIyc29tZSUyMHVzZWZ1bCUyMG5hbWUlMjIlMkMlMjBkZXNjcmlwdGlvbiUzRCUyMnNvbWUlMjB1c2VmdWwlMjBkZXNjcmlwdGlvbiUyMik=",highlighted:`<span class="hljs-keyword">from</span> llama_index.core <span class="hljs-keyword">import</span> VectorStoreIndex
<span class="hljs-keyword">from</span> llama_index.core.tools <span class="hljs-keyword">import</span> QueryEngineTool
<span class="hljs-keyword">from</span> llama_index.llms.huggingface_api <span class="hljs-keyword">import</span> HuggingFaceInferenceAPI
<span class="hljs-keyword">from</span> llama_index.embeddings.huggingface <span class="hljs-keyword">import</span> HuggingFaceEmbedding
<span class="hljs-keyword">from</span> llama_index.vector_stores.chroma <span class="hljs-keyword">import</span> ChromaVectorStore

embed_model = HuggingFaceEmbedding(<span class="hljs-string">&quot;BAAI/bge-small-en-v1.5&quot;</span>)

db = chromadb.PersistentClient(path=<span class="hljs-string">&quot;./alfred_chroma_db&quot;</span>)
chroma_collection = db.get_or_create_collection(<span class="hljs-string">&quot;alfred&quot;</span>)
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model)

llm = HuggingFaceInferenceAPI(model_name=<span class="hljs-string">&quot;Qwen/Qwen2.5-Coder-32B-Instruct&quot;</span>)
query_engine = index.as_query_engine(llm=llm)
tool = QueryEngineTool.from_defaults(query_engine, name=<span class="hljs-string">&quot;some useful name&quot;</span>, description=<span class="hljs-string">&quot;some useful description&quot;</span>)`,wrap:!1}}),H=new pe({props:{title:"Créer un Toolspecs",local:"créer-un-toolspecs",headingTag:"h2"}}),q=new ne({props:{code:"cGlwJTIwaW5zdGFsbCUyMGxsYW1hLWluZGV4LXRvb2xzLWdvb2dsZQ==",highlighted:"pip install llama-index-tools-google",wrap:!1}}),S=new ne({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LnRvb2xzLmdvb2dsZSUyMGltcG9ydCUyMEdtYWlsVG9vbFNwZWMlMEElMEF0b29sX3NwZWMlMjAlM0QlMjBHbWFpbFRvb2xTcGVjKCklMEF0b29sX3NwZWNfbGlzdCUyMCUzRCUyMHRvb2xfc3BlYy50b190b29sX2xpc3QoKQ==",highlighted:`<span class="hljs-keyword">from</span> llama_index.tools.google <span class="hljs-keyword">import</span> GmailToolSpec

tool_spec = GmailToolSpec()
tool_spec_list = tool_spec.to_tool_list()`,wrap:!1}}),N=new ne({props:{code:"JTVCKHRvb2wubWV0YWRhdGEubmFtZSUyQyUyMHRvb2wubWV0YWRhdGEuZGVzY3JpcHRpb24pJTIwZm9yJTIwdG9vbCUyMGluJTIwdG9vbF9zcGVjX2xpc3QlNUQ=",highlighted:'[(tool.metadata.name, tool.metadata.description) <span class="hljs-keyword">for</span> tool <span class="hljs-keyword">in</span> tool_spec_list]',wrap:!1}}),Y=new pe({props:{title:"Model Context Protocol (MCP) dans LlamaIndex",local:"model-context-protocol-mcp-dans-llamaindex",headingTag:"h3"}}),P=new ne({props:{code:"cGlwJTIwaW5zdGFsbCUyMGxsYW1hLWluZGV4LXRvb2xzLW1jcA==",highlighted:"pip install llama-index-tools-mcp",wrap:!1}}),A=new ne({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LnRvb2xzLm1jcCUyMGltcG9ydCUyMEJhc2ljTUNQQ2xpZW50JTJDJTIwTWNwVG9vbFNwZWMlMEElMEElMjMlMjBOb3VzJTIwY29uc2lkJUMzJUE5cm9ucyUyMHF1J3VuJTIwc2VydmV1ciUyMG1jcCUyMHRvdXJuZSUyMHN1ciUyMDEyNy4wLjAuMSUzQTgwMDAlMkMlMjBvdSUyMHZvdXMlMjBwb3V2ZXolMjB1dGlsaXNlciUyMGxlJTIwY2xpZW50JTIwbWNwJTIwcG91ciUyMHZvdXMlMjBjb25uZWN0ZXIlMjAlQzMlQTAlMjB2b3RyZSUyMHByb3ByZSUyMHNlcnZldXIlMEFtY3BfY2xpZW50JTIwJTNEJTIwQmFzaWNNQ1BDbGllbnQoJTIyaHR0cCUzQSUyRiUyRjEyNy4wLjAuMSUzQTgwMDAlMkZzc2UlMjIpJTBBbWNwX3Rvb2wlMjAlM0QlMjBNY3BUb29sU3BlYyhjbGllbnQlM0RtY3BfY2xpZW50KSUwQSUwQSUyMyUyMG9idGVuaXIlMjBsJ2FnZW50JTBBYWdlbnQlMjAlM0QlMjBhd2FpdCUyMGdldF9hZ2VudChtY3BfdG9vbCklMEElMEElMjMlMjBjciVDMyVBOWVyJTIwbGUlMjBjb250ZXh0ZSUyMGRlJTIwbCdhZ2VudCUwQWFnZW50X2NvbnRleHQlMjAlM0QlMjBDb250ZXh0KGFnZW50KQ==",highlighted:`<span class="hljs-keyword">from</span> llama_index.tools.mcp <span class="hljs-keyword">import</span> BasicMCPClient, McpToolSpec

<span class="hljs-comment"># Nous considérons qu&#x27;un serveur mcp tourne sur 127.0.0.1:8000, ou vous pouvez utiliser le client mcp pour vous connecter à votre propre serveur</span>
mcp_client = BasicMCPClient(<span class="hljs-string">&quot;http://127.0.0.1:8000/sse&quot;</span>)
mcp_tool = McpToolSpec(client=mcp_client)

<span class="hljs-comment"># obtenir l&#x27;agent</span>
agent = <span class="hljs-keyword">await</span> get_agent(mcp_tool)

<span class="hljs-comment"># créer le contexte de l&#x27;agent</span>
agent_context = Context(agent)`,wrap:!1}}),K=new pe({props:{title:"Utility Tools",local:"utility-tools",headingTag:"h2"}}),te=new Lt({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/fr/unit2/llama-index/tools.mdx"}}),{c(){T=i("meta"),de=s(),me=i("p"),Me=s(),r(j.$$.fragment),fe=s(),r(U.$$.fragment),be=s(),J=i("p"),J.innerHTML=nt,ye=s(),Z=i("p"),Z.innerHTML=st,Te=s(),$=i("p"),$.innerHTML=ot,ve=s(),G=i("ol"),G.innerHTML=it,he=s(),C=i("p"),C.textContent=at,ge=s(),r(W.$$.fragment),we=s(),v=i("blockquote"),v.innerHTML=ut,xe=s(),_=i("p"),_.innerHTML=rt,je=s(),r(I.$$.fragment),Ue=s(),h=i("blockquote"),h.innerHTML=pt,Je=s(),r(L.$$.fragment),Ze=s(),V=i("p"),V.innerHTML=mt,$e=s(),r(B.$$.fragment),Ge=s(),r(H.$$.fragment),Ce=s(),k=i("p"),k.innerHTML=ct,We=s(),b=i("details"),se=i("summary"),se.innerHTML=dt,Ae=ue(`
Comme introduit dans la `),E=i("a"),E.innerHTML=Mt,Ke=ue(", nous pouvons installer le "),oe=i("i"),oe.textContent=ft,De=ue(` Google avec la commande suivante :

	`),r(q.$$.fragment),_e=s(),Q=i("p"),Q.innerHTML=bt,Ie=s(),r(S.$$.fragment),Le=s(),R=i("p"),R.innerHTML=yt,Ve=s(),r(N.$$.fragment),Be=s(),r(Y.$$.fragment),He=s(),X=i("p"),X.innerHTML=Tt,ke=s(),F=i("p"),F.innerHTML=vt,Ee=s(),y=i("details"),ie=i("summary"),ie.innerHTML=ht,Oe=ue(`
Comme introduit dans la `),z=i("a"),z.textContent=gt,et=ue(", nous pouvons installer le "),ae=i("i"),ae.textContent=wt,tt=ue(` MCP avec la commande suivante :

	`),r(P.$$.fragment),qe=s(),r(A.$$.fragment),Qe=s(),r(K.$$.fragment),Se=s(),D=i("p"),D.innerHTML=xt,Re=s(),O=i("ol"),O.innerHTML=jt,Ne=s(),g=i("blockquote"),g.innerHTML=Ut,Ye=s(),ee=i("p"),ee.innerHTML=Jt,Xe=s(),r(te.$$.fragment),Fe=s(),ce=i("p"),this.h()},l(e){const t=_t("svelte-u9bgzb",document.head);T=a(t,"META",{name:!0,content:!0}),t.forEach(l),de=o(e),me=a(e,"P",{}),Pe(me).forEach(l),Me=o(e),p(j.$$.fragment,e),fe=o(e),p(U.$$.fragment,e),be=o(e),J=a(e,"P",{"data-svelte-h":!0}),u(J)!=="svelte-15xnf4h"&&(J.innerHTML=nt),ye=o(e),Z=a(e,"P",{"data-svelte-h":!0}),u(Z)!=="svelte-1wwim52"&&(Z.innerHTML=st),Te=o(e),$=a(e,"P",{"data-svelte-h":!0}),u($)!=="svelte-ir2ii4"&&($.innerHTML=ot),ve=o(e),G=a(e,"OL",{"data-svelte-h":!0}),u(G)!=="svelte-rue757"&&(G.innerHTML=it),he=o(e),C=a(e,"P",{"data-svelte-h":!0}),u(C)!=="svelte-se2hf"&&(C.textContent=at),ge=o(e),p(W.$$.fragment,e),we=o(e),v=a(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(v)!=="svelte-1ebr7g6"&&(v.innerHTML=ut),xe=o(e),_=a(e,"P",{"data-svelte-h":!0}),u(_)!=="svelte-cm71ui"&&(_.innerHTML=rt),je=o(e),p(I.$$.fragment,e),Ue=o(e),h=a(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(h)!=="svelte-1mmp11s"&&(h.innerHTML=pt),Je=o(e),p(L.$$.fragment,e),Ze=o(e),V=a(e,"P",{"data-svelte-h":!0}),u(V)!=="svelte-4ddxlo"&&(V.innerHTML=mt),$e=o(e),p(B.$$.fragment,e),Ge=o(e),p(H.$$.fragment,e),Ce=o(e),k=a(e,"P",{"data-svelte-h":!0}),u(k)!=="svelte-17051kk"&&(k.innerHTML=ct),We=o(e),b=a(e,"DETAILS",{});var w=Pe(b);se=a(w,"SUMMARY",{"data-svelte-h":!0}),u(se)!=="svelte-17se9ce"&&(se.innerHTML=dt),Ae=re(w,`
Comme introduit dans la `),E=a(w,"A",{href:!0,"data-svelte-h":!0}),u(E)!=="svelte-12hnzv1"&&(E.innerHTML=Mt),Ke=re(w,", nous pouvons installer le "),oe=a(w,"I",{"data-svelte-h":!0}),u(oe)!=="svelte-x626tz"&&(oe.textContent=ft),De=re(w,` Google avec la commande suivante :

	`),p(q.$$.fragment,w),w.forEach(l),_e=o(e),Q=a(e,"P",{"data-svelte-h":!0}),u(Q)!=="svelte-hwh0jr"&&(Q.innerHTML=bt),Ie=o(e),p(S.$$.fragment,e),Le=o(e),R=a(e,"P",{"data-svelte-h":!0}),u(R)!=="svelte-w2dupu"&&(R.innerHTML=yt),Ve=o(e),p(N.$$.fragment,e),Be=o(e),p(Y.$$.fragment,e),He=o(e),X=a(e,"P",{"data-svelte-h":!0}),u(X)!=="svelte-143kyx2"&&(X.innerHTML=Tt),ke=o(e),F=a(e,"P",{"data-svelte-h":!0}),u(F)!=="svelte-1yipqfs"&&(F.innerHTML=vt),Ee=o(e),y=a(e,"DETAILS",{});var x=Pe(y);ie=a(x,"SUMMARY",{"data-svelte-h":!0}),u(ie)!=="svelte-wxegrp"&&(ie.innerHTML=ht),Oe=re(x,`
Comme introduit dans la `),z=a(x,"A",{href:!0,"data-svelte-h":!0}),u(z)!=="svelte-1pl43ly"&&(z.textContent=gt),et=re(x,", nous pouvons installer le "),ae=a(x,"I",{"data-svelte-h":!0}),u(ae)!=="svelte-x626tz"&&(ae.textContent=wt),tt=re(x,` MCP avec la commande suivante :

	`),p(P.$$.fragment,x),x.forEach(l),qe=o(e),p(A.$$.fragment,e),Qe=o(e),p(K.$$.fragment,e),Se=o(e),D=a(e,"P",{"data-svelte-h":!0}),u(D)!=="svelte-ionwur"&&(D.innerHTML=xt),Re=o(e),O=a(e,"OL",{"data-svelte-h":!0}),u(O)!=="svelte-l1aj58"&&(O.innerHTML=jt),Ne=o(e),g=a(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(g)!=="svelte-hr06my"&&(g.innerHTML=Ut),Ye=o(e),ee=a(e,"P",{"data-svelte-h":!0}),u(ee)!=="svelte-pi31wf"&&(ee.innerHTML=Jt),Xe=o(e),p(te.$$.fragment,e),Fe=o(e),ce=a(e,"P",{}),Pe(ce).forEach(l),this.h()},h(){le(T,"name","hf:doc:metadata"),le(T,"content",Bt),le(v,"class","tip"),le(h,"class","tip"),le(E,"href","./llama-hub"),le(z,"href","./llama-hub"),le(g,"class","tip")},m(e,t){f(document.head,T),n(e,de,t),n(e,me,t),n(e,Me,t),m(j,e,t),n(e,fe,t),m(U,e,t),n(e,be,t),n(e,J,t),n(e,ye,t),n(e,Z,t),n(e,Te,t),n(e,$,t),n(e,ve,t),n(e,G,t),n(e,he,t),n(e,C,t),n(e,ge,t),m(W,e,t),n(e,we,t),n(e,v,t),n(e,xe,t),n(e,_,t),n(e,je,t),m(I,e,t),n(e,Ue,t),n(e,h,t),n(e,Je,t),m(L,e,t),n(e,Ze,t),n(e,V,t),n(e,$e,t),m(B,e,t),n(e,Ge,t),m(H,e,t),n(e,Ce,t),n(e,k,t),n(e,We,t),n(e,b,t),f(b,se),f(b,Ae),f(b,E),f(b,Ke),f(b,oe),f(b,De),m(q,b,null),n(e,_e,t),n(e,Q,t),n(e,Ie,t),m(S,e,t),n(e,Le,t),n(e,R,t),n(e,Ve,t),m(N,e,t),n(e,Be,t),m(Y,e,t),n(e,He,t),n(e,X,t),n(e,ke,t),n(e,F,t),n(e,Ee,t),n(e,y,t),f(y,ie),f(y,Oe),f(y,z),f(y,et),f(y,ae),f(y,tt),m(P,y,null),n(e,qe,t),m(A,e,t),n(e,Qe,t),m(K,e,t),n(e,Se,t),n(e,D,t),n(e,Re,t),n(e,O,t),n(e,Ne,t),n(e,g,t),n(e,Ye,t),n(e,ee,t),n(e,Xe,t),m(te,e,t),n(e,Fe,t),n(e,ce,t),ze=!0},p:$t,i(e){ze||(c(j.$$.fragment,e),c(U.$$.fragment,e),c(W.$$.fragment,e),c(I.$$.fragment,e),c(L.$$.fragment,e),c(B.$$.fragment,e),c(H.$$.fragment,e),c(q.$$.fragment,e),c(S.$$.fragment,e),c(N.$$.fragment,e),c(Y.$$.fragment,e),c(P.$$.fragment,e),c(A.$$.fragment,e),c(K.$$.fragment,e),c(te.$$.fragment,e),ze=!0)},o(e){d(j.$$.fragment,e),d(U.$$.fragment,e),d(W.$$.fragment,e),d(I.$$.fragment,e),d(L.$$.fragment,e),d(B.$$.fragment,e),d(H.$$.fragment,e),d(q.$$.fragment,e),d(S.$$.fragment,e),d(N.$$.fragment,e),d(Y.$$.fragment,e),d(P.$$.fragment,e),d(A.$$.fragment,e),d(K.$$.fragment,e),d(te.$$.fragment,e),ze=!1},d(e){e&&(l(de),l(me),l(Me),l(fe),l(be),l(J),l(ye),l(Z),l(Te),l($),l(ve),l(G),l(he),l(C),l(ge),l(we),l(v),l(xe),l(_),l(je),l(Ue),l(h),l(Je),l(Ze),l(V),l($e),l(Ge),l(Ce),l(k),l(We),l(b),l(_e),l(Q),l(Ie),l(Le),l(R),l(Ve),l(Be),l(He),l(X),l(ke),l(F),l(Ee),l(y),l(qe),l(Qe),l(Se),l(D),l(Re),l(O),l(Ne),l(g),l(Ye),l(ee),l(Xe),l(Fe),l(ce)),l(T),M(j,e),M(U,e),M(W,e),M(I,e),M(L,e),M(B,e),M(H,e),M(q),M(S,e),M(N,e),M(Y,e),M(P),M(A,e),M(K,e),M(te,e)}}}const Bt='{"title":"Utiliser les outils dans LlamaIndex","local":"utiliser-les-outils-dans-llamaindex","sections":[{"title":"Créer un FunctionTool","local":"créer-un-functiontool","sections":[],"depth":2},{"title":"Créer un QueryEngineTool","local":"créer-un-queryenginetool","sections":[],"depth":2},{"title":"Créer un Toolspecs","local":"créer-un-toolspecs","sections":[{"title":"Model Context Protocol (MCP) dans LlamaIndex","local":"model-context-protocol-mcp-dans-llamaindex","sections":[],"depth":3}],"depth":2},{"title":"Utility Tools","local":"utility-tools","sections":[],"depth":2}],"depth":1}';function Ht(lt){return Gt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Rt extends Ct{constructor(T){super(),Wt(this,T,Ht,Vt,Zt,{})}}export{Rt as component};
