import{s as yt,o as Tt,n as De}from"../chunks/scheduler.37c15a92.js";import{S as gt,i as $t,g as m,s,r as d,m as J,A as wt,h as r,f as l,c as o,j as Qe,u as f,x as c,n as Z,k as W,y as x,a as n,v as M,d as b,t as h,w as v}from"../chunks/index.2bf4358c.js";import{T as Ke}from"../chunks/Tip.363c041f.js";import{C as re}from"../chunks/CodeBlock.4e987730.js";import{H as ce}from"../chunks/Heading.8ada512a.js";import{E as jt}from"../chunks/getInferenceSnippets.d4d07d1e.js";function xt(C){let u,a,y="ce *notebook*",p;return{c(){u=J("Vous pouvez suivre le code dans "),a=m("a"),a.textContent=y,p=J(" que vous pouvez exécuter avec Google Colab."),this.h()},l(i){u=Z(i,"Vous pouvez suivre le code dans "),a=r(i,"A",{href:!0,target:!0,"data-svelte-h":!0}),c(a)!=="svelte-1xbul83"&&(a.textContent=y),p=Z(i," que vous pouvez exécuter avec Google Colab."),this.h()},h(){W(a,"href","https://huggingface.co/agents-course/notebooks/blob/main/unit2/llama-index/tools.ipynb"),W(a,"target","_blank")},m(i,T){n(i,u,T),n(i,a,T),n(i,p,T)},p:De,d(i){i&&(l(u),l(a),l(p))}}}function Jt(C){let u,a,y="*Guide* de l'appel de fonctions",p;return{c(){u=J("Lors de l'utilisation d'un agent ou d'un *LLM* avec l'appel de fonctions, le *tool* sélectionné (et les arguments écrits pour ce *tool*) dépendent fortement du nom du *tool* et de la description du but et des arguments du *tool*. Apprenez-en plus sur l'appel de fonctions dans le "),a=m("a"),a.textContent=y,p=J("."),this.h()},l(i){u=Z(i,"Lors de l'utilisation d'un agent ou d'un *LLM* avec l'appel de fonctions, le *tool* sélectionné (et les arguments écrits pour ce *tool*) dépendent fortement du nom du *tool* et de la description du but et des arguments du *tool*. Apprenez-en plus sur l'appel de fonctions dans le "),a=r(i,"A",{href:!0,"data-svelte-h":!0}),c(a)!=="svelte-3tsoiw"&&(a.textContent=y),p=Z(i,"."),this.h()},h(){W(a,"href","https://docs.llamaindex.ai/en/stable/examples/workflow/function_calling_agent/")},m(i,T){n(i,u,T),n(i,a,T),n(i,p,T)},p:De,d(i){i&&(l(u),l(a),l(p))}}}function Zt(C){let u,a,y="*LlamaHub*";return{c(){u=J("Vous pouvez trouver des *toolspecs* et des *utility tools* sur le "),a=m("a"),a.textContent=y,this.h()},l(p){u=Z(p,"Vous pouvez trouver des *toolspecs* et des *utility tools* sur le "),a=r(p,"A",{href:!0,"data-svelte-h":!0}),c(a)!=="svelte-9rk54m"&&(a.textContent=y),this.h()},h(){W(a,"href","https://llamahub.ai/")},m(p,i){n(p,u,i),n(p,a,i)},p:De,d(p){p&&(l(u),l(a))}}}function Ct(C){let u,a,y,p,i,T,I,Oe=`<strong>Définir un ensemble clair de <em>Tools</em> est crucial pour la performance.</strong> Comme nous l’avons discuté dans l’<a href="../../unit1/tools">unité 1</a>, des interfaces de <em>tools</em> claires sont plus faciles à utiliser pour les <em>LLMs</em>.
Tout comme une interface API logicielle pour les ingénieurs humains, ils peuvent tirer plus de profit de l’outil s’il est facile de comprendre comment il fonctionne.`,fe,B,et="Il y a <strong>quatre types principaux de <em>tools</em> dans LlamaIndex</strong> :",Me,V,tt='<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/tools.png" alt="Tools"/>',be,L,lt="<li><code>FunctionTool</code> : Convertit n’importe quelle fonction Python en un <em>tool</em> qu’un agent peut utiliser. Il comprend automatiquement comment la fonction fonctionne.</li> <li><code>QueryEngineTool</code> : Un <em>tool</em> 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 <em>tools</em>.</li> <li><code>Toolspecs</code> : Ensembles de <em>tools</em> créés par la communauté, qui incluent souvent des <em>tools</em> pour des services spécifiques comme Gmail.</li> <li><code>Utility Tools</code> : <em>Tools</em> spéciaux qui aident à gérer de grandes quantités de données d’autres <em>tools</em>.</li>",he,E,nt="Nous passerons en revue chacun d’eux plus en détail ci-dessous.",ve,k,ye,U,Te,q,st=`Un <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 au <em>tool</em>, 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 le <em>tool</em> efficacement.
Regardons comment créer un <em>FunctionTool</em> ci-dessous puis l’appeler.`,ge,N,$e,G,we,R,je,H,ot=`Le <code>QueryEngine</code> que nous avons défini dans l’unité précédente peut être facilement transformé en un <em>tool</em> 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.`,xe,X,Je,Y,Ze,S,at=`Pensez aux <code>ToolSpecs</code> comme des collections de <em>tools</em> qui fonctionnent ensemble harmonieusement - comme une <em>toolkit</em> professionnelle bien organisée.
Tout comme la <em>toolkit</em> d’un mécanicien contient des <em>tools</em> complémentaires qui fonctionnent ensemble pour les réparations de véhicules, un <code>ToolSpec</code> combine des <em>tools</em> 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 <em>tools</em> de calcul pour gérer les tâches financières avec précision et efficacité.`,Ce,g,ue,it="Installer le *Toolspec* Google",Fe,Q,mt="section sur le *LlamaHub*",ze,F,Ue,z,rt="Et maintenant nous pouvons charger le <em>toolspec</em> et le convertir en une liste de <em>tools</em>.",Ge,P,_e,A,ut="Pour obtenir une vue plus détaillée des <em>tools</em>, nous pouvons examiner les <code>metadata</code> de chaque <em>tool</em>.",We,K,Ie,D,Be,O,pt=`LlamaIndex permet également d’utiliser les <em>tools</em> <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 <em>LlamaHub</em></a>.
Vous pouvez simplement lancer un serveur <em>MCP</em> et commencer à l’utiliser grâce à l’implémentation suivante.`,Ve,ee,ct='Si vous voulez approfondir <em>MCP</em>, vous pouvez consulter notre <a href="https://huggingface.co/learn/mcp-course/" rel="nofollow">cours <em>MCP</em> gratuit</a>.',Le,$,pe,dt="Installer le *Toolspec* *MCP*",Pe,te,ft="section sur le *LlamaHub*",Ae,le,Ee,ne,ke,se,qe,oe,Mt=`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 <em>LLM</em>, ou augmenter inutilement le nombre de <em>tokens</em> que vous utilisez.
Passons en revue nos deux <em>utility tools</em> principaux ci-dessous.`,Ne,ae,bt="<li><code>OnDemandToolLoader</code> : Ce <em>tool</em> transforme n’importe quel <em>data loader</em> LlamaIndex existant (classe <em>BaseReader</em>) en un <em>tool</em> qu’un agent peut utiliser. Le <em>tool</em> peut être appelé avec tous les paramètres nécessaires pour déclencher <code>load_data</code> du <em>data loader</em>, ainsi qu’une chaîne de requête en langage naturel. Pendant l’exécution, nous chargeons d’abord les données du <em>data loader</em>, 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 <em>tool</em>.</li> <li><code>LoadAndSearchToolSpec</code> : Le <em>LoadAndSearchToolSpec</em> prend n’importe quel <em>Tool</em> 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 <em>tools</em> sont retournés : un <em>tool</em> de chargement puis un <em>tool</em> de recherche. L’exécution du <em>Tool</em> de chargement appellerait le <em>Tool</em> sous-jacent, puis indexerait la sortie (par défaut avec un <em>vector index</em>). L’exécution du <em>Tool</em> de recherche prendrait une chaîne de requête en entrée et appellerait l’index sous-jacent.</li>",Re,_,He,ie,ht="Maintenant que nous comprenons les bases des agents et des <em>tools</em> dans LlamaIndex, voyons comment nous pouvons <strong>utiliser LlamaIndex pour créer des <em>workflows</em> configurables et gérables !</strong>",Xe,me,Ye,de,Se;return i=new ce({props:{title:"Utiliser les Tools dans LlamaIndex",local:"utiliser-les-tools-dans-llamaindex",headingTag:"h1"}}),k=new ce({props:{title:"Créer un FunctionTool",local:"créer-un-functiontool",headingTag:"h2"}}),U=new Ke({props:{$$slots:{default:[xt]},$$scope:{ctx:C}}}),N=new re({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUudG9vbHMlMjBpbXBvcnQlMjBGdW5jdGlvblRvb2wlMEElMEFkZWYlMjBnZXRfd2VhdGhlcihsb2NhdGlvbiUzQSUyMHN0ciklMjAtJTNFJTIwc3RyJTNBJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyVXNlZnVsJTIwZm9yJTIwZ2V0dGluZyUyMHRoZSUyMHdlYXRoZXIlMjBmb3IlMjBhJTIwZ2l2ZW4lMjBsb2NhdGlvbi4lMjIlMjIlMjIlMEElMjAlMjAlMjAlMjBwcmludChmJTIyR2V0dGluZyUyMHdlYXRoZXIlMjBmb3IlMjAlN0Jsb2NhdGlvbiU3RCUyMiklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBmJTIyVGhlJTIwd2VhdGhlciUyMGluJTIwJTdCbG9jYXRpb24lN0QlMjBpcyUyMHN1bm55JTIyJTBBJTBBdG9vbCUyMCUzRCUyMEZ1bmN0aW9uVG9vbC5mcm9tX2RlZmF1bHRzKCUwQSUyMCUyMCUyMCUyMGdldF93ZWF0aGVyJTJDJTBBJTIwJTIwJTIwJTIwbmFtZSUzRCUyMm15X3dlYXRoZXJfdG9vbCUyMiUyQyUwQSUyMCUyMCUyMCUyMGRlc2NyaXB0aW9uJTNEJTIyVXNlZnVsJTIwZm9yJTIwZ2V0dGluZyUyMHRoZSUyMHdlYXRoZXIlMjBmb3IlMjBhJTIwZ2l2ZW4lMjBsb2NhdGlvbi4lMjIlMkMlMEEpJTBBdG9vbC5jYWxsKCUyMk5ldyUyMFlvcmslMjIp",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;Useful for getting the weather for a given location.&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}}),G=new Ke({props:{$$slots:{default:[Jt]},$$scope:{ctx:C}}}),R=new ce({props:{title:"Créer un QueryEngineTool",local:"créer-un-queryenginetool",headingTag:"h2"}}),X=new re({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}}),Y=new ce({props:{title:"Créer des Toolspecs",local:"créer-des-toolspecs",headingTag:"h2"}}),F=new re({props:{code:"cGlwJTIwaW5zdGFsbCUyMGxsYW1hLWluZGV4LXRvb2xzLWdvb2dsZQ==",highlighted:"pip install llama-index-tools-google",wrap:!1}}),P=new re({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}}),K=new re({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}}),D=new ce({props:{title:"Model Context Protocol ( MCP ) dans LlamaIndex",local:"model-context-protocol--mcp--dans-llamaindex",headingTag:"h3"}}),le=new re({props:{code:"cGlwJTIwaW5zdGFsbCUyMGxsYW1hLWluZGV4LXRvb2xzLW1jcA==",highlighted:"pip install llama-index-tools-mcp",wrap:!1}}),ne=new re({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LnRvb2xzLm1jcCUyMGltcG9ydCUyMEJhc2ljTUNQQ2xpZW50JTJDJTIwTWNwVG9vbFNwZWMlMEElMEElMjMlMjBXZSUyMGNvbnNpZGVyJTIwdGhlcmUlMjBpcyUyMGElMjBtY3AlMjBzZXJ2ZXIlMjBydW5uaW5nJTIwb24lMjAxMjcuMC4wLjElM0E4MDAwJTJDJTIwb3IlMjB5b3UlMjBjYW4lMjB1c2UlMjB0aGUlMjBtY3AlMjBjbGllbnQlMjB0byUyMGNvbm5lY3QlMjB0byUyMHlvdXIlMjBvd24lMjBtY3AlMjBzZXJ2ZXIuJTBBbWNwX2NsaWVudCUyMCUzRCUyMEJhc2ljTUNQQ2xpZW50KCUyMmh0dHAlM0ElMkYlMkYxMjcuMC4wLjElM0E4MDAwJTJGc3NlJTIyKSUwQW1jcF90b29sJTIwJTNEJTIwTWNwVG9vbFNwZWMoY2xpZW50JTNEbWNwX2NsaWVudCklMEElMEElMjMlMjBnZXQlMjB0aGUlMjBhZ2VudCUwQWFnZW50JTIwJTNEJTIwYXdhaXQlMjBnZXRfYWdlbnQobWNwX3Rvb2wpJTBBJTBBJTIzJTIwY3JlYXRlJTIwdGhlJTIwYWdlbnQlMjBjb250ZXh0JTBBYWdlbnRfY29udGV4dCUyMCUzRCUyMENvbnRleHQoYWdlbnQp",highlighted:`<span class="hljs-keyword">from</span> llama_index.tools.mcp <span class="hljs-keyword">import</span> BasicMCPClient, McpToolSpec

<span class="hljs-comment"># We consider there is a mcp server running on 127.0.0.1:8000, or you can use the mcp client to connect to your own mcp server.</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"># get the agent</span>
agent = <span class="hljs-keyword">await</span> get_agent(mcp_tool)

<span class="hljs-comment"># create the agent context</span>
agent_context = Context(agent)`,wrap:!1}}),se=new ce({props:{title:"Utility Tools",local:"utility-tools",headingTag:"h2"}}),_=new Ke({props:{$$slots:{default:[Zt]},$$scope:{ctx:C}}}),me=new jt({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/fr/unit2/llama-index/tools.mdx"}}),{c(){u=m("meta"),a=s(),y=m("p"),p=s(),d(i.$$.fragment),T=s(),I=m("p"),I.innerHTML=Oe,fe=s(),B=m("p"),B.innerHTML=et,Me=s(),V=m("p"),V.innerHTML=tt,be=s(),L=m("ol"),L.innerHTML=lt,he=s(),E=m("p"),E.textContent=nt,ve=s(),d(k.$$.fragment),ye=s(),d(U.$$.fragment),Te=s(),q=m("p"),q.innerHTML=st,ge=s(),d(N.$$.fragment),$e=s(),d(G.$$.fragment),we=s(),d(R.$$.fragment),je=s(),H=m("p"),H.innerHTML=ot,xe=s(),d(X.$$.fragment),Je=s(),d(Y.$$.fragment),Ze=s(),S=m("p"),S.innerHTML=at,Ce=s(),g=m("details"),ue=m("summary"),ue.textContent=it,Fe=J(`
Comme introduit dans la `),Q=m("a"),Q.textContent=mt,ze=J(`, nous pouvons installer le *toolspec* Google avec la commande suivante :

	`),d(F.$$.fragment),Ue=s(),z=m("p"),z.innerHTML=rt,Ge=s(),d(P.$$.fragment),_e=s(),A=m("p"),A.innerHTML=ut,We=s(),d(K.$$.fragment),Ie=s(),d(D.$$.fragment),Be=s(),O=m("p"),O.innerHTML=pt,Ve=s(),ee=m("p"),ee.innerHTML=ct,Le=s(),$=m("details"),pe=m("summary"),pe.textContent=dt,Pe=J(`
Comme introduit dans la `),te=m("a"),te.textContent=ft,Ae=J(`, nous pouvons installer le *toolspec* *MCP* avec la commande suivante :

	`),d(le.$$.fragment),Ee=s(),d(ne.$$.fragment),ke=s(),d(se.$$.fragment),qe=s(),oe=m("p"),oe.innerHTML=Mt,Ne=s(),ae=m("ol"),ae.innerHTML=bt,Re=s(),d(_.$$.fragment),He=s(),ie=m("p"),ie.innerHTML=ht,Xe=s(),d(me.$$.fragment),Ye=s(),de=m("p"),this.h()},l(e){const t=wt("svelte-u9bgzb",document.head);u=r(t,"META",{name:!0,content:!0}),t.forEach(l),a=o(e),y=r(e,"P",{}),Qe(y).forEach(l),p=o(e),f(i.$$.fragment,e),T=o(e),I=r(e,"P",{"data-svelte-h":!0}),c(I)!=="svelte-14rp7p7"&&(I.innerHTML=Oe),fe=o(e),B=r(e,"P",{"data-svelte-h":!0}),c(B)!=="svelte-397iqk"&&(B.innerHTML=et),Me=o(e),V=r(e,"P",{"data-svelte-h":!0}),c(V)!=="svelte-ir2ii4"&&(V.innerHTML=tt),be=o(e),L=r(e,"OL",{"data-svelte-h":!0}),c(L)!=="svelte-2b30uc"&&(L.innerHTML=lt),he=o(e),E=r(e,"P",{"data-svelte-h":!0}),c(E)!=="svelte-se2hf"&&(E.textContent=nt),ve=o(e),f(k.$$.fragment,e),ye=o(e),f(U.$$.fragment,e),Te=o(e),q=r(e,"P",{"data-svelte-h":!0}),c(q)!=="svelte-mqw8ww"&&(q.innerHTML=st),ge=o(e),f(N.$$.fragment,e),$e=o(e),f(G.$$.fragment,e),we=o(e),f(R.$$.fragment,e),je=o(e),H=r(e,"P",{"data-svelte-h":!0}),c(H)!=="svelte-o20fag"&&(H.innerHTML=ot),xe=o(e),f(X.$$.fragment,e),Je=o(e),f(Y.$$.fragment,e),Ze=o(e),S=r(e,"P",{"data-svelte-h":!0}),c(S)!=="svelte-175vkyn"&&(S.innerHTML=at),Ce=o(e),g=r(e,"DETAILS",{});var w=Qe(g);ue=r(w,"SUMMARY",{"data-svelte-h":!0}),c(ue)!=="svelte-15iz2ov"&&(ue.textContent=it),Fe=Z(w,`
Comme introduit dans la `),Q=r(w,"A",{href:!0,"data-svelte-h":!0}),c(Q)!=="svelte-8reyae"&&(Q.textContent=mt),ze=Z(w,`, nous pouvons installer le *toolspec* Google avec la commande suivante :

	`),f(F.$$.fragment,w),w.forEach(l),Ue=o(e),z=r(e,"P",{"data-svelte-h":!0}),c(z)!=="svelte-g6sb97"&&(z.innerHTML=rt),Ge=o(e),f(P.$$.fragment,e),_e=o(e),A=r(e,"P",{"data-svelte-h":!0}),c(A)!=="svelte-1o1wnmj"&&(A.innerHTML=ut),We=o(e),f(K.$$.fragment,e),Ie=o(e),f(D.$$.fragment,e),Be=o(e),O=r(e,"P",{"data-svelte-h":!0}),c(O)!=="svelte-1uhalfc"&&(O.innerHTML=pt),Ve=o(e),ee=r(e,"P",{"data-svelte-h":!0}),c(ee)!=="svelte-179d292"&&(ee.innerHTML=ct),Le=o(e),$=r(e,"DETAILS",{});var j=Qe($);pe=r(j,"SUMMARY",{"data-svelte-h":!0}),c(pe)!=="svelte-99iz1i"&&(pe.textContent=dt),Pe=Z(j,`
Comme introduit dans la `),te=r(j,"A",{href:!0,"data-svelte-h":!0}),c(te)!=="svelte-8reyae"&&(te.textContent=ft),Ae=Z(j,`, nous pouvons installer le *toolspec* *MCP* avec la commande suivante :

	`),f(le.$$.fragment,j),j.forEach(l),Ee=o(e),f(ne.$$.fragment,e),ke=o(e),f(se.$$.fragment,e),qe=o(e),oe=r(e,"P",{"data-svelte-h":!0}),c(oe)!=="svelte-1qrw6es"&&(oe.innerHTML=Mt),Ne=o(e),ae=r(e,"OL",{"data-svelte-h":!0}),c(ae)!=="svelte-16za2ni"&&(ae.innerHTML=bt),Re=o(e),f(_.$$.fragment,e),He=o(e),ie=r(e,"P",{"data-svelte-h":!0}),c(ie)!=="svelte-1xob4cr"&&(ie.innerHTML=ht),Xe=o(e),f(me.$$.fragment,e),Ye=o(e),de=r(e,"P",{}),Qe(de).forEach(l),this.h()},h(){W(u,"name","hf:doc:metadata"),W(u,"content",Ut),W(Q,"href","./llama-hub"),W(te,"href","./llama-hub")},m(e,t){x(document.head,u),n(e,a,t),n(e,y,t),n(e,p,t),M(i,e,t),n(e,T,t),n(e,I,t),n(e,fe,t),n(e,B,t),n(e,Me,t),n(e,V,t),n(e,be,t),n(e,L,t),n(e,he,t),n(e,E,t),n(e,ve,t),M(k,e,t),n(e,ye,t),M(U,e,t),n(e,Te,t),n(e,q,t),n(e,ge,t),M(N,e,t),n(e,$e,t),M(G,e,t),n(e,we,t),M(R,e,t),n(e,je,t),n(e,H,t),n(e,xe,t),M(X,e,t),n(e,Je,t),M(Y,e,t),n(e,Ze,t),n(e,S,t),n(e,Ce,t),n(e,g,t),x(g,ue),x(g,Fe),x(g,Q),x(g,ze),M(F,g,null),n(e,Ue,t),n(e,z,t),n(e,Ge,t),M(P,e,t),n(e,_e,t),n(e,A,t),n(e,We,t),M(K,e,t),n(e,Ie,t),M(D,e,t),n(e,Be,t),n(e,O,t),n(e,Ve,t),n(e,ee,t),n(e,Le,t),n(e,$,t),x($,pe),x($,Pe),x($,te),x($,Ae),M(le,$,null),n(e,Ee,t),M(ne,e,t),n(e,ke,t),M(se,e,t),n(e,qe,t),n(e,oe,t),n(e,Ne,t),n(e,ae,t),n(e,Re,t),M(_,e,t),n(e,He,t),n(e,ie,t),n(e,Xe,t),M(me,e,t),n(e,Ye,t),n(e,de,t),Se=!0},p(e,[t]){const w={};t&2&&(w.$$scope={dirty:t,ctx:e}),U.$set(w);const j={};t&2&&(j.$$scope={dirty:t,ctx:e}),G.$set(j);const vt={};t&2&&(vt.$$scope={dirty:t,ctx:e}),_.$set(vt)},i(e){Se||(b(i.$$.fragment,e),b(k.$$.fragment,e),b(U.$$.fragment,e),b(N.$$.fragment,e),b(G.$$.fragment,e),b(R.$$.fragment,e),b(X.$$.fragment,e),b(Y.$$.fragment,e),b(F.$$.fragment,e),b(P.$$.fragment,e),b(K.$$.fragment,e),b(D.$$.fragment,e),b(le.$$.fragment,e),b(ne.$$.fragment,e),b(se.$$.fragment,e),b(_.$$.fragment,e),b(me.$$.fragment,e),Se=!0)},o(e){h(i.$$.fragment,e),h(k.$$.fragment,e),h(U.$$.fragment,e),h(N.$$.fragment,e),h(G.$$.fragment,e),h(R.$$.fragment,e),h(X.$$.fragment,e),h(Y.$$.fragment,e),h(F.$$.fragment,e),h(P.$$.fragment,e),h(K.$$.fragment,e),h(D.$$.fragment,e),h(le.$$.fragment,e),h(ne.$$.fragment,e),h(se.$$.fragment,e),h(_.$$.fragment,e),h(me.$$.fragment,e),Se=!1},d(e){e&&(l(a),l(y),l(p),l(T),l(I),l(fe),l(B),l(Me),l(V),l(be),l(L),l(he),l(E),l(ve),l(ye),l(Te),l(q),l(ge),l($e),l(we),l(je),l(H),l(xe),l(Je),l(Ze),l(S),l(Ce),l(g),l(Ue),l(z),l(Ge),l(_e),l(A),l(We),l(Ie),l(Be),l(O),l(Ve),l(ee),l(Le),l($),l(Ee),l(ke),l(qe),l(oe),l(Ne),l(ae),l(Re),l(He),l(ie),l(Xe),l(Ye),l(de)),l(u),v(i,e),v(k,e),v(U,e),v(N,e),v(G,e),v(R,e),v(X,e),v(Y,e),v(F),v(P,e),v(K,e),v(D,e),v(le),v(ne,e),v(se,e),v(_,e),v(me,e)}}}const Ut='{"title":"Utiliser les Tools dans LlamaIndex","local":"utiliser-les-tools-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 des Toolspecs","local":"créer-des-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 Gt(C){return Tt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Et extends gt{constructor(u){super(),$t(this,u,Gt,Ct,yt,{})}}export{Et as component};
