diff --git a/404.html b/404.html
index c09a559a..9fe76971 100644
--- a/404.html
+++ b/404.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/assets/js/8ad336ef.343653ae.js b/assets/js/8ad336ef.343653ae.js
deleted file mode 100644
index c511f437..00000000
--- a/assets/js/8ad336ef.343653ae.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[9476],{6746:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var s=n(5893),a=n(1151);const i={sidebar_position:10,description:"Examples"},o="Code Examples",r={id:"libraries/examples",title:"Code Examples",description:"Examples",source:"@site/docs/libraries/10-examples.md",sourceDirName:"libraries",slug:"/libraries/examples",permalink:"/docs/libraries/examples",draft:!1,unlisted:!1,editUrl:"https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/10-examples.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Examples"},sidebar:"tutorialSidebar",previous:{title:"How AI Builders can process AI Tasks?",permalink:"/docs/libraries/process-tasks"},next:{title:"Getting Started with the Tutorials",permalink:"/docs/tutorials/"}},p={},u=[{value:"AI Agents",id:"ai-agents",level:2},{value:"Youtube Agent (Python)",id:"youtube-agent-python",level:3},{value:"The Text to Speech Agent (Typescript)",id:"the-text-to-speech-agent-typescript",level:3},{value:"Simple Text to Speech Agent implementation",id:"simple-text-to-speech-agent-implementation",level:3},{value:"Agent2Agent implementation (Youtube to Speech)",id:"agent2agent-implementation-youtube-to-speech",level:3},{value:"Notebooks",id:"notebooks",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"code-examples",children:"Code Examples"})}),"\n",(0,s.jsx)(t.p,{children:"The Payment Libraries allow you to interact with the Nevermined platform to create and manage Payment Plans and AI Agents."}),"\n",(0,s.jsx)(t.h2,{id:"ai-agents",children:"AI Agents"}),"\n",(0,s.jsx)(t.h3,{id:"youtube-agent-python",children:"Youtube Agent (Python)"}),"\n",(0,s.jsx)(t.p,{children:"The Youtube Summarizer it's a small Python AI Agent with Nevermined Payments Library integrated which receives a Youtube video URL and returns a summary of the transcription of the video."}),"\n",(0,s.jsx)(t.p,{children:"The Agent uses LangChain to retrieve the transcription and summarize it via OpenAI integration."}),"\n",(0,s.jsxs)(t.p,{children:["Here is the ",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/youtube-agent/",children:"Youtube Summarizer Agent code"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"As you can see, the Agent is a simple Python script that implements a callback function to process the AI Tasks that are sent by the users."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"class YoutubeAgent:\n    def __init__(self, payment):\n        self.payment = payment\n\n    async def run(self, data):\n        print(\"Data received:\", data)\n        step = self.payment.ai_protocol.get_step(data['step_id'])\n\n        loader = YoutubeLoader.from_youtube_url(\n            youtube_url=step['input_query'],\n            add_video_info=False, \n            language=[\"en\"],\n            transcript_format=TranscriptFormat.CHUNKS, \n            chunk_size_seconds=30,\n        )\n        # Load the documents from the video\n        docs = loader.load()\n        result = \" \".join(doc.page_content for doc in docs)\n\n        llm = OpenAI(api_key=openai_api_key)\n        summarize_chain = load_summarize_chain(llm, chain_type=\"map_reduce\")\n        docs = [Document(page_content=result)]\n        summary = summarize_chain.invoke(docs)\n        print('Summary:', summary['output_text'])\n\n\n        # Use the `payment` object to update the step\n        self.payment.ai_protocol.update_step(\n            did=data['did'],\n            task_id=data['task_id'], \n            step_id=data['step_id'],\n            step={'step_id': data['step_id'],\n                    'task_id': data[\"task_id\"], \n                    'step_status': AgentExecutionStatus.Completed.value,\n                    'output': summary['output_text'],\n                    'is_last': True\n                    },\n        )\n"})}),"\n",(0,s.jsxs)(t.p,{children:["As you can see the fuction ",(0,s.jsx)(t.code,{children:"run"})," is the callback function that processes the AI Task. The function receives the data from the AI Task and uses it to process the task. In this case, the function uses the data to retrieve the Youtube video URL, transcribe it, and summarize it. After processing you have to update the step with the result."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:'async def main():\n    # Initialize the Payments object\n    payment = Payments(\n        app_id="youtube_agent", \n        nvm_api_key=nvm_api_key, \n        version="1.0.0", \n        environment=Environment.get_environment(environment), \n        ai_protocol=True, \n        web_socket_options={\'bearer_token\': nvm_api_key}\n    )\n\n    # Initialize the YoutubeAgent with the payment instance\n    agent = YoutubeAgent(payment)\n\n    # Subscribe to the ai_protocol with the agent\'s `run` method\n    subscription_task = asyncio.get_event_loop().create_task(payment.ai_protocol.subscribe(agent.run, join_account_room=True))\n    try:\n        await subscription_task\n    except asyncio.CancelledError:\n        print("Subscription task was cancelled")\n'})}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"main"})," function initializes the Payments object and the YoutubeAgent object. Then it subscribes to the ai_protocol with the agent's ",(0,s.jsx)(t.code,{children:"run"})," method.\nIn this example we are asuming that the agent is processing the AI task in one step, but you can implement the agent to process multiple steps."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"class YoutubeAgent:\n    def __init__(self, payment):\n        self.payment = payment\n\n    async def run(self, data):\n        step = self.payment.ai_protocol.get_step(data['step_id'])\n        if(step['step_status'] != AgentExecutionStatus.Pending.value):\n            print('Step status is not pending')\n            return\n        \n        if(step['name'] == 'init'):\n            transcript_step_id = generate_step_id()\n            self.payment.ai_protocol.create_steps(did=step['did'], task_id=step['task_id'], steps={\"steps\" : [{\n                'task_id': step['task_id'],\n                'step_id': transcript_step_id,\n                'input_query': step['input_query'],\n                'name': 'transcript',\n                'predecessor': step['step_id'],\n                'is_last': False,\n                'order': 2\n                },\n                {                \n                'task_id': step['task_id'],\n                'step_id': generate_step_id(),\n                'predecessor': transcript_step_id,\n                'input_query': '',\n                'name': 'summarize',\n                'is_waiting': True, \n                'is_last': True,\n                'order': 3\n            }]})\n            self.payment.ai_protocol.update_step(\n                did=step['did'],\n                task_id=step['task_id'], \n                step_id=step['step_id'],\n                step={'step_id': step['step_id'],\n                        'task_id': step[\"task_id\"], \n                        'step_status': AgentExecutionStatus.Completed.value,\n                        'input_query': step['input_query'],\n                        'output': step['input_query'],\n                        'is_last': False\n                        },\n            )\n        \n        elif (step['name'] == 'transcript'):\n            loader = YoutubeLoader.from_youtube_url(\n                youtube_url=step['input_query'],\n                add_video_info=False, \n                language=[\"en\"],\n                transcript_format=TranscriptFormat.CHUNKS, \n                chunk_size_seconds=30,\n            )\n            # Load the documents from the video\n            docs = loader.load()\n            result = \" \".join(doc.page_content for doc in docs)\n            self.payment.ai_protocol.update_step(\n                did=step['did'],\n                task_id=step['task_id'], \n                step_id=step['step_id'],\n                step={'step_id': step['step_id'],\n                        'task_id': step[\"task_id\"], \n                        'step_status': AgentExecutionStatus.Completed.value,\n                        'output': result,\n                        'is_last': False\n                        },\n            )\n        \n        elif (step['name'] == 'summarize'):\n            llm = OpenAI(api_key=openai_api_key)\n            summarize_chain = load_summarize_chain(llm, chain_type=\"map_reduce\")\n            docs = [Document(page_content=step[\"input_query\"])]\n            summary = summarize_chain.invoke(docs)\n            print('Summary:', summary['output_text'])\n            # Use the `payment` object to update the step\n            self.payment.ai_protocol.update_step(\n                did=step['did'],\n                task_id=step['task_id'], \n                step_id=step['step_id'],\n                step={'step_id': step['step_id'],\n                        'task_id': step[\"task_id\"], \n                        'step_status': AgentExecutionStatus.Completed.value,\n                        'output': summary['output_text'],\n                        'is_last': True\n                        },\n            )\n        \n        else:\n            print(f\"Unknown step name: {step['name']}\")\n"})}),"\n",(0,s.jsx)(t.p,{children:"In this example, we are assuming that the agent is processing the AI task in multiple steps. The agent receives the data from the AI Task and uses it to process the task.\nAfter processing you have to update the step with the result. Automatically the output of the previous step is the input of the next step."}),"\n",(0,s.jsx)(t.h3,{id:"the-text-to-speech-agent-typescript",children:"The Text to Speech Agent (Typescript)"}),"\n",(0,s.jsx)(t.p,{children:"The Text to Speech Agent is a simple Typescript AI Agent with Nevermined Payments Library integrated which receives a text and returns an audio file with the speech of the text."}),"\n",(0,s.jsx)(t.p,{children:"The Agent uses OpenAPI to generate the audio file, which after the generation is uploaded to IPFS."}),"\n",(0,s.jsxs)(t.p,{children:["Here is the ",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/agent-text2speech-js",children:"Text to Speech agent code"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["In this agent we created 2 separate implementations, one for a single step agent generating the audio file, and another integrating the above Youtube agent (",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/agent-text2speech-js/blob/main/src/agent2agent.ts",children:"agent2agent implementation"}),")."]}),"\n",(0,s.jsx)(t.h3,{id:"simple-text-to-speech-agent-implementation",children:"Simple Text to Speech Agent implementation"}),"\n",(0,s.jsxs)(t.p,{children:["As you can see, the Agent is a ",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/agent-text2speech-js/blob/main/src/main.ts",children:"simple Typescript code"})," that implements a callback function (",(0,s.jsx)(t.code,{children:"processSteps"}),") to process the AI Tasks that are sent by the users."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"async function main() {  \n  openaiTools = new OpenAITools(OPEN_API_KEY!)\n  payments = getPaymentsInstance(NVM_API_KEY!, NVM_ENVIRONMENT)\n  logger.info(`Connected to Nevermined Network: ${NVM_ENVIRONMENT}`)  \n\n  await payments.query.subscribe(processSteps, opts)\n}\n\n// This callback function is invoked when a new AI Task is received\nasync function processSteps(data: any) {\n  \n  const eventData = JSON.parse(data)\n  logger.info(`Received event: ${JSON.stringify(eventData)}`)\n  const step = await payments.query.getStep(eventData.step_id)  \n  logger.info(`Processing Step ${step.task_id} - ${step.step_id} [ ${step.step_status} ]: ${step.input_query}`)\n  \n  if (step.step_status != AgentExecutionStatus.Pending) {\n    logger.warn(`Step ${step.step_id} is not pending. Skipping...`)\n    return\n  }\n  \n  logger.info(`Generating Speech from input query`)\n  const fileSpeech = await openaiTools.text2speech(step.input_query)\n  logger.info(`Speech file generated: ${fileSpeech}`)\n  const cid = await uploadSpeechFileToIPFS(fileSpeech)\n  logger.info(`Speech file uploaded to IPFS: ${cid}`)\n\n\n  const updateResult = await payments.query.updateStep(step.did, {\n    ...step,\n    step_status: AgentExecutionStatus.Completed,\n    is_last: true,\n    output: 'success',    \n    output_artifacts: [cid],\n    cost: 5\n  })\n  if (updateResult.status === 201)\n    logger.info(`Step ${step.step_id} completed!`)\n  else\n    logger.error(`Error updating step ${step.step_id} - ${JSON.stringify(updateResult.data)}`)\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"agent2agent-implementation-youtube-to-speech",children:"Agent2Agent implementation (Youtube to Speech)"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:"(Text2Speech + Youtube Summarizer) = Youtube2Speech\n"})}),"\n",(0,s.jsx)(t.p,{children:"In this example we are going to show you how to integrate an external agent (Youtube summarizer) in our agent. This is implemented using multiple steps."}),"\n",(0,s.jsxs)(t.p,{children:["First we implement our ",(0,s.jsx)(t.code,{children:"main"})," function to initialize the Payments object and subscribe to receive new tasks. This is as we saw before:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"async function main() {  \n  openaiTools = new OpenAITools(OPEN_API_KEY!)\n  payments = getPaymentsInstance(NVM_API_KEY!, NVM_ENVIRONMENT)\n  logger.info(`Connected to Nevermined Network: ${NVM_ENVIRONMENT}`)  \n\n  await payments.query.subscribe(processSteps, opts)\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["But in this example our logic is a bit more sophisticated because when the ",(0,s.jsx)(t.code,{children:"processSteps"})," callback function is invoked, we check the step name to know which step we are processing."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"async function processSteps(data: any) {\n  \n  const eventData = JSON.parse(data)\n  logger.info(`Received event: ${JSON.stringify(eventData)}`)\n  const step = await payments.query.getStep(eventData.step_id)  \n  logger.info(`Processing Step ${step.task_id} - ${step.step_id} [ ${step.step_status} ]: ${step.input_query}`)\n\n  if (step.step_status != AgentExecutionStatus.Pending) {\n    logger.warn(`Step ${step.step_id} is not pending. Skipping...`)\n    return\n  }\n  \n  // Check the step name to know which step we are processing\n\n  // ....\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["When a new Task is created by the user, automatically is created a step with name ",(0,s.jsx)(t.code,{children:"init"}),". What we do in this case is create the execution plan of the task, which in our example involves 2 steps: ",(0,s.jsx)(t.code,{children:"transcribe"})," and ",(0,s.jsx)(t.code,{children:"text2speech"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"if (step.name === 'init') {\n    logger.info(`Setting up steps necessary to resolve the task ...`)\n    const transcribeStepId = generateStepId()\n    const createResult = await payments.query.createSteps(step.did, step.task_id, { steps: [{\n        step_id: transcribeStepId,\n        task_id: step.task_id,\n        predecessor: step.step_id,\n        input_query: step.input_query,        \n        name: 'transcribe',\n        is_last: false,\n        cost: 20,\n        order: 2\n      }, {  \n        step_id: generateStepId(),              \n        task_id: step.task_id,\n        predecessor: transcribeStepId,        \n        input_query: '',\n        name: 'text2speech',\n        is_last: true,\n        order: 3\n    }]})\n    createResult.status === 201 ? logger.info('Steps created successfully') : logger.error(`Error creating steps: ${JSON.stringify(createResult.data)}`)      \n\n    const updateResult = await payments.query.updateStep(step.did, {\n      ...step,\n      step_status: AgentExecutionStatus.Completed,\n      output: step.input_query\n    })\n    updateResult.status === 201 ? logger.info(`Step ${step.name} : ${step.step_id} completed!`) : logger.error(`Error updating step ${step.step_id} - ${JSON.stringify(updateResult.data)}`)\n\n  } else if (step.name === 'transcribe') {\n    // Here we integrate with the Youtube Summarizer agent\n\n  } else if (step.name === 'text2speech') {\n    // Here we generate the speech from the Youtube summarized text\n\n  } else {    \n    logger.warn(`Step ${step.name} is not recognized. Skipping...`)\n    return\n  }\n\n"})}),"\n",(0,s.jsxs)(t.p,{children:["When the step ",(0,s.jsx)(t.code,{children:"init"})," is completed, it will add 2 additional steps to the task and our agent will receive the next step to process. Because the ",(0,s.jsx)(t.code,{children:"text2speech"})," steps depend on the completion of the ",(0,s.jsx)(t.code,{children:"transcribe"})," step, we will receive first that one, and there is where we integrate with the Youtube Summarizer:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"  } else if (step.name === 'transcribe') {\n    logger.info(`Transcribing video to text with external agent ...`)\n\n    // First we check if we have enough balance to query the Youtube AI Agent\n    const balanceResult = await payments.getPlanBalance(PLAN_YOUTUBE_DID)\n    logger.info(`Youtube Plan balance: ${balanceResult.balance}`)\n\n    if (balanceResult.balance < 1) { // If we don't have enough balance, we order more credits\n      logger.warn('Insufficient balance to query the Youtube AI Agent')\n      logger.info('Ordering more credits...')\n      await payments.orderPlan(PLAN_YOUTUBE_DID)\n    }\n\n    // Create the AI Task to query the Youtube Agent with the youtube video URL\n    const aiTask = {\n      query: step.input_query,\n      name: \"transcribe\",\n      \"additional_params\": [],\n      \"artifacts\": []\n    }\n\n    logger.info(`Querying Youtube Agent DID: ${AGENT_YOUTUBE_DID} with input: ${step.input_query}`)\n\n    // Get the JWT access token and the Proxy we must use to query theYoutube Agent\n    const accessConfig = await payments.getServiceAccessConfig(AGENT_YOUTUBE_DID)\n\n    // Create the task\n    const taskResult = await payments.query.createTask(AGENT_YOUTUBE_DID, aiTask, accessConfig)\n\n    if (taskResult.status !== 201) {\n      logger.error(`Failed to create task: ${taskResult.data}`)\n      return\n    }\n    logger.info(`Task created: ${JSON.stringify(taskResult.data)}`)\n\n    const taskId = taskResult.data.task.task_id\n    const did = taskResult.data.task.did\n\n    let fullTask\n    let resultFound = false\n    let counter = 1\n\n    // We iterate a few times until the task is completed\n    while (counter <= MAX_RETRIES) {\n      logger.info(`Checking Youtube task status for task ID [${counter}]: ${taskId}`)\n      const fullTaskResult = await payments.query.getTaskWithSteps(did, taskId, accessConfig)\n      \n      if (fullTaskResult.status !== 200) {\n        logger.error(`Failed to get Youtube task: ${fullTaskResult.data}`)\n        process.exit(1)  \n      }\n      fullTask = fullTaskResult.data.task\n      logger.info(`Youtube Task status: ${JSON.stringify(fullTask.task_status)}`)\n      if (fullTask.task_status === AgentExecutionStatus.Completed) {\n        logger.info(`Youtube Task completed with cost: ${fullTask.cost}`)\n        logger.info(`  Output: ${fullTask.output}`)\n        resultFound = true\n        break\n      } else if (fullTask.task_status === AgentExecutionStatus.Failed) {\n        logger.error(`Task failed with message ${fullTask.output}`)        \n        break\n      }\n      counter++\n      await sleep(SLEEP_INTERVAL)\n    }\n\n    let updateResult    \n    if (!resultFound) { // If for whatever reason the task is not completed in time, we update the step with the error\n      logger.error('Task not completed in time')\n      updateResult = await payments.query.updateStep(step.did, {\n        ...step,\n        step_status: AgentExecutionStatus.Failed,\n        is_last: true,\n        output: 'Task not completed in time '\n      })\n    } else { // If the task is completed, we update the step with the output result\n      updateResult = await payments.query.updateStep(step.did, {\n        ...step,\n        step_status: AgentExecutionStatus.Completed,\n        output: fullTask.output,\n        output_additional: fullTask.output_additional,\n        output_artifacts: fullTask.output_artifacts,\n        cost: fullTask.cost\n      })\n    }    \n\n"})}),"\n",(0,s.jsxs)(t.p,{children:["At this stage if everything worked correctly we must have a few credits and the summary of the Youtube video. Because the ",(0,s.jsx)(t.code,{children:"transcribe"})," is completed now we will receive an update on the ",(0,s.jsx)(t.code,{children:"text2speech"})," step, meaning now we can process that step:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"\n  } else if (step.name === 'text2speech') {\n\n    logger.info(`Converting text to audio ...`)\n    const fileSpeech = await openaiTools.text2speech(step.input_query)\n    logger.info(`Speech file generated: ${fileSpeech}`)\n    const cid = await uploadSpeechFileToIPFS(fileSpeech)\n    logger.info(`Speech file uploaded to IPFS: ${cid}`)\n    \n    const updateResult = await payments.query.updateStep(step.did, {\n      ...step,\n      step_status: AgentExecutionStatus.Completed,\n      is_last: true,\n      output: 'hey baby, we got this!',\n      output_additional: '{\"result\": \"success\"}',\n      output_artifacts: [cid],\n      cost: 5\n    })\n  }\n"})}),"\n",(0,s.jsxs)(t.p,{children:["If the ",(0,s.jsx)(t.code,{children:"text2speech"})," step is completed, we will update the step with the result of the audio file and the cost of the step. And because the ",(0,s.jsx)(t.code,{children:"text2speech"})," step is the last one, when we update the step this will resolve the whole task and calculate the total cost as the sum of all the individual cost of the steps."]}),"\n",(0,s.jsx)(t.h2,{id:"notebooks",children:"Notebooks"}),"\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.a,{href:"https://colab.research.google.com/drive/1Pqrfm3P5t8P9DS7Hwp3v72jhRrB2KsP5#scrollTo=dghI-HwVgulp",children:"Python Notebook"})," example, we will show you how to use the Payments Library to create Payment Plans, register AI Agents, and query them."]})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>o});var s=n(7294);const a={},i=s.createContext(a);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8ad336ef.58a1a34a.js b/assets/js/8ad336ef.58a1a34a.js
new file mode 100644
index 00000000..8995ce0f
--- /dev/null
+++ b/assets/js/8ad336ef.58a1a34a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[9476],{6746:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var s=n(5893),a=n(1151);const i={sidebar_position:10,description:"Examples"},o="Code Examples",r={id:"libraries/examples",title:"Code Examples",description:"Examples",source:"@site/docs/libraries/10-examples.md",sourceDirName:"libraries",slug:"/libraries/examples",permalink:"/docs/libraries/examples",draft:!1,unlisted:!1,editUrl:"https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/10-examples.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,description:"Examples"},sidebar:"tutorialSidebar",previous:{title:"How AI Builders can process AI Tasks?",permalink:"/docs/libraries/process-tasks"},next:{title:"Getting Started with the Tutorials",permalink:"/docs/tutorials/"}},p={},d=[{value:"AI Agents",id:"ai-agents",level:2},{value:"Youtube Agent (Python)",id:"youtube-agent-python",level:3},{value:"The Text to Speech Agent (Typescript)",id:"the-text-to-speech-agent-typescript",level:3},{value:"Simple Text to Speech Agent implementation",id:"simple-text-to-speech-agent-implementation",level:3},{value:"Agent2Agent implementation (Youtube to Speech)",id:"agent2agent-implementation-youtube-to-speech",level:3},{value:"Notebooks",id:"notebooks",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"code-examples",children:"Code Examples"})}),"\n",(0,s.jsx)(t.p,{children:"The Payment Libraries allow you to interact with the Nevermined platform to create and manage Payment Plans and AI Agents."}),"\n",(0,s.jsx)(t.h2,{id:"ai-agents",children:"AI Agents"}),"\n",(0,s.jsx)(t.h3,{id:"youtube-agent-python",children:"Youtube Agent (Python)"}),"\n",(0,s.jsx)(t.p,{children:"The Youtube Summarizer it's a small Python AI Agent with Nevermined Payments Library integrated which receives a Youtube video URL and returns a summary of the transcription of the video."}),"\n",(0,s.jsx)(t.p,{children:"The Agent uses LangChain to retrieve the transcription and summarize it via OpenAI integration."}),"\n",(0,s.jsxs)(t.p,{children:["Here is the ",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/youtube-agent/",children:"Youtube Summarizer Agent code"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"As you can see, the Agent is a simple Python script that implements a callback function to process the AI Tasks that are sent by the users."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"class YoutubeAgent:\n    def __init__(self, payment):\n        self.payment = payment\n\n    async def run(self, data):\n        print(\"Data received:\", data)\n        step = self.payment.ai_protocol.get_step(data['step_id'])\n        if(step['step_status'] != AgentExecutionStatus.Pending.value):\n            print('Step status is not pending')\n            return\n\n        await self.payment.ai_protocol.log_task(TaskLog(task_id=step['task_id'], message='Fetching steps...', level='info'))\n        loader = YoutubeLoader.from_youtube_url(\n            youtube_url=step['input_query'],\n            add_video_info=False, \n            language=[\"en\", \"es\", \"pt\", \"uk\", \"ru\", \"fr\", \"zh-Hans\", \"zh-Hant\", \"de\"],           \n            transcript_format=TranscriptFormat.CHUNKS, \n            chunk_size_seconds=30,\n        )\n        # Load the documents from the video\n        await self.payment.ai_protocol.log_task(TaskLog(task_id=step['task_id'], message='Load the documents from the video', level='info'))\n        try:\n            docs = loader.load()\n            if not docs:\n                print(\"No transcript available for the video.\")\n                await self.payment.ai_protocol.log_task(TaskLog(task_id=step['task_id'], message='No transcript available.', level='error', task_status=AgentExecutionStatus.Failed.value))\n                return\n        except Exception as e:\n            print(\"Error parsing transcript:\", e)\n            await self.payment.ai_protocol.log_task(TaskLog(task_id=step['task_id'], message='Error parsing transcript', level='error', task_status=AgentExecutionStatus.Failed.value))\n            return\n        result = \" \".join(doc.page_content for doc in docs)\n        \n\n        llm = OpenAI(api_key=openai_api_key)\n        await self.payment.ai_protocol.log_task(TaskLog(task_id=step['task_id'], message='Summarizing...', level='info'))\n        summarize_chain = load_summarize_chain(llm, chain_type=\"map_reduce\")\n        docs = [Document(page_content=result)]\n        summary = summarize_chain.invoke(docs)\n        print('Summary:', summary['output_text'])\n\n        # Use the `payment` object to update the step\n        self.payment.ai_protocol.update_step(\n            did=data['did'],\n            task_id=data['task_id'], \n            step_id=data['step_id'],\n            step={'step_id': data['step_id'],\n                    'task_id': data[\"task_id\"], \n                    'step_status': AgentExecutionStatus.Completed.value,\n                    'output': summary['output_text'],\n                    'is_last': True\n                    },\n        )\n        await self.payment.ai_protocol.log_task(TaskLog(task_id=step['task_id'], message='Summary ready.', level='info', task_status=AgentExecutionStatus.Completed.value))\n"})}),"\n",(0,s.jsxs)(t.p,{children:["As you can see the fuction ",(0,s.jsx)(t.code,{children:"run"})," is the callback function that processes the AI Task. The function receives the data from the AI Task and uses it to process the task. In this case, the function uses the data to retrieve the Youtube video URL, transcribe it, and summarize it. After processing you have to update the step with the result."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:'async def main():\n    # Initialize the Payments object\n    payment = Payments(\n        app_id="youtube_agent", \n        nvm_api_key=nvm_api_key, \n        version="1.0.0", \n        environment=Environment.get_environment(environment), \n        ai_protocol=True, \n        web_socket_options={\'bearer_token\': nvm_api_key}\n    )\n\n    # Initialize the YoutubeAgent with the payment instance\n    agent = YoutubeAgent(payment)\n\n    # Subscribe to the ai_protocol with the agent\'s `run` method\n    subscription_task = asyncio.get_event_loop().create_task(payment.ai_protocol.subscribe(agent.run, join_account_room=True))\n    try:\n        await subscription_task\n    except asyncio.CancelledError:\n        print("Subscription task was cancelled")\n'})}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"main"})," function initializes the Payments object and the YoutubeAgent object. Then it subscribes to the ai_protocol with the agent's ",(0,s.jsx)(t.code,{children:"run"})," method.\nIn this example we are asuming that the agent is processing the AI task in one step, but you can implement the agent to process multiple steps."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"class YoutubeAgent:\n    def __init__(self, payment):\n        self.payment = payment\n\n    async def run(self, data):\n        step = self.payment.ai_protocol.get_step(data['step_id'])\n        if(step['step_status'] != AgentExecutionStatus.Pending.value):\n            print('Step status is not pending')\n            return\n        \n        if(step['name'] == 'init'):\n            transcript_step_id = generate_step_id()\n            self.payment.ai_protocol.create_steps(did=step['did'], task_id=step['task_id'], steps={\"steps\" : [{\n                'task_id': step['task_id'],\n                'step_id': transcript_step_id,\n                'input_query': step['input_query'],\n                'name': 'transcript',\n                'predecessor': step['step_id'],\n                'is_last': False,\n                'order': 2\n                },\n                {                \n                'task_id': step['task_id'],\n                'step_id': generate_step_id(),\n                'predecessor': transcript_step_id,\n                'input_query': '',\n                'name': 'summarize',\n                'is_waiting': True, \n                'is_last': True,\n                'order': 3\n            }]})\n            self.payment.ai_protocol.update_step(\n                did=step['did'],\n                task_id=step['task_id'], \n                step_id=step['step_id'],\n                step={'step_id': step['step_id'],\n                        'task_id': step[\"task_id\"], \n                        'step_status': AgentExecutionStatus.Completed.value,\n                        'input_query': step['input_query'],\n                        'output': step['input_query'],\n                        'is_last': False\n                        },\n            )\n        \n        elif (step['name'] == 'transcript'):\n            loader = YoutubeLoader.from_youtube_url(\n                youtube_url=step['input_query'],\n                add_video_info=False, \n                language=[\"en\"],\n                transcript_format=TranscriptFormat.CHUNKS, \n                chunk_size_seconds=30,\n            )\n            # Load the documents from the video\n            docs = loader.load()\n            result = \" \".join(doc.page_content for doc in docs)\n            self.payment.ai_protocol.update_step(\n                did=step['did'],\n                task_id=step['task_id'], \n                step_id=step['step_id'],\n                step={'step_id': step['step_id'],\n                        'task_id': step[\"task_id\"], \n                        'step_status': AgentExecutionStatus.Completed.value,\n                        'output': result,\n                        'is_last': False\n                        },\n            )\n        \n        elif (step['name'] == 'summarize'):\n            llm = OpenAI(api_key=openai_api_key)\n            summarize_chain = load_summarize_chain(llm, chain_type=\"map_reduce\")\n            docs = [Document(page_content=step[\"input_query\"])]\n            summary = summarize_chain.invoke(docs)\n            print('Summary:', summary['output_text'])\n            # Use the `payment` object to update the step\n            self.payment.ai_protocol.update_step(\n                did=step['did'],\n                task_id=step['task_id'], \n                step_id=step['step_id'],\n                step={'step_id': step['step_id'],\n                        'task_id': step[\"task_id\"], \n                        'step_status': AgentExecutionStatus.Completed.value,\n                        'output': summary['output_text'],\n                        'is_last': True\n                        },\n            )\n        \n        else:\n            print(f\"Unknown step name: {step['name']}\")\n"})}),"\n",(0,s.jsx)(t.p,{children:"In this example, we are assuming that the agent is processing the AI task in multiple steps. The agent receives the data from the AI Task and uses it to process the task.\nAfter processing you have to update the step with the result. Automatically the output of the previous step is the input of the next step."}),"\n",(0,s.jsx)(t.h3,{id:"the-text-to-speech-agent-typescript",children:"The Text to Speech Agent (Typescript)"}),"\n",(0,s.jsx)(t.p,{children:"The Text to Speech Agent is a simple Typescript AI Agent with Nevermined Payments Library integrated which receives a text and returns an audio file with the speech of the text."}),"\n",(0,s.jsx)(t.p,{children:"The Agent uses OpenAPI to generate the audio file, which after the generation is uploaded to IPFS."}),"\n",(0,s.jsxs)(t.p,{children:["Here is the ",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/agent-text2speech-js",children:"Text to Speech agent code"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["In this agent we created 2 separate implementations, one for a single step agent generating the audio file, and another integrating the above Youtube agent (",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/agent-text2speech-js/blob/main/src/agent2agent.ts",children:"agent2agent implementation"}),")."]}),"\n",(0,s.jsx)(t.h3,{id:"simple-text-to-speech-agent-implementation",children:"Simple Text to Speech Agent implementation"}),"\n",(0,s.jsxs)(t.p,{children:["As you can see, the Agent is a ",(0,s.jsx)(t.a,{href:"https://github.com/nevermined-io/agent-text2speech-js/blob/main/src/main.ts",children:"simple Typescript code"})," that implements a callback function (",(0,s.jsx)(t.code,{children:"processSteps"}),") to process the AI Tasks that are sent by the users."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"async function main() {  \n  openaiTools = new OpenAITools(OPEN_API_KEY!)\n  payments = getPaymentsInstance(NVM_API_KEY!, NVM_ENVIRONMENT)\n  logger.info(`Connected to Nevermined Network: ${NVM_ENVIRONMENT}`)  \n\n  await payments.query.subscribe(processSteps, opts)\n}\n\n// This callback function is invoked when a new AI Task is received\nasync function processSteps(data: any) {\n  \n  const eventData = JSON.parse(data)\n  logger.info(`Received event: ${JSON.stringify(eventData)}`)\n  const step = await payments.query.getStep(eventData.step_id)  \n  logger.info(`Processing Step ${step.task_id} - ${step.step_id} [ ${step.step_status} ]: ${step.input_query}`)\n  \n  if (step.step_status != AgentExecutionStatus.Pending) {\n    logger.warn(`Step ${step.step_id} is not pending. Skipping...`)\n    return\n  }\n  \n  logger.info(`Generating Speech from input query`)\n  const fileSpeech = await openaiTools.text2speech(step.input_query)\n  logger.info(`Speech file generated: ${fileSpeech}`)\n  const cid = await uploadSpeechFileToIPFS(fileSpeech)\n  logger.info(`Speech file uploaded to IPFS: ${cid}`)\n\n\n  const updateResult = await payments.query.updateStep(step.did, {\n    ...step,\n    step_status: AgentExecutionStatus.Completed,\n    is_last: true,\n    output: 'success',    \n    output_artifacts: [cid],\n    cost: 5\n  })\n  if (updateResult.status === 201)\n    logger.info(`Step ${step.step_id} completed!`)\n  else\n    logger.error(`Error updating step ${step.step_id} - ${JSON.stringify(updateResult.data)}`)\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"agent2agent-implementation-youtube-to-speech",children:"Agent2Agent implementation (Youtube to Speech)"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:"(Text2Speech + Youtube Summarizer) = Youtube2Speech\n"})}),"\n",(0,s.jsx)(t.p,{children:"In this example we are going to show you how to integrate an external agent (Youtube summarizer) in our agent. This is implemented using multiple steps."}),"\n",(0,s.jsxs)(t.p,{children:["First we implement our ",(0,s.jsx)(t.code,{children:"main"})," function to initialize the Payments object and subscribe to receive new tasks. This is as we saw before:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"async function main() {  \n  openaiTools = new OpenAITools(OPEN_API_KEY!)\n  payments = getPaymentsInstance(NVM_API_KEY!, NVM_ENVIRONMENT)\n  logger.info(`Connected to Nevermined Network: ${NVM_ENVIRONMENT}`)  \n\n  await payments.query.subscribe(processSteps, opts)\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["But in this example our logic is a bit more sophisticated because when the ",(0,s.jsx)(t.code,{children:"processSteps"})," callback function is invoked, we check the step name to know which step we are processing."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"async function processSteps(data: any) {\n  \n  const eventData = JSON.parse(data)\n  logger.info(`Received event: ${JSON.stringify(eventData)}`)\n  const step = await payments.query.getStep(eventData.step_id)  \n  logger.info(`Processing Step ${step.task_id} - ${step.step_id} [ ${step.step_status} ]: ${step.input_query}`)\n\n  if (step.step_status != AgentExecutionStatus.Pending) {\n    logger.warn(`Step ${step.step_id} is not pending. Skipping...`)\n    return\n  }\n  \n  // Check the step name to know which step we are processing\n\n  // ....\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["When a new Task is created by the user, automatically is created a step with name ",(0,s.jsx)(t.code,{children:"init"}),". What we do in this case is create the execution plan of the task, which in our example involves 2 steps: ",(0,s.jsx)(t.code,{children:"transcribe"})," and ",(0,s.jsx)(t.code,{children:"text2speech"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"if (step.name === 'init') {\n    logger.info(`Setting up steps necessary to resolve the task ...`)\n    const transcribeStepId = generateStepId()\n    const createResult = await payments.query.createSteps(step.did, step.task_id, { steps: [{\n        step_id: transcribeStepId,\n        task_id: step.task_id,\n        predecessor: step.step_id,\n        input_query: step.input_query,        \n        name: 'transcribe',\n        is_last: false,\n        cost: 20,\n        order: 2\n      }, {  \n        step_id: generateStepId(),              \n        task_id: step.task_id,\n        predecessor: transcribeStepId,        \n        input_query: '',\n        name: 'text2speech',\n        is_last: true,\n        order: 3\n    }]})\n    createResult.status === 201\n      ? payments.query.logTask({ task_id: step.task_id, level: 'info', message: 'Steps created successfully' })\n      : payments.query.logTask({\n          task_id: step.task_id,\n          level: 'error',\n          message: `Error creating steps: ${JSON.stringify(createResult.data)}`,\n        })\n\n    const updateResult = await payments.query.updateStep(step.did, {\n      ...step,\n      step_status: AgentExecutionStatus.Completed,\n      output: step.input_query,\n    })\n    updateResult.status === 201\n      ? payments.query.logTask({\n          task_id: step.task_id,\n          level: 'info',\n          message: `Step ${step.name} : ${step.step_id} completed!`,\n        })\n      : payments.query.logTask({\n          task_id: step.task_id,\n          level: 'error',\n          message: `Error updating step ${step.step_id} - ${JSON.stringify(updateResult.data)}`,\n        })\n\n  } else if (step.name === 'transcribe') {\n    // Here we integrate with the Youtube Summarizer agent\n\n  } else if (step.name === 'text2speech') {\n    // Here we generate the speech from the Youtube summarized text\n\n  } else {    \n    logger.warn(`Step ${step.name} is not recognized. Skipping...`)\n    return\n  }\n\n"})}),"\n",(0,s.jsxs)(t.p,{children:["When the step ",(0,s.jsx)(t.code,{children:"init"})," is completed, it will add 2 additional steps to the task and our agent will receive the next step to process. Because the ",(0,s.jsx)(t.code,{children:"text2speech"})," steps depend on the completion of the ",(0,s.jsx)(t.code,{children:"transcribe"})," step, we will receive first that one, and there is where we integrate with the Youtube Summarizer:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"  } else if (step.name === 'transcribe') {\n    logger.info(`Transcribing video to text with external agent ...`)\n\n    // First we check if we have enough balance to query the Youtube AI Agent\n    const balanceResult = await payments.getPlanBalance(PLAN_YOUTUBE_DID)\n    payments.query.logTask({\n      task_id: step.task_id,\n      level: 'info',\n      message: `Youtube Plan balance: ${balanceResult.balance}`,\n    })\n\n    if (balanceResult.balance < 1) { // If we don't have enough balance, we order more credits\n      payments.query.logTask({\n        task_id: step.task_id,\n        level: 'warning',\n        message: `Insufficient balance to query the Youtube AI Agent. Ordering more credits.`,\n      })\n      await payments.orderPlan(PLAN_YOUTUBE_DID)\n    }\n\n    // Create the AI Task to query the Youtube Agent with the youtube video URL\n    const aiTask = {\n      query: step.input_query,\n      name: \"transcribe\",\n      \"additional_params\": [],\n      \"artifacts\": []\n    }\n\n    payments.query.logTask({\n      task_id: step.task_id,\n      level: 'info',\n      message: `Querying Youtube Agent DID: ${AGENT_YOUTUBE_DID} with input: ${step.input_query}`,\n    })\n    // Get the JWT access token and the Proxy we must use to query theYoutube Agent\n    const accessConfig = await payments.getServiceAccessConfig(AGENT_YOUTUBE_DID)\n\n    // Create the task\n    const taskResult = await payments.query.createTask(\n      AGENT_YOUTUBE_DID,\n      aiTask,\n      accessConfig,\n      async (data) => {\n        const taskLog: TaskLogMessage = JSON.parse(data)\n\n        console.log(`Received ws task log: ${JSON.stringify(data)}`)\n\n        if (!taskLog.task_status) {\n          payments.query.logTask({\n            task_id: taskLog.task_id,\n            level: 'info',\n            message: `LOG: ${taskLog.task_id} :: ${taskLog.message}`,\n          })\n          return\n        }\n\n        return await validateExternalYoutubeSummarizerTask(taskLog.task_id, step)\n      },\n    )\n\n   if (taskResult.status !== 201) {\n      payments.query.logTask({\n        task_id: step.task_id,\n        task_status: AgentExecutionStatus.Failed,\n        level: 'error',\n        message: `Failed to create task on Youtube Summarizer external agent: ${taskResult.data}`,\n      })\n      // Because we couldnt summarize the Youtube video on the external agent:\n      // we UPDATE the Step to FAILED\n      await payments.query.updateStep(step.did, {\n        ...step,\n        step_status: AgentExecutionStatus.Failed,\n        is_last: true,\n        output: `Error creating task on Youtube Summarizer external agent: ${JSON.stringify(taskResult.data)}`,\n      })\n      return\n    }\n\n    payments.query.logTask({\n      task_id: step.task_id,\n      level: 'info',\n      message: `Task on external agent created [${taskResult.data.task.task_id}] created: ${taskResult.data.task.input_query}`,\n    })\n    \n\n"})}),"\n",(0,s.jsxs)(t.p,{children:["At this stage if everything worked correctly we must have a few credits and the summary of the Youtube video. Because the ",(0,s.jsx)(t.code,{children:"transcribe"})," is completed now we will receive an update on the ",(0,s.jsx)(t.code,{children:"text2speech"})," step, meaning now we can process that step:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-typescript",children:"\n  } else if (step.name === 'text2speech') {\n\n    payments.query.logTask({\n      task_id: step.task_id,\n      level: 'info',\n      message: `Converting text to audio ...`,\n    })\n    const fileSpeech = await openaiTools.text2speech(step.input_query)\n\n    payments.query.logTask({\n      task_id: step.task_id,\n      level: 'info',\n      message: `Speech file generated`,\n    })\n    const cid = await uploadSpeechFileToIPFS(fileSpeech)\n\n    payments.query.logTask({\n      task_id: step.task_id,\n      level: 'info',\n      message: `Speech file generated uploaded to IPFS`,\n    })\n\n    const updateResult = await payments.query.updateStep(step.did, {\n      ...step,\n      step_status: AgentExecutionStatus.Completed,\n      is_last: true,\n      output: `Text converted to audio: ${cid}`,\n      output_additional: 'success',\n      output_artifacts: [IpfsHelper.cidToUrl(cid)],\n      cost: 20,\n    })\n\n    if (updateResult.status === 201)\n      payments.query.logTask({\n        task_id: step.task_id,\n        task_status: AgentExecutionStatus.Completed,\n        step_id: step.step_id,\n        level: 'info',\n        message: `Step ${step.name} : ${step.step_id} completed!`,\n      })\n    else\n      payments.query.logTask({\n        task_id: step.task_id,\n        task_status: AgentExecutionStatus.Failed,\n        level: 'error',\n        message: `Error updating step ${step.step_id} - ${JSON.stringify(updateResult.data)}`,\n      })\n  }\n"})}),"\n",(0,s.jsxs)(t.p,{children:["If the ",(0,s.jsx)(t.code,{children:"text2speech"})," step is completed, we will update the step with the result of the audio file and the cost of the step. And because the ",(0,s.jsx)(t.code,{children:"text2speech"})," step is the last one, when we update the step this will resolve the whole task and calculate the total cost as the sum of all the individual cost of the steps."]}),"\n",(0,s.jsx)(t.h2,{id:"notebooks",children:"Notebooks"}),"\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.a,{href:"https://colab.research.google.com/drive/1Pqrfm3P5t8P9DS7Hwp3v72jhRrB2KsP5#scrollTo=dghI-HwVgulp",children:"Python Notebook"})," example, we will show you how to use the Payments Library to create Payment Plans, register AI Agents, and query them."]})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>o});var s=n(7294);const a={},i=s.createContext(a);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/a424efa6.2b416bf1.js b/assets/js/a424efa6.9d681d7f.js
similarity index 97%
rename from assets/js/a424efa6.2b416bf1.js
rename to assets/js/a424efa6.9d681d7f.js
index 224b1a41..11b0ff4f 100644
--- a/assets/js/a424efa6.2b416bf1.js
+++ b/assets/js/a424efa6.9d681d7f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[2076],{990:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=s(5893),r=s(1151),o=s(9948);const i={sidebar_position:1,description:"Blog Posts"},a="The last 10 posts of Nevermined Medium",c={permalink:"/blog/index",editUrl:"https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md",source:"@site/blog/index.md",title:"The last 10 posts of Nevermined Medium",description:"Blog Posts",date:"2024-11-06T12:23:15.000Z",tags:[],readingTime:.025,hasTruncateMarker:!1,authors:[],frontMatter:{sidebar_position:1,description:"Blog Posts"},unlisted:!1},l={authorsImageUrls:[]},d=[];function u(e){return(0,n.jsx)(o.Z,{})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},9948:(e,t,s)=>{s.d(t,{Z:()=>l});var n=s(7294),r=s(6154);var o=s(6798),i=s(1446),a=s(5893);const c=(0,o.CY)("blog",{blog__title:"blog__title_Smim",blog__content:"blog__content_zw9B","blog__pub-data":"blog__pub-data_YBEj"}),l=()=>{const[e,t]=(0,n.useState)([]);return(0,n.useEffect)((()=>{(async()=>{const e=(await r.Z.get("https://api.rss2json.com/v1/api.json",{params:{rss_url:"https://medium.com/feed/nevermined-io"}})).data.items.map((e=>{const t={...e};return t.content=(0,i.e)(e.content),t}));t([...e])})()}),[]),(0,a.jsx)("div",{children:e.map((e=>(0,a.jsxs)("div",{className:c("content"),children:[(0,a.jsx)(o.II,{type:"h1",className:c("title"),children:e.title}),(0,a.jsx)(o.II,{dangerouslySetInnerHTML:{__html:e.content},className:c("content")}),(0,a.jsxs)(o.II,{type:"small",className:c("pub-data"),children:[(0,a.jsx)("strong",{children:"Published:"})," ",e.pubDate]})]},e.title)))})}},1446:(e,t,s)=>{s.d(t,{e:()=>n,w:()=>r});const n=e=>{const t=(new DOMParser).parseFromString(e,"text/html");return t.querySelectorAll("a").forEach((e=>{if(e.hasAttribute("href")&&e.getAttribute("href").includes("/href")){const t=e.getAttribute("href"),s=document.createElement("img");e.parentElement.replaceChild(s,e),s.setAttribute("src",t),s.setAttribute("alt","Gift")}})),t.documentElement.innerHTML},r=(e,t)=>{const s=`script[src='${e}']`;if(document.querySelectorAll(s).length>0)return;const n=document.createElement("script");n.src=e,n.defer=!0,t.parentNode?.insertBefore(n,t)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[2076],{990:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=s(5893),r=s(1151),o=s(9948);const i={sidebar_position:1,description:"Blog Posts"},a="The last 10 posts of Nevermined Medium",c={permalink:"/blog/index",editUrl:"https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md",source:"@site/blog/index.md",title:"The last 10 posts of Nevermined Medium",description:"Blog Posts",date:"2024-11-14T14:39:37.000Z",tags:[],readingTime:.025,hasTruncateMarker:!1,authors:[],frontMatter:{sidebar_position:1,description:"Blog Posts"},unlisted:!1},l={authorsImageUrls:[]},d=[];function u(e){return(0,n.jsx)(o.Z,{})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},9948:(e,t,s)=>{s.d(t,{Z:()=>l});var n=s(7294),r=s(6154);var o=s(6798),i=s(1446),a=s(5893);const c=(0,o.CY)("blog",{blog__title:"blog__title_Smim",blog__content:"blog__content_zw9B","blog__pub-data":"blog__pub-data_YBEj"}),l=()=>{const[e,t]=(0,n.useState)([]);return(0,n.useEffect)((()=>{(async()=>{const e=(await r.Z.get("https://api.rss2json.com/v1/api.json",{params:{rss_url:"https://medium.com/feed/nevermined-io"}})).data.items.map((e=>{const t={...e};return t.content=(0,i.e)(e.content),t}));t([...e])})()}),[]),(0,a.jsx)("div",{children:e.map((e=>(0,a.jsxs)("div",{className:c("content"),children:[(0,a.jsx)(o.II,{type:"h1",className:c("title"),children:e.title}),(0,a.jsx)(o.II,{dangerouslySetInnerHTML:{__html:e.content},className:c("content")}),(0,a.jsxs)(o.II,{type:"small",className:c("pub-data"),children:[(0,a.jsx)("strong",{children:"Published:"})," ",e.pubDate]})]},e.title)))})}},1446:(e,t,s)=>{s.d(t,{e:()=>n,w:()=>r});const n=e=>{const t=(new DOMParser).parseFromString(e,"text/html");return t.querySelectorAll("a").forEach((e=>{if(e.hasAttribute("href")&&e.getAttribute("href").includes("/href")){const t=e.getAttribute("href"),s=document.createElement("img");e.parentElement.replaceChild(s,e),s.setAttribute("src",t),s.setAttribute("alt","Gift")}})),t.documentElement.innerHTML},r=(e,t)=>{const s=`script[src='${e}']`;if(document.querySelectorAll(s).length>0)return;const n=document.createElement("script");n.src=e,n.defer=!0,t.parentNode?.insertBefore(n,t)}}}]);
\ No newline at end of file
diff --git a/assets/js/dc016e2d.8f53cde1.js b/assets/js/dc016e2d.ae525053.js
similarity index 97%
rename from assets/js/dc016e2d.8f53cde1.js
rename to assets/js/dc016e2d.ae525053.js
index efeb3814..f209eab5 100644
--- a/assets/js/dc016e2d.8f53cde1.js
+++ b/assets/js/dc016e2d.ae525053.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[5635],{1205:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=s(5893),r=s(1151),o=s(9948);const i={sidebar_position:1,description:"Blog Posts"},a="The last 10 posts of Nevermined Medium",c={permalink:"/blog/index",editUrl:"https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md",source:"@site/blog/index.md",title:"The last 10 posts of Nevermined Medium",description:"Blog Posts",date:"2024-11-06T12:23:15.000Z",tags:[],readingTime:.025,hasTruncateMarker:!1,authors:[],frontMatter:{sidebar_position:1,description:"Blog Posts"},unlisted:!1},l={authorsImageUrls:[]},d=[];function u(e){return(0,n.jsx)(o.Z,{})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},9948:(e,t,s)=>{s.d(t,{Z:()=>l});var n=s(7294),r=s(6154);var o=s(6798),i=s(1446),a=s(5893);const c=(0,o.CY)("blog",{blog__title:"blog__title_Smim",blog__content:"blog__content_zw9B","blog__pub-data":"blog__pub-data_YBEj"}),l=()=>{const[e,t]=(0,n.useState)([]);return(0,n.useEffect)((()=>{(async()=>{const e=(await r.Z.get("https://api.rss2json.com/v1/api.json",{params:{rss_url:"https://medium.com/feed/nevermined-io"}})).data.items.map((e=>{const t={...e};return t.content=(0,i.e)(e.content),t}));t([...e])})()}),[]),(0,a.jsx)("div",{children:e.map((e=>(0,a.jsxs)("div",{className:c("content"),children:[(0,a.jsx)(o.II,{type:"h1",className:c("title"),children:e.title}),(0,a.jsx)(o.II,{dangerouslySetInnerHTML:{__html:e.content},className:c("content")}),(0,a.jsxs)(o.II,{type:"small",className:c("pub-data"),children:[(0,a.jsx)("strong",{children:"Published:"})," ",e.pubDate]})]},e.title)))})}},1446:(e,t,s)=>{s.d(t,{e:()=>n,w:()=>r});const n=e=>{const t=(new DOMParser).parseFromString(e,"text/html");return t.querySelectorAll("a").forEach((e=>{if(e.hasAttribute("href")&&e.getAttribute("href").includes("/href")){const t=e.getAttribute("href"),s=document.createElement("img");e.parentElement.replaceChild(s,e),s.setAttribute("src",t),s.setAttribute("alt","Gift")}})),t.documentElement.innerHTML},r=(e,t)=>{const s=`script[src='${e}']`;if(document.querySelectorAll(s).length>0)return;const n=document.createElement("script");n.src=e,n.defer=!0,t.parentNode?.insertBefore(n,t)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[5635],{1205:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=s(5893),r=s(1151),o=s(9948);const i={sidebar_position:1,description:"Blog Posts"},a="The last 10 posts of Nevermined Medium",c={permalink:"/blog/index",editUrl:"https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md",source:"@site/blog/index.md",title:"The last 10 posts of Nevermined Medium",description:"Blog Posts",date:"2024-11-14T14:39:37.000Z",tags:[],readingTime:.025,hasTruncateMarker:!1,authors:[],frontMatter:{sidebar_position:1,description:"Blog Posts"},unlisted:!1},l={authorsImageUrls:[]},d=[];function u(e){return(0,n.jsx)(o.Z,{})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},9948:(e,t,s)=>{s.d(t,{Z:()=>l});var n=s(7294),r=s(6154);var o=s(6798),i=s(1446),a=s(5893);const c=(0,o.CY)("blog",{blog__title:"blog__title_Smim",blog__content:"blog__content_zw9B","blog__pub-data":"blog__pub-data_YBEj"}),l=()=>{const[e,t]=(0,n.useState)([]);return(0,n.useEffect)((()=>{(async()=>{const e=(await r.Z.get("https://api.rss2json.com/v1/api.json",{params:{rss_url:"https://medium.com/feed/nevermined-io"}})).data.items.map((e=>{const t={...e};return t.content=(0,i.e)(e.content),t}));t([...e])})()}),[]),(0,a.jsx)("div",{children:e.map((e=>(0,a.jsxs)("div",{className:c("content"),children:[(0,a.jsx)(o.II,{type:"h1",className:c("title"),children:e.title}),(0,a.jsx)(o.II,{dangerouslySetInnerHTML:{__html:e.content},className:c("content")}),(0,a.jsxs)(o.II,{type:"small",className:c("pub-data"),children:[(0,a.jsx)("strong",{children:"Published:"})," ",e.pubDate]})]},e.title)))})}},1446:(e,t,s)=>{s.d(t,{e:()=>n,w:()=>r});const n=e=>{const t=(new DOMParser).parseFromString(e,"text/html");return t.querySelectorAll("a").forEach((e=>{if(e.hasAttribute("href")&&e.getAttribute("href").includes("/href")){const t=e.getAttribute("href"),s=document.createElement("img");e.parentElement.replaceChild(s,e),s.setAttribute("src",t),s.setAttribute("alt","Gift")}})),t.documentElement.innerHTML},r=(e,t)=>{const s=`script[src='${e}']`;if(document.querySelectorAll(s).length>0)return;const n=document.createElement("script");n.src=e,n.defer=!0,t.parentNode?.insertBefore(n,t)}}}]);
\ No newline at end of file
diff --git a/assets/js/f131da57.68ec4143.js b/assets/js/f131da57.68ec4143.js
deleted file mode 100644
index dc5ee396..00000000
--- a/assets/js/f131da57.68ec4143.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[9721],{4780:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var n=s(5893),r=s(1151),a=s(599),i=s(2983);const o={sidebar_position:8,description:"How AI Builders can process AI Tasks?"},l="How AI Builders can process AI Tasks?",c={id:"libraries/process-tasks",title:"How AI Builders can process AI Tasks?",description:"How AI Builders can process AI Tasks?",source:"@site/docs/libraries/08-process-tasks.md",sourceDirName:"libraries",slug:"/libraries/process-tasks",permalink:"/docs/libraries/process-tasks",draft:!1,unlisted:!1,editUrl:"https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/08-process-tasks.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"How AI Builders can process AI Tasks?"},sidebar:"tutorialSidebar",previous:{title:"How Subscribers can query AI Agents?",permalink:"/docs/libraries/query-agents"},next:{title:"Code Examples",permalink:"/docs/libraries/examples"}},u={},d=[{value:"Benefits of delegating the API to Nevermined AI Infrastructure",id:"benefits-of-delegating-the-api-to-nevermined-ai-infrastructure",level:2},{value:"How to process AI Tasks?",id:"how-to-process-ai-tasks",level:2},{value:"AI Tasks and Steps",id:"ai-tasks-and-steps",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"how-ai-builders-can-process-ai-tasks",children:"How AI Builders can process AI Tasks?"})}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["This feature is specific for AI Agents Services using the ",(0,n.jsx)("ins",{children:"Nevermined AI Hub"}),"."]})}),"\n",(0,n.jsx)(t.h2,{id:"benefits-of-delegating-the-api-to-nevermined-ai-infrastructure",children:"Benefits of delegating the API to Nevermined AI Infrastructure"}),"\n",(0,n.jsx)(t.p,{children:"When a AI Builder creates an AI Agent and delegates the maintenance and execution of the HTTP API to Nevermined, they can just focus in the AI piece. This has several benefits for them:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Focus on the AI"}),": The AI Builder can focus on the AI model and the AI Agent logic. Nevermined will take care of the execution of the API, authorization, etc."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Generic Interface"}),": The AI Agent will be accessible via a generic interface, the ",(0,n.jsx)(t.a,{href:"https://docs.nevermined.io/docs/protocol/query-protocol",children:"Nevermined Query Protocol"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Availability"}),": Nevermined will take care of having the AI Agent API available 24/7."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Scalability"}),": Nevermined will take care of the scaling of the AI Agent HTTP API."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"how-to-process-ai-tasks",children:"How to process AI Tasks?"}),"\n",(0,n.jsx)(t.p,{children:"The AI Builders can create simple worker AI process subscribing to Nevermined to retrieving the AI tasks sent by the users."}),"\n",(0,n.jsxs)(a.Z,{defaultValue:"python",values:[{label:"Python",value:"python"},{label:"Typescript",value:"typescript"}],children:[(0,n.jsx)(i.Z,{value:"python",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-python",children:"import asyncio\n\nasyncio.create_task(builder.ai_protocol.subscribe(callback_function, join_account_room=True, join_agent_rooms=[], subscribe_event_types=['step-updated'], get_pending_events_on_subscribe=True))\n\ncallback_function = (step) => {\n  print('Step received', step)\n  await payments.ai_protocol.update_step(did=step['did'], \n    task_id=step['task_id'], \n    step_id=step['step_id'], \n    step={'step_id': step['step_id'],\n      'task_id': step['task_id'], \n      'step_status': AgentExecutionStatus.Completed.value,\n      'output': 'success',\n      'is_last': True,\n      'cost': 1\n    })\n}\n"})})}),(0,n.jsx)(i.Z,{value:"typescript",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:"const opts = {\n  joinAccountRoom: true, // To subscribe to all the events related to the account\n  joinAgentRooms: [], // To which agents the agent wants to subscribe. This is useful for AI developers who want to process several agents tasks in parallel\n  subscribeEventTypes: ['step-updated'], // To which events the agent wants to subscribe\n  getPendingEventsOnSubscribe: true // To get the pending events when the agent connects\n}\n\nawait paymentsBuilder.query.subscribe(callbackFunction, opts)\n\nconst callbackFunction = (data: any) => {\n  console.log('Step received', data)\n  const step = JSON.parse(data)\n  await paymentsBuilder.query.updateStep(step.did, {\n    step_id: step.step_id,\n    task_id: step.task_id,\n    step_status: AgentExecutionStatus.Completed,\n    is_last: true,\n    output: 'LFG!',\n    cost: 1\n  })\n}\n"})})})]}),"\n",(0,n.jsx)(t.p,{children:"Using this, create an AI Agent is as simple as calling a subscribe and resolving the steps part of the tasks."}),"\n",(0,n.jsx)(t.p,{children:"As you can see in the above code, the agent can subscribe to the events related with AI tasks created by the users and process them. For doing that it just needs to implement a callback function that will get the AI task input parameters and process it."}),"\n",(0,n.jsx)(t.h3,{id:"ai-tasks-and-steps",children:"AI Tasks and Steps"}),"\n",(0,n.jsx)(t.p,{children:"The AI tasks are composed by several steps. Each step is a part of the task that the AI Agent needs to process. The steps are processed sequentially and the agent can update the status of the step and the output of the step. You can see the steps as a workflow that the AI Agent needs to process to be completed."}),"\n",(0,n.jsxs)(t.p,{children:["The AI Agent only needs to process the steps and update the status of the step and the output of the step. The rest of the logic is managed by ",(0,n.jsx)(t.strong,{children:"Nevermined AI Hub"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["When a user requests a task to an AI Agent, by default is created one task with one step. This first step has the ",(0,n.jsx)(t.strong,{children:'"init"'})," name. When the AI agent receives the ",(0,n.jsx)(t.strong,{children:"init"})," step can:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["If the AI task is simple and ",(0,n.jsx)(t.strong,{children:"doesn't require several steps"}),", it can process the step and update the status of the step to ",(0,n.jsx)(t.strong,{children:"Completed"})," and the ",(0,n.jsx)(t.strong,{children:"is_last"})," attribute as ",(0,n.jsx)(t.strong,{children:"true"}),". This will mark the whole task as completed."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["If the AI task requires ",(0,n.jsx)(t.strong,{children:"multiple steps"}),", the AI Agent can create more steps and setup the order of execution and configuration of them. This can be done by defining the ",(0,n.jsx)(t.strong,{children:"name"}),", ",(0,n.jsx)(t.strong,{children:"order"})," and ",(0,n.jsx)(t.strong,{children:"predecessor"})," step."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We will see different code examples about how to do this in the following section."})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},2983:(e,t,s)=>{s.d(t,{Z:()=>i});s(7294);var n=s(512);const r={tabItem:"tabItem_Ymn6"};var a=s(5893);function i(e){let{children:t,hidden:s,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,i),hidden:s,children:t})}},599:(e,t,s)=>{s.d(t,{Z:()=>k});var n=s(7294),r=s(512),a=s(2466),i=s(6550),o=s(469),l=s(1980),c=s(7392),u=s(812);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:s}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:s,attributes:n,default:r}}=e;return{value:t,label:s,attributes:n,default:r}}))}(s);return function(e){const t=(0,c.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,s])}function h(e){let{value:t,tabValues:s}=e;return s.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:s}=e;const r=(0,i.k6)(),a=function(e){let{queryString:t=!1,groupId:s}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:t,groupId:s});return[(0,l._X)(a),(0,n.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(r.location.search);t.set(a,e),r.replace({...r.location,search:t.toString()})}),[a,r])]}function f(e){const{defaultValue:t,queryString:s=!1,groupId:r}=e,a=p(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!h({value:t,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=s.find((e=>e.default))??s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[c,d]=b({queryString:s,groupId:r}),[f,m]=function(e){let{groupId:t}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,a]=(0,u.Nk)(s);return[r,(0,n.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),g=(()=>{const e=c??f;return h({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!h({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,a]),tabValues:a}}var m=s(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(5893);function x(e){let{className:t,block:s,selectedValue:n,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),u=e=>{const t=e.currentTarget,s=l.indexOf(t),r=o[s].value;r!==n&&(c(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;t=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;t=l[s]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},t),children:o.map((e=>{let{value:t,label:s,attributes:a}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...a,className:(0,r.Z)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":n===t}),children:s??t},t)}))})}function A(e){let{lazy:t,children:s,selectedValue:a}=e;const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function I(e){const t=f(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...t,...e}),(0,v.jsx)(A,{...t,...e})]})}function k(e){const t=(0,m.Z)();return(0,v.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>i});var n=s(7294);const r={},a=n.createContext(r);function i(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/f131da57.b56e4711.js b/assets/js/f131da57.b56e4711.js
new file mode 100644
index 00000000..e9e42aef
--- /dev/null
+++ b/assets/js/f131da57.b56e4711.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[9721],{4780:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var n=s(5893),a=s(1151),r=s(599),i=s(2983);const o={sidebar_position:8,description:"How AI Builders can process AI Tasks?"},l="How AI Builders can process AI Tasks?",c={id:"libraries/process-tasks",title:"How AI Builders can process AI Tasks?",description:"How AI Builders can process AI Tasks?",source:"@site/docs/libraries/08-process-tasks.md",sourceDirName:"libraries",slug:"/libraries/process-tasks",permalink:"/docs/libraries/process-tasks",draft:!1,unlisted:!1,editUrl:"https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/08-process-tasks.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"How AI Builders can process AI Tasks?"},sidebar:"tutorialSidebar",previous:{title:"How Subscribers can query AI Agents?",permalink:"/docs/libraries/query-agents"},next:{title:"Code Examples",permalink:"/docs/libraries/examples"}},u={},d=[{value:"Benefits of delegating the API to Nevermined AI Infrastructure",id:"benefits-of-delegating-the-api-to-nevermined-ai-infrastructure",level:2},{value:"How to process AI Tasks?",id:"how-to-process-ai-tasks",level:2},{value:"AI Tasks and Steps",id:"ai-tasks-and-steps",level:3},{value:"Sending task logs dynamically",id:"sending-task-logs-dynamically",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"how-ai-builders-can-process-ai-tasks",children:"How AI Builders can process AI Tasks?"})}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["This feature is specific for AI Agents Services using the ",(0,n.jsx)("ins",{children:"Nevermined AI Hub"}),"."]})}),"\n",(0,n.jsx)(t.h2,{id:"benefits-of-delegating-the-api-to-nevermined-ai-infrastructure",children:"Benefits of delegating the API to Nevermined AI Infrastructure"}),"\n",(0,n.jsx)(t.p,{children:"When a AI Builder creates an AI Agent and delegates the maintenance and execution of the HTTP API to Nevermined, they can just focus in the AI piece. This has several benefits for them:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Focus on the AI"}),": The AI Builder can focus on the AI model and the AI Agent logic. Nevermined will take care of the execution of the API, authorization, etc."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Generic Interface"}),": The AI Agent will be accessible via a generic interface, the ",(0,n.jsx)(t.a,{href:"https://docs.nevermined.io/docs/protocol/query-protocol",children:"Nevermined Query Protocol"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Availability"}),": Nevermined will take care of having the AI Agent API available 24/7."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Scalability"}),": Nevermined will take care of the scaling of the AI Agent HTTP API."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"how-to-process-ai-tasks",children:"How to process AI Tasks?"}),"\n",(0,n.jsx)(t.p,{children:"The AI Builders can create simple worker AI process subscribing to Nevermined to retrieving the AI tasks sent by the users."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"python",values:[{label:"Python",value:"python"},{label:"Typescript",value:"typescript"}],children:[(0,n.jsx)(i.Z,{value:"python",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-python",children:"import asyncio\n\nasyncio.create_task(builder.ai_protocol.subscribe(callback_function, join_account_room=True, join_agent_rooms=[], subscribe_event_types=['step-updated'], get_pending_events_on_subscribe=True))\n\ncallback_function = (step) => {\n  print('Step received', step)\n  await payments.ai_protocol.update_step(did=step['did'], \n    task_id=step['task_id'], \n    step_id=step['step_id'], \n    step={'step_id': step['step_id'],\n      'task_id': step['task_id'], \n      'step_status': AgentExecutionStatus.Completed.value,\n      'output': 'success',\n      'is_last': True,\n      'cost': 1\n    })\n}\n"})})}),(0,n.jsx)(i.Z,{value:"typescript",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:"const opts = {\n  joinAccountRoom: true, // To subscribe to all the events related to the account\n  joinAgentRooms: [], // To which agents the agent wants to subscribe. This is useful for AI developers who want to process several agents tasks in parallel\n  subscribeEventTypes: ['step-updated'], // To which events the agent wants to subscribe\n  getPendingEventsOnSubscribe: true // To get the pending events when the agent connects\n}\n\nawait paymentsBuilder.query.subscribe(callbackFunction, opts)\n\nconst callbackFunction = (data: any) => {\n  console.log('Step received', data)\n  const step = JSON.parse(data)\n  await paymentsBuilder.query.updateStep(step.did, {\n    step_id: step.step_id,\n    task_id: step.task_id,\n    step_status: AgentExecutionStatus.Completed,\n    is_last: true,\n    output: 'LFG!',\n    cost: 1\n  })\n}\n"})})})]}),"\n",(0,n.jsx)(t.p,{children:"Using this, create an AI Agent is as simple as calling a subscribe and resolving the steps part of the tasks."}),"\n",(0,n.jsx)(t.p,{children:"As you can see in the above code, the agent can subscribe to the events related with AI tasks created by the users and process them. For doing that it just needs to implement a callback function that will get the AI task input parameters and process it."}),"\n",(0,n.jsx)(t.h3,{id:"ai-tasks-and-steps",children:"AI Tasks and Steps"}),"\n",(0,n.jsx)(t.p,{children:"The AI tasks are composed by several steps. Each step is a part of the task that the AI Agent needs to process. The steps are processed sequentially and the agent can update the status of the step and the output of the step. You can see the steps as a workflow that the AI Agent needs to process to be completed."}),"\n",(0,n.jsxs)(t.p,{children:["The AI Agent only needs to process the steps and update the status of the step and the output of the step. The rest of the logic is managed by ",(0,n.jsx)(t.strong,{children:"Nevermined AI Hub"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["When a user requests a task to an AI Agent, by default is created one task with one step. This first step has the ",(0,n.jsx)(t.strong,{children:'"init"'})," name. When the AI agent receives the ",(0,n.jsx)(t.strong,{children:"init"})," step can:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["If the AI task is simple and ",(0,n.jsx)(t.strong,{children:"doesn't require several steps"}),", it can process the step and update the status of the step to ",(0,n.jsx)(t.strong,{children:"Completed"})," and the ",(0,n.jsx)(t.strong,{children:"is_last"})," attribute as ",(0,n.jsx)(t.strong,{children:"true"}),". This will mark the whole task as completed."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["If the AI task requires ",(0,n.jsx)(t.strong,{children:"multiple steps"}),", the AI Agent can create more steps and setup the order of execution and configuration of them. This can be done by defining the ",(0,n.jsx)(t.strong,{children:"name"}),", ",(0,n.jsx)(t.strong,{children:"order"})," and ",(0,n.jsx)(t.strong,{children:"predecessor"})," step."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We will see different code examples about how to do this in the following section."}),"\n",(0,n.jsx)(t.h3,{id:"sending-task-logs-dynamically",children:"Sending task logs dynamically"}),"\n",(0,n.jsxs)(t.p,{children:["The execution of an AI task can be long and the user can want to know the status of the task. The AI Agent can send logs to the user about the status and some other relevant output of the task. This can be done using the ",(0,n.jsx)(t.code,{children:"log_task (python)"})," or ",(0,n.jsx)(t.code,{children:"logTask (typescript)"})," methods."]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["When your task finishes with a ",(0,n.jsx)(t.code,{children:"Completed"})," or ",(0,n.jsx)(t.code,{children:"Failed"})," status, you can send a log message witht that status. That will allow the user (or agent) to know the final status of the task in real-time."]})}),"\n",(0,n.jsx)(t.p,{children:"Let's see an example:"}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"python",values:[{label:"Python",value:"python"},{label:"Typescript",value:"typescript"}],children:[(0,n.jsx)(i.Z,{value:"python",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-python",children:"await self.payment.ai_protocol.log_task(\n  TaskLog(\n    task_id=step['task_id'], \n    message='Summary ready.', \n    level='info', \n    task_status=AgentExecutionStatus.Completed.value\n  )\n)\n\n"})})}),(0,n.jsx)(i.Z,{value:"typescript",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:"const logMessage: TaskLogMessage = {\n    task_id: step.task_id,\n    level: 'info',\n    task_status: AgentExecutionStatus.Completed,\n    message: `Step ${step.name} : ${step.step_id} completed!`,\n}\nawait payments.query.logTask(logMessage)\n\n"})})})]}),"\n",(0,n.jsx)(t.p,{children:"These logs will be send via websocket and the user who sent the task can see them in real time."})]})}function p(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},2983:(e,t,s)=>{s.d(t,{Z:()=>i});s(7294);var n=s(512);const a={tabItem:"tabItem_Ymn6"};var r=s(5893);function i(e){let{children:t,hidden:s,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:s,children:t})}},599:(e,t,s)=>{s.d(t,{Z:()=>j});var n=s(7294),a=s(512),r=s(2466),i=s(6550),o=s(469),l=s(1980),c=s(7392),u=s(812);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:s}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:s,attributes:n,default:a}}=e;return{value:t,label:s,attributes:n,default:a}}))}(s);return function(e){const t=(0,c.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,s])}function p(e){let{value:t,tabValues:s}=e;return s.some((e=>e.value===t))}function g(e){let{queryString:t=!1,groupId:s}=e;const a=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:s}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:t,groupId:s});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function m(e){const{defaultValue:t,queryString:s=!1,groupId:a}=e,r=h(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=s.find((e=>e.default))??s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[c,d]=g({queryString:s,groupId:a}),[m,b]=function(e){let{groupId:t}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,u.Nk)(s);return[a,(0,n.useCallback)((e=>{s&&r.set(e)}),[s,r])]}({groupId:a}),f=(()=>{const e=c??m;return p({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,r]),tabValues:r}}var b=s(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(5893);function x(e){let{className:t,block:s,selectedValue:n,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),u=e=>{const t=e.currentTarget,s=l.indexOf(t),a=o[s].value;a!==n&&(c(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;t=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;t=l[s]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":s},t),children:o.map((e=>{let{value:t,label:s,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,a.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":n===t}),children:s??t},t)}))})}function k(e){let{lazy:t,children:s,selectedValue:r}=e;const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:(0,a.Z)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,a.Z)("tabs-container",f.tabList),children:[(0,v.jsx)(x,{...t,...e}),(0,v.jsx)(k,{...t,...e})]})}function j(e){const t=(0,b.Z)();return(0,v.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>i});var n=s(7294);const a={},r=n.createContext(a);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/f81c1134.eea2abf9.js b/assets/js/f81c1134.ba7cbe4d.js
similarity index 90%
rename from assets/js/f81c1134.eea2abf9.js
rename to assets/js/f81c1134.ba7cbe4d.js
index 937bf70f..29ce4143 100644
--- a/assets/js/f81c1134.eea2abf9.js
+++ b/assets/js/f81c1134.ba7cbe4d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[4031],{4108:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/index","metadata":{"permalink":"/blog/index","editUrl":"https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md","source":"@site/blog/index.md","title":"The last 10 posts of Nevermined Medium","description":"Blog Posts","date":"2024-11-06T12:23:15.000Z","tags":[],"readingTime":0.025,"hasTruncateMarker":false,"authors":[],"frontMatter":{"sidebar_position":1,"description":"Blog Posts"},"unlisted":false},"content":"import Blog from \'@site/src/components/blog\'\\n\\n\\n<Blog/>"}]}}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkapp_docs=self.webpackChunkapp_docs||[]).push([[4031],{4108:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/index","metadata":{"permalink":"/blog/index","editUrl":"https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md","source":"@site/blog/index.md","title":"The last 10 posts of Nevermined Medium","description":"Blog Posts","date":"2024-11-14T14:39:37.000Z","tags":[],"readingTime":0.025,"hasTruncateMarker":false,"authors":[],"frontMatter":{"sidebar_position":1,"description":"Blog Posts"},"unlisted":false},"content":"import Blog from \'@site/src/components/blog\'\\n\\n\\n<Blog/>"}]}}')}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.df74ef45.js b/assets/js/runtime~main.981f9b14.js
similarity index 94%
rename from assets/js/runtime~main.df74ef45.js
rename to assets/js/runtime~main.981f9b14.js
index 8173f342..891ae6dc 100644
--- a/assets/js/runtime~main.df74ef45.js
+++ b/assets/js/runtime~main.981f9b14.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i<e.length;i++){d=e[i][0],c=e[i][1],f=e[i][2];for(var t=!0,o=0;o<d.length;o++)(!1&f||b>=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f<b&&(b=f));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({63:"a65f7afd",247:"3c9c17d2",291:"7207d74b",389:"f80e2372",560:"a577ebb3",693:"6ec39002",864:"2ddd6fbe",1004:"c141421f",1615:"74fadb6d",2076:"a424efa6",2334:"858d5bff",2535:"814f3328",2644:"ef8b811a",3041:"dea0208e",3055:"6d9b6a5a",3063:"bc32bcc3",3085:"1f391b9e",3089:"a6aa9e1f",3119:"d373d261",3237:"1df93b7f",3300:"38d46fd3",3331:"3c8c6129",3608:"9e4087bc",3629:"aba21aa0",3685:"da3258be",3802:"b6411edf",3940:"621db11d",4031:"f81c1134",4076:"df7def65",4088:"0058b4c6",4368:"a94703ab",4478:"3cd5d413",4487:"2dbc02d3",4495:"f831d4f1",4876:"b5983b37",5635:"dc016e2d",5980:"a7456010",6103:"ccc49370",6244:"3d78d92d",6386:"4251ab3c",6474:"7afef3c8",6534:"3bc23d46",6585:"726218d9",6642:"c15d9823",6664:"731fd987",6682:"b925cc90",6802:"40463571",6890:"8351d233",6924:"103cc76e",7094:"44129a2e",7104:"6471d683",7213:"3d7d3b3a",7223:"6948ba69",7393:"acecf23e",7414:"393be207",7520:"9d6e3b59",7869:"3bfec896",7918:"17896441",7920:"1a4e3797",7977:"426e2a8b",8071:"12286e25",8284:"156c0d84",8338:"15d99295",8518:"a7bd4aaa",8574:"0b8acbe3",8704:"7814abbf",8956:"9f887a94",8962:"e04b2c0d",9075:"6dd03e4b",9186:"1a07946f",9208:"36994c47",9320:"8a87d575",9476:"8ad336ef",9607:"05a5603c",9615:"cc4637c6",9661:"5e95c892",9666:"afc2d06d",9680:"329b34bf",9721:"f131da57",9761:"cf15052a",9781:"62c56792",9861:"bb14d73a"}[e]||e)+"."+{63:"28f3a787",247:"d0fc5afd",291:"9a4fec6e",389:"b9c68b72",560:"ebadb1ce",625:"d3e74d3a",693:"7b6e4a19",715:"68f669ee",864:"225cea44",1004:"dd871650",1024:"f3d3a91b",1426:"8f70080f",1615:"7c373237",1702:"56a328e9",1772:"47898930",2076:"2b416bf1",2334:"284d62f9",2535:"338bbe3b",2644:"04fab2fb",3041:"91bb90b8",3055:"fa435552",3063:"65b0846c",3085:"f0dbec8f",3089:"4c06bc61",3119:"102e58ea",3237:"e8e2f1a0",3300:"b04dee1e",3331:"ff35f665",3608:"e006838d",3629:"59dcce29",3685:"93a173a0",3802:"fbcfc282",3940:"40633cca",4031:"eea2abf9",4076:"cce2a457",4088:"dfad8fe3",4368:"481107d0",4478:"dee58d89",4487:"388feba3",4495:"8665a50d",4876:"81c0ab18",5635:"8f53cde1",5980:"195a599f",6103:"56fbd5df",6244:"9098b32e",6386:"d9933535",6474:"c5653412",6534:"ea47aa90",6585:"6ef26516",6642:"3d96721c",6664:"e854ee6e",6682:"5dcf41ba",6798:"bc599093",6802:"c0ca31c6",6890:"6e2f8b76",6924:"63cfb291",6945:"f5dc62a8",7094:"1978c84e",7104:"03748270",7213:"f7e23560",7223:"ff420ebb",7393:"3082c2e3",7414:"55a67c5f",7520:"cd58548b",7869:"78443be5",7918:"ca283cf5",7920:"6fb43fdf",7977:"e06444e2",8071:"b70e333a",8284:"828fde0a",8338:"576e6162",8518:"27a85759",8574:"4c0f3b87",8704:"c089dde3",8956:"ff0959e5",8962:"76019eb6",9075:"79b2f33d",9186:"870ff31b",9208:"f74d431f",9320:"b055ed7a",9476:"343653ae",9607:"75864b38",9615:"dc944c91",9661:"1a2f8076",9666:"42224303",9680:"67be0dd6",9721:"68ec4143",9761:"00a84a09",9781:"945480a3",9861:"c915b4f2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},f="app_docs:",r.l=(e,a,d,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+d){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",f+d),t.src=e),c[e]=[a];var l=(a,d)=>{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",40463571:"6802",a65f7afd:"63","3c9c17d2":"247","7207d74b":"291",f80e2372:"389",a577ebb3:"560","6ec39002":"693","2ddd6fbe":"864",c141421f:"1004","74fadb6d":"1615",a424efa6:"2076","858d5bff":"2334","814f3328":"2535",ef8b811a:"2644",dea0208e:"3041","6d9b6a5a":"3055",bc32bcc3:"3063","1f391b9e":"3085",a6aa9e1f:"3089",d373d261:"3119","1df93b7f":"3237","38d46fd3":"3300","3c8c6129":"3331","9e4087bc":"3608",aba21aa0:"3629",da3258be:"3685",b6411edf:"3802","621db11d":"3940",f81c1134:"4031",df7def65:"4076","0058b4c6":"4088",a94703ab:"4368","3cd5d413":"4478","2dbc02d3":"4487",f831d4f1:"4495",b5983b37:"4876",dc016e2d:"5635",a7456010:"5980",ccc49370:"6103","3d78d92d":"6244","4251ab3c":"6386","7afef3c8":"6474","3bc23d46":"6534","726218d9":"6585",c15d9823:"6642","731fd987":"6664",b925cc90:"6682","8351d233":"6890","103cc76e":"6924","44129a2e":"7094","6471d683":"7104","3d7d3b3a":"7213","6948ba69":"7223",acecf23e:"7393","393be207":"7414","9d6e3b59":"7520","3bfec896":"7869","1a4e3797":"7920","426e2a8b":"7977","12286e25":"8071","156c0d84":"8284","15d99295":"8338",a7bd4aaa:"8518","0b8acbe3":"8574","7814abbf":"8704","9f887a94":"8956",e04b2c0d:"8962","6dd03e4b":"9075","1a07946f":"9186","36994c47":"9208","8a87d575":"9320","8ad336ef":"9476","05a5603c":"9607",cc4637c6:"9615","5e95c892":"9661",afc2d06d:"9666","329b34bf":"9680",f131da57:"9721",cf15052a:"9761","62c56792":"9781",bb14d73a:"9861"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n<b.length;n++)f=b[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},d=self.webpackChunkapp_docs=self.webpackChunkapp_docs||[];d.forEach(a.bind(null,0)),d.push=a.bind(null,d.push.bind(d))})()})();
\ No newline at end of file
+(()=>{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i<e.length;i++){d=e[i][0],c=e[i][1],f=e[i][2];for(var t=!0,o=0;o<d.length;o++)(!1&f||b>=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f<b&&(b=f));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({63:"a65f7afd",247:"3c9c17d2",291:"7207d74b",389:"f80e2372",560:"a577ebb3",693:"6ec39002",864:"2ddd6fbe",1004:"c141421f",1615:"74fadb6d",2076:"a424efa6",2334:"858d5bff",2535:"814f3328",2644:"ef8b811a",3041:"dea0208e",3055:"6d9b6a5a",3063:"bc32bcc3",3085:"1f391b9e",3089:"a6aa9e1f",3119:"d373d261",3237:"1df93b7f",3300:"38d46fd3",3331:"3c8c6129",3608:"9e4087bc",3629:"aba21aa0",3685:"da3258be",3802:"b6411edf",3940:"621db11d",4031:"f81c1134",4076:"df7def65",4088:"0058b4c6",4368:"a94703ab",4478:"3cd5d413",4487:"2dbc02d3",4495:"f831d4f1",4876:"b5983b37",5635:"dc016e2d",5980:"a7456010",6103:"ccc49370",6244:"3d78d92d",6386:"4251ab3c",6474:"7afef3c8",6534:"3bc23d46",6585:"726218d9",6642:"c15d9823",6664:"731fd987",6682:"b925cc90",6802:"40463571",6890:"8351d233",6924:"103cc76e",7094:"44129a2e",7104:"6471d683",7213:"3d7d3b3a",7223:"6948ba69",7393:"acecf23e",7414:"393be207",7520:"9d6e3b59",7869:"3bfec896",7918:"17896441",7920:"1a4e3797",7977:"426e2a8b",8071:"12286e25",8284:"156c0d84",8338:"15d99295",8518:"a7bd4aaa",8574:"0b8acbe3",8704:"7814abbf",8956:"9f887a94",8962:"e04b2c0d",9075:"6dd03e4b",9186:"1a07946f",9208:"36994c47",9320:"8a87d575",9476:"8ad336ef",9607:"05a5603c",9615:"cc4637c6",9661:"5e95c892",9666:"afc2d06d",9680:"329b34bf",9721:"f131da57",9761:"cf15052a",9781:"62c56792",9861:"bb14d73a"}[e]||e)+"."+{63:"28f3a787",247:"d0fc5afd",291:"9a4fec6e",389:"b9c68b72",560:"ebadb1ce",625:"d3e74d3a",693:"7b6e4a19",715:"68f669ee",864:"225cea44",1004:"dd871650",1024:"f3d3a91b",1426:"8f70080f",1615:"7c373237",1702:"56a328e9",1772:"47898930",2076:"9d681d7f",2334:"284d62f9",2535:"338bbe3b",2644:"04fab2fb",3041:"91bb90b8",3055:"fa435552",3063:"65b0846c",3085:"f0dbec8f",3089:"4c06bc61",3119:"102e58ea",3237:"e8e2f1a0",3300:"b04dee1e",3331:"ff35f665",3608:"e006838d",3629:"59dcce29",3685:"93a173a0",3802:"fbcfc282",3940:"40633cca",4031:"ba7cbe4d",4076:"cce2a457",4088:"dfad8fe3",4368:"481107d0",4478:"dee58d89",4487:"388feba3",4495:"8665a50d",4876:"81c0ab18",5635:"ae525053",5980:"195a599f",6103:"56fbd5df",6244:"9098b32e",6386:"d9933535",6474:"c5653412",6534:"ea47aa90",6585:"6ef26516",6642:"3d96721c",6664:"e854ee6e",6682:"5dcf41ba",6798:"bc599093",6802:"c0ca31c6",6890:"6e2f8b76",6924:"63cfb291",6945:"f5dc62a8",7094:"1978c84e",7104:"03748270",7213:"f7e23560",7223:"ff420ebb",7393:"3082c2e3",7414:"55a67c5f",7520:"cd58548b",7869:"78443be5",7918:"ca283cf5",7920:"6fb43fdf",7977:"e06444e2",8071:"b70e333a",8284:"828fde0a",8338:"576e6162",8518:"27a85759",8574:"4c0f3b87",8704:"c089dde3",8956:"ff0959e5",8962:"76019eb6",9075:"79b2f33d",9186:"870ff31b",9208:"f74d431f",9320:"b055ed7a",9476:"58a1a34a",9607:"75864b38",9615:"dc944c91",9661:"1a2f8076",9666:"42224303",9680:"67be0dd6",9721:"b56e4711",9761:"00a84a09",9781:"945480a3",9861:"c915b4f2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},f="app_docs:",r.l=(e,a,d,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+d){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",f+d),t.src=e),c[e]=[a];var l=(a,d)=>{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",40463571:"6802",a65f7afd:"63","3c9c17d2":"247","7207d74b":"291",f80e2372:"389",a577ebb3:"560","6ec39002":"693","2ddd6fbe":"864",c141421f:"1004","74fadb6d":"1615",a424efa6:"2076","858d5bff":"2334","814f3328":"2535",ef8b811a:"2644",dea0208e:"3041","6d9b6a5a":"3055",bc32bcc3:"3063","1f391b9e":"3085",a6aa9e1f:"3089",d373d261:"3119","1df93b7f":"3237","38d46fd3":"3300","3c8c6129":"3331","9e4087bc":"3608",aba21aa0:"3629",da3258be:"3685",b6411edf:"3802","621db11d":"3940",f81c1134:"4031",df7def65:"4076","0058b4c6":"4088",a94703ab:"4368","3cd5d413":"4478","2dbc02d3":"4487",f831d4f1:"4495",b5983b37:"4876",dc016e2d:"5635",a7456010:"5980",ccc49370:"6103","3d78d92d":"6244","4251ab3c":"6386","7afef3c8":"6474","3bc23d46":"6534","726218d9":"6585",c15d9823:"6642","731fd987":"6664",b925cc90:"6682","8351d233":"6890","103cc76e":"6924","44129a2e":"7094","6471d683":"7104","3d7d3b3a":"7213","6948ba69":"7223",acecf23e:"7393","393be207":"7414","9d6e3b59":"7520","3bfec896":"7869","1a4e3797":"7920","426e2a8b":"7977","12286e25":"8071","156c0d84":"8284","15d99295":"8338",a7bd4aaa:"8518","0b8acbe3":"8574","7814abbf":"8704","9f887a94":"8956",e04b2c0d:"8962","6dd03e4b":"9075","1a07946f":"9186","36994c47":"9208","8a87d575":"9320","8ad336ef":"9476","05a5603c":"9607",cc4637c6:"9615","5e95c892":"9661",afc2d06d:"9666","329b34bf":"9680",f131da57:"9721",cf15052a:"9761","62c56792":"9781",bb14d73a:"9861"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n<b.length;n++)f=b[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},d=self.webpackChunkapp_docs=self.webpackChunkapp_docs||[];d.forEach(a.bind(null,0)),d.push=a.bind(null,d.push.bind(d))})()})();
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index c121a8f8..9dec9e08 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -15,11 +15,11 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a><a class="navbar__item navbar__link" href="/docs/getting-started">Getting Started</a><a class="navbar__item navbar__link" href="/docs/libraries">Libraries</a><a class="navbar__item navbar__link" href="/docs/tutorials">Tutorials</a><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/discord-gray.svg" alt="Discord" class="discord"></a><a href="https://github.com/nevermined-io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/github-gray.svg" alt="Github" class="github"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><header class="hero hero--primary"><div class="container"><h1 class="hero__title">Archive</h1><p class="hero__subtitle">Archive</p></div></header><main><section class="margin-vert--lg"><div class="container"><div class="row"><div class="col col--4 margin-vert--lg"><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2024">2024<a href="#2024" class="hash-link" aria-label="Direct link to 2024" title="Direct link to 2024">​</a></h3><ul><li><a href="/blog/index">November 6<!-- --> - <!-- -->The last 10 posts of Nevermined Medium</a></li></ul></div></div></div></section></main></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a><a class="navbar__item navbar__link" href="/docs/getting-started">Getting Started</a><a class="navbar__item navbar__link" href="/docs/libraries">Libraries</a><a class="navbar__item navbar__link" href="/docs/tutorials">Tutorials</a><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/discord-gray.svg" alt="Discord" class="discord"></a><a href="https://github.com/nevermined-io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/github-gray.svg" alt="Github" class="github"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><header class="hero hero--primary"><div class="container"><h1 class="hero__title">Archive</h1><p class="hero__subtitle">Archive</p></div></header><main><section class="margin-vert--lg"><div class="container"><div class="row"><div class="col col--4 margin-vert--lg"><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2024">2024<a href="#2024" class="hash-link" aria-label="Direct link to 2024" title="Direct link to 2024">​</a></h3><ul><li><a href="/blog/index">November 14<!-- --> - <!-- -->The last 10 posts of Nevermined Medium</a></li></ul></div></div></div></section></main></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
                   <li>
                     <a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer">
                       <img src="/nevermined/discord.svg" alt="Discord" class="discord">
diff --git a/blog/atom.xml b/blog/atom.xml
index dd2ec5b5..d45c2b1b 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,7 +2,7 @@
 <feed xmlns="http://www.w3.org/2005/Atom">
     <id>https://docs.nevermined.app/blog</id>
     <title>Nevermined Payments Documentation Blog</title>
-    <updated>2024-11-06T12:23:15.000Z</updated>
+    <updated>2024-11-14T14:39:37.000Z</updated>
     <generator>https://github.com/jpmonette/feed</generator>
     <link rel="alternate" href="https://docs.nevermined.app/blog"/>
     <subtitle>Nevermined Payments Documentation Blog</subtitle>
@@ -11,7 +11,7 @@
         <title type="html"><![CDATA[The last 10 posts of Nevermined Medium]]></title>
         <id>https://docs.nevermined.app/blog/index</id>
         <link href="https://docs.nevermined.app/blog/index"/>
-        <updated>2024-11-06T12:23:15.000Z</updated>
+        <updated>2024-11-14T14:39:37.000Z</updated>
         <summary type="html"><![CDATA[Blog Posts]]></summary>
         <content type="html"><![CDATA[<div></div>]]></content>
     </entry>
diff --git a/blog/authors/index.html b/blog/authors/index.html
index a1be78d4..9b260e68 100644
--- a/blog/authors/index.html
+++ b/blog/authors/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/blog/index.html b/blog/index.html
index b07db62d..165bf92e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v3.5.2">
-<title data-rh="true">Nevermined Blog | Nevermined Payments Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.nevermined.app/blog"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Nevermined Blog | Nevermined Payments Documentation"><meta data-rh="true" name="description" content="Here is included the last 10 posts from Nevermined Medium"><meta data-rh="true" property="og:description" content="Here is included the last 10 posts from Nevermined Medium"><meta data-rh="true" name="docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="docsearch:docusaurus_tag" content="blog_posts_list"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.nevermined.app/blog"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://E8X6MW6KMN-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://docs.nevermined.app/blog","mainEntityOfPage":"https://docs.nevermined.app/blog","headline":"Nevermined Blog","description":"Here is included the last 10 posts from Nevermined Medium","blogPost":[{"@type":"BlogPosting","@id":"https://docs.nevermined.app/blog/index","mainEntityOfPage":"https://docs.nevermined.app/blog/index","url":"https://docs.nevermined.app/blog/index","headline":"The last 10 posts of Nevermined Medium","name":"The last 10 posts of Nevermined Medium","description":"Blog Posts","datePublished":"2024-11-06T12:23:15.000Z","author":[],"keywords":[]}]}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Nevermined Payments Documentation RSS Feed">
+<title data-rh="true">Nevermined Blog | Nevermined Payments Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.nevermined.app/blog"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Nevermined Blog | Nevermined Payments Documentation"><meta data-rh="true" name="description" content="Here is included the last 10 posts from Nevermined Medium"><meta data-rh="true" property="og:description" content="Here is included the last 10 posts from Nevermined Medium"><meta data-rh="true" name="docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="docsearch:docusaurus_tag" content="blog_posts_list"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.nevermined.app/blog"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://E8X6MW6KMN-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://docs.nevermined.app/blog","mainEntityOfPage":"https://docs.nevermined.app/blog","headline":"Nevermined Blog","description":"Here is included the last 10 posts from Nevermined Medium","blogPost":[{"@type":"BlogPosting","@id":"https://docs.nevermined.app/blog/index","mainEntityOfPage":"https://docs.nevermined.app/blog/index","url":"https://docs.nevermined.app/blog/index","headline":"The last 10 posts of Nevermined Medium","name":"The last 10 posts of Nevermined Medium","description":"Blog Posts","datePublished":"2024-11-14T14:39:37.000Z","author":[],"keywords":[]}]}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Nevermined Payments Documentation RSS Feed">
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Nevermined Payments Documentation Atom Feed">
 
 <link rel="preconnect" href="https://www.google-analytics.com">
@@ -15,11 +15,11 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a><a class="navbar__item navbar__link" href="/docs/getting-started">Getting Started</a><a class="navbar__item navbar__link" href="/docs/libraries">Libraries</a><a class="navbar__item navbar__link" href="/docs/tutorials">Tutorials</a><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/discord-gray.svg" alt="Discord" class="discord"></a><a href="https://github.com/nevermined-io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/github-gray.svg" alt="Github" class="github"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><main class="col col--9 col--offset-1"><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/index">The last 10 posts of Nevermined Medium</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2024-11-06T12:23:15.000Z">November 6, 2024</time> · <!-- -->One min read</div></header><div class="markdown"><div></div></div><footer class="row docusaurus-mt-lg"></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a><a class="navbar__item navbar__link" href="/docs/getting-started">Getting Started</a><a class="navbar__item navbar__link" href="/docs/libraries">Libraries</a><a class="navbar__item navbar__link" href="/docs/tutorials">Tutorials</a><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/discord-gray.svg" alt="Discord" class="discord"></a><a href="https://github.com/nevermined-io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/github-gray.svg" alt="Github" class="github"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><main class="col col--9 col--offset-1"><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/index">The last 10 posts of Nevermined Medium</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2024-11-14T14:39:37.000Z">November 14, 2024</time> · <!-- -->One min read</div></header><div class="markdown"><div></div></div><footer class="row docusaurus-mt-lg"></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
                   <li>
                     <a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer">
                       <img src="/nevermined/discord.svg" alt="Discord" class="discord">
diff --git a/blog/index/index.html b/blog/index/index.html
index a4a5e3dd..cf232b7d 100644
--- a/blog/index/index.html
+++ b/blog/index/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v3.5.2">
-<title data-rh="true">The last 10 posts of Nevermined Medium | Nevermined Payments Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.nevermined.app/blog/index"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="The last 10 posts of Nevermined Medium | Nevermined Payments Documentation"><meta data-rh="true" name="description" content="Blog Posts"><meta data-rh="true" property="og:description" content="Blog Posts"><meta data-rh="true" property="og:type" content="article"><meta data-rh="true" property="article:published_time" content="2024-11-06T12:23:15.000Z"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.nevermined.app/blog/index"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog/index" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog/index" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://E8X6MW6KMN-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://docs.nevermined.app/blog/index","mainEntityOfPage":"https://docs.nevermined.app/blog/index","url":"https://docs.nevermined.app/blog/index","headline":"The last 10 posts of Nevermined Medium","name":"The last 10 posts of Nevermined Medium","description":"Blog Posts","datePublished":"2024-11-06T12:23:15.000Z","author":[],"keywords":[],"isPartOf":{"@type":"Blog","@id":"https://docs.nevermined.app/blog","name":"Nevermined Blog"}}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Nevermined Payments Documentation RSS Feed">
+<title data-rh="true">The last 10 posts of Nevermined Medium | Nevermined Payments Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.nevermined.app/blog/index"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="The last 10 posts of Nevermined Medium | Nevermined Payments Documentation"><meta data-rh="true" name="description" content="Blog Posts"><meta data-rh="true" property="og:description" content="Blog Posts"><meta data-rh="true" property="og:type" content="article"><meta data-rh="true" property="article:published_time" content="2024-11-14T14:39:37.000Z"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.nevermined.app/blog/index"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog/index" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.nevermined.app/blog/index" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://E8X6MW6KMN-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://docs.nevermined.app/blog/index","mainEntityOfPage":"https://docs.nevermined.app/blog/index","url":"https://docs.nevermined.app/blog/index","headline":"The last 10 posts of Nevermined Medium","name":"The last 10 posts of Nevermined Medium","description":"Blog Posts","datePublished":"2024-11-14T14:39:37.000Z","author":[],"keywords":[],"isPartOf":{"@type":"Blog","@id":"https://docs.nevermined.app/blog","name":"Nevermined Blog"}}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Nevermined Payments Documentation RSS Feed">
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Nevermined Payments Documentation Atom Feed">
 
 <link rel="preconnect" href="https://www.google-analytics.com">
@@ -15,11 +15,11 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a><a class="navbar__item navbar__link" href="/docs/getting-started">Getting Started</a><a class="navbar__item navbar__link" href="/docs/libraries">Libraries</a><a class="navbar__item navbar__link" href="/docs/tutorials">Tutorials</a><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/discord-gray.svg" alt="Discord" class="discord"></a><a href="https://github.com/nevermined-io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/github-gray.svg" alt="Github" class="github"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><main class="col col--9 col--offset-1"><article><header><h1 class="title_f1Hy">The last 10 posts of Nevermined Medium</h1><div class="container_mt6G margin-vert--md"><time datetime="2024-11-06T12:23:15.000Z">November 6, 2024</time> · <!-- -->One min read</div></header><div id="__blog-post-container" class="markdown"><div></div></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/nevermined/nevermined-app-logo.svg" alt="Nevermined Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a><a class="navbar__item navbar__link" href="/docs/getting-started">Getting Started</a><a class="navbar__item navbar__link" href="/docs/libraries">Libraries</a><a class="navbar__item navbar__link" href="/docs/tutorials">Tutorials</a><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/discord-gray.svg" alt="Discord" class="discord"></a><a href="https://github.com/nevermined-io" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><img src="/nevermined/github-gray.svg" alt="Github" class="github"></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><main class="col col--9 col--offset-1"><article><header><h1 class="title_f1Hy">The last 10 posts of Nevermined Medium</h1><div class="container_mt6G margin-vert--md"><time datetime="2024-11-14T14:39:37.000Z">November 14, 2024</time> · <!-- -->One min read</div></header><div id="__blog-post-container" class="markdown"><div></div></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/nevermined-io/docs/tree/main/blog/blog/index.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
                   <li>
                     <a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer">
                       <img src="/nevermined/discord.svg" alt="Discord" class="discord">
diff --git a/blog/rss.xml b/blog/rss.xml
index 3354150b..829a99c1 100644
--- a/blog/rss.xml
+++ b/blog/rss.xml
@@ -4,7 +4,7 @@
         <title>Nevermined Payments Documentation Blog</title>
         <link>https://docs.nevermined.app/blog</link>
         <description>Nevermined Payments Documentation Blog</description>
-        <lastBuildDate>Wed, 06 Nov 2024 12:23:15 GMT</lastBuildDate>
+        <lastBuildDate>Thu, 14 Nov 2024 14:39:37 GMT</lastBuildDate>
         <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
         <generator>https://github.com/jpmonette/feed</generator>
         <language>en</language>
@@ -12,7 +12,7 @@
             <title><![CDATA[The last 10 posts of Nevermined Medium]]></title>
             <link>https://docs.nevermined.app/blog/index</link>
             <guid>https://docs.nevermined.app/blog/index</guid>
-            <pubDate>Wed, 06 Nov 2024 12:23:15 GMT</pubDate>
+            <pubDate>Thu, 14 Nov 2024 14:39:37 GMT</pubDate>
             <description><![CDATA[Blog Posts]]></description>
             <content:encoded><![CDATA[<div></div>]]></content:encoded>
         </item>
diff --git a/docs/architecture/assets/index.html b/docs/architecture/assets/index.html
index fa8b0bd5..8e71d983 100644
--- a/docs/architecture/assets/index.html
+++ b/docs/architecture/assets/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/architecture/high-level-architecture/index.html b/docs/architecture/high-level-architecture/index.html
index fc57d8f5..d1eafa99 100644
--- a/docs/architecture/high-level-architecture/index.html
+++ b/docs/architecture/high-level-architecture/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/architecture/how-works/index.html b/docs/architecture/how-works/index.html
index 241d5d1c..7025a128 100644
--- a/docs/architecture/how-works/index.html
+++ b/docs/architecture/how-works/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/architecture/index.html b/docs/architecture/index.html
index 37a55bff..1d38aa45 100644
--- a/docs/architecture/index.html
+++ b/docs/architecture/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/architecture/nvm-nfts/index.html b/docs/architecture/nvm-nfts/index.html
index e867abfd..5e9225a7 100644
--- a/docs/architecture/nvm-nfts/index.html
+++ b/docs/architecture/nvm-nfts/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/architecture/smart-subscriptions/index.html b/docs/architecture/smart-subscriptions/index.html
index 020dd597..5c9a494d 100644
--- a/docs/architecture/smart-subscriptions/index.html
+++ b/docs/architecture/smart-subscriptions/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/environments/ai-hub/index.html b/docs/environments/ai-hub/index.html
index 0ee76615..1eb5777e 100644
--- a/docs/environments/ai-hub/index.html
+++ b/docs/environments/ai-hub/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/environments/index.html b/docs/environments/index.html
index 6eb11f05..32acf090 100644
--- a/docs/environments/index.html
+++ b/docs/environments/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/environments/network-fees/index.html b/docs/environments/network-fees/index.html
index 8cd18310..43ad3ace 100644
--- a/docs/environments/network-fees/index.html
+++ b/docs/environments/network-fees/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/environments/production/index.html b/docs/environments/production/index.html
index 58195ecd..57a66d40 100644
--- a/docs/environments/production/index.html
+++ b/docs/environments/production/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/environments/testing/index.html b/docs/environments/testing/index.html
index 368c513d..67e022de 100644
--- a/docs/environments/testing/index.html
+++ b/docs/environments/testing/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/getting-started/faq/index.html b/docs/getting-started/faq/index.html
index 1c3e77f4..8ac859b5 100644
--- a/docs/getting-started/faq/index.html
+++ b/docs/getting-started/faq/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html
index 50fabb84..c36483d2 100644
--- a/docs/getting-started/index.html
+++ b/docs/getting-started/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/getting-started/payments-for-ai/index.html b/docs/getting-started/payments-for-ai/index.html
index f1fefe45..745ef715 100644
--- a/docs/getting-started/payments-for-ai/index.html
+++ b/docs/getting-started/payments-for-ai/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/libraries/assets-registration/index.html b/docs/libraries/assets-registration/index.html
index 73d75a66..9d81799c 100644
--- a/docs/libraries/assets-registration/index.html
+++ b/docs/libraries/assets-registration/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/libraries/examples/index.html b/docs/libraries/examples/index.html
index fa111b80..bf563610 100644
--- a/docs/libraries/examples/index.html
+++ b/docs/libraries/examples/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
@@ -27,7 +27,7 @@ <h3 class="anchor anchorWithStickyNavbar_LWe7" id="youtube-agent-python">Youtube
 <p>The Agent uses LangChain to retrieve the transcription and summarize it via OpenAI integration.</p>
 <p>Here is the <a href="https://github.com/nevermined-io/youtube-agent/" target="_blank" rel="noopener noreferrer">Youtube Summarizer Agent code</a>.</p>
 <p>As you can see, the Agent is a simple Python script that implements a callback function to process the AI Tasks that are sent by the users.</p>
-<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">YoutubeAgent</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> payment</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> payment</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;Data received:&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get_step</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        loader </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> YoutubeLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">from_youtube_url</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            youtube_url</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;input_query&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            add_video_info</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">False</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            language</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;en&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            transcript_format</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">TranscriptFormat</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">CHUNKS</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            chunk_size_seconds</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Load the documents from the video</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        docs </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> loader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">load</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot; &quot;</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">doc</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">page_content </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> doc </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> docs</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        llm </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> OpenAI</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">api_key</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">openai_api_key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        summarize_chain </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> load_summarize_chain</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">llm</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> chain_type</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;map_reduce&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        docs </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">Document</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">page_content</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        summary </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> summarize_chain</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">invoke</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">docs</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Summary:&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> summary</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;output_text&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Use the `payment` object to update the step</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">update_step</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            did</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;did&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            step_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            step</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;task_id&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;step_status&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;output&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> summary</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;output_text&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;is_last&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
+<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">YoutubeAgent</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> payment</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> payment</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;Data received:&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get_step</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_status&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Pending</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Step status is not pending&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;Fetching steps...&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        loader </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> YoutubeLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">from_youtube_url</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            youtube_url</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;input_query&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            add_video_info</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">False</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            language</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;en&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;es&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;pt&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;uk&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;ru&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;fr&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;zh-Hans&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;zh-Hant&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;de&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">           </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            transcript_format</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">TranscriptFormat</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">CHUNKS</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            chunk_size_seconds</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Load the documents from the video</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;Load the documents from the video&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">try</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            docs </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> loader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">load</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> docs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;No transcript available for the video.&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;No transcript available.&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;error&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> task_status</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">except</span><span class="token plain"> Exception </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;Error parsing transcript:&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;Error parsing transcript&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;error&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> task_status</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot; &quot;</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">doc</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">page_content </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> doc </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> docs</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        llm </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> OpenAI</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">api_key</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">openai_api_key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;Summarizing...&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        summarize_chain </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> load_summarize_chain</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">llm</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> chain_type</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;map_reduce&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        docs </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">Document</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">page_content</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        summary </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> summarize_chain</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">invoke</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">docs</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Summary:&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> summary</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;output_text&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Use the `payment` object to update the step</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">update_step</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            did</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;did&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            step_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            step</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;step_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;task_id&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;step_status&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;output&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> summary</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;output_text&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token string" style="color:#e3116c">&#x27;is_last&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;Summary ready.&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> task_status</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
 <p>As you can see the fuction <code>run</code> is the callback function that processes the AI Task. The function receives the data from the AI Task and uses it to process the task. In this case, the function uses the data to retrieve the Youtube video URL, transcribe it, and summarize it. After processing you have to update the step with the result.</p>
 <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Initialize the Payments object</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payment </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> Payments</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        app_id</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;youtube_agent&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        nvm_api_key</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">nvm_api_key</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        version</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;1.0.0&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        environment</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">Environment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get_environment</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">environment</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ai_protocol</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        web_socket_options</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&#x27;bearer_token&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> nvm_api_key</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Initialize the YoutubeAgent with the payment instance</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    agent </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> YoutubeAgent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Subscribe to the ai_protocol with the agent&#x27;s `run` method</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    subscription_task </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> asyncio</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get_event_loop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">create_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">agent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">run</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> join_account_room</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">try</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> subscription_task</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">except</span><span class="token plain"> asyncio</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">CancelledError</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;Subscription task was cancelled&quot;</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
 <p>The <code>main</code> function initializes the Payments object and the YoutubeAgent object. Then it subscribes to the ai_protocol with the agent&#x27;s <code>run</code> method.
@@ -51,11 +51,11 @@ <h3 class="anchor anchorWithStickyNavbar_LWe7" id="agent2agent-implementation-yo
 <p>But in this example our logic is a bit more sophisticated because when the <code>processSteps</code> callback function is invoked, we check the step name to know which step we are processing.</p>
 <div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">processSteps</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">any</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> eventData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">parse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Received event: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">eventData</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> step </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">eventData</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">step_id</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Processing Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">task_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> - </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> [ </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_status</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> ]: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">input_query</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">step_status </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Pending</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">warn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> is not pending. Skipping...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Check the step name to know which step we are processing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// ....</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
 <p>When a new Task is created by the user, automatically is created a step with name <code>init</code>. What we do in this case is create the execution plan of the task, which in our example involves 2 steps: <code>transcribe</code> and <code>text2speech</code>:</p>
-<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;init&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Setting up steps necessary to resolve the task ...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> transcribeStepId </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">generateStepId</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> createResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">createSteps</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> steps</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> transcribeStepId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        predecessor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">step_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        input_query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;transcribe&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        cost</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        order</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">generateStepId</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">              </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        predecessor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> transcribeStepId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        input_query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;text2speech&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        order</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    createResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Steps created successfully&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Error creating steps: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">createResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">      </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> updateResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    updateResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> : </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> completed!</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Error updating step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> - </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">updateResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;transcribe&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Here we integrate with the Youtube Summarizer agent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;text2speech&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Here we generate the speech from the Youtube summarized text</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">warn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> is not recognized. Skipping...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
+<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;init&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Setting up steps necessary to resolve the task ...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> transcribeStepId </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">generateStepId</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> createResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">createSteps</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> steps</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> transcribeStepId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        predecessor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">step_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        input_query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;transcribe&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        cost</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        order</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">generateStepId</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">              </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        predecessor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> transcribeStepId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        input_query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;text2speech&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        order</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    createResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;Steps created successfully&#x27;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;error&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Error creating steps: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">createResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> updateResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    updateResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> : </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> completed!</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;error&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Error updating step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> - </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">updateResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;transcribe&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Here we integrate with the Youtube Summarizer agent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;text2speech&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Here we generate the speech from the Youtube summarized text</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">warn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> is not recognized. Skipping...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
 <p>When the step <code>init</code> is completed, it will add 2 additional steps to the task and our agent will receive the next step to process. Because the <code>text2speech</code> steps depend on the completion of the <code>transcribe</code> step, we will receive first that one, and there is where we integrate with the Youtube Summarizer:</p>
-<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;transcribe&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Transcribing video to text with external agent ...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// First we check if we have enough balance to query the Youtube AI Agent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> balanceResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getPlanBalance</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">PLAN_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Youtube Plan balance: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">balanceResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">balance</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">balanceResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">balance </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// If we don&#x27;t have enough balance, we order more credits</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">warn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Insufficient balance to query the Youtube AI Agent&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Ordering more credits...&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">orderPlan</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">PLAN_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Create the AI Task to query the Youtube Agent with the youtube video URL</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> aiTask </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;transcribe&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">&quot;additional_params&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">&quot;artifacts&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Querying Youtube Agent DID: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">AGENT_YOUTUBE_DID</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> with input: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">input_query</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Get the JWT access token and the Proxy we must use to query theYoutube Agent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> accessConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getServiceAccessConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">AGENT_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Create the task</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> taskResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">createTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">AGENT_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> aiTask</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> accessConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">taskResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">!==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Failed to create task: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Task created: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">taskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> taskId </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> taskResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> did </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> taskResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> fullTask</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> resultFound </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> counter </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// We iterate a few times until the task is completed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">counter </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">MAX_RETRIES</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Checking Youtube task status for task ID [</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">counter</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">]: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> fullTaskResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getTaskWithSteps</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> taskId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> accessConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fullTaskResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">!==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Failed to get Youtube task: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">fullTaskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        process</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      fullTask </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> fullTaskResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Youtube Task status: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">fullTask</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">task_status</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fullTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Youtube Task completed with cost: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">fullTask</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">cost</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">  Output: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">fullTask</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">output</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        resultFound </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">break</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fullTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Task failed with message </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">fullTask</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">output</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">break</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      counter</span><span class="token operator" style="color:#393A34">++</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sleep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">SLEEP_INTERVAL</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> updateResult    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">resultFound</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// If for whatever reason the task is not completed in time, we update the step with the error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;Task not completed in time&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      updateResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;Task not completed in time &#x27;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// If the task is completed, we update the step with the output result</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      updateResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> fullTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">output</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output_additional</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> fullTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">output_additional</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output_artifacts</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> fullTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">output_artifacts</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        cost</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> fullTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">cost</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
+<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;transcribe&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Transcribing video to text with external agent ...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// First we check if we have enough balance to query the Youtube AI Agent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> balanceResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getPlanBalance</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">PLAN_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Youtube Plan balance: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">balanceResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">balance</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">balanceResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">balance </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// If we don&#x27;t have enough balance, we order more credits</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;warning&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Insufficient balance to query the Youtube AI Agent. Ordering more credits.</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">orderPlan</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">PLAN_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Create the AI Task to query the Youtube Agent with the youtube video URL</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> aiTask </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;transcribe&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">&quot;additional_params&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token string-property property" style="color:#36acaa">&quot;artifacts&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Querying Youtube Agent DID: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">AGENT_YOUTUBE_DID</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> with input: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">input_query</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Get the JWT access token and the Proxy we must use to query theYoutube Agent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> accessConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getServiceAccessConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">AGENT_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Create the task</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> taskResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">createTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token constant" style="color:#36acaa">AGENT_YOUTUBE_DID</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      aiTask</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      accessConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> taskLog</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> TaskLogMessage </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">parse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Received ws task log: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">taskLog</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_status</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> taskLog</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">LOG: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskLog</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">task_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> :: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskLog</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">message</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">validateExternalYoutubeSummarizerTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">taskLog</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">taskResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">!==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;error&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Failed to create task on Youtube Summarizer external agent: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Because we couldnt summarize the Youtube video on the external agent:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// we UPDATE the Step to FAILED</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Error creating task on Youtube Summarizer external agent: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">taskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Task on external agent created [</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">task</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">task_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">] created: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">taskResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">task</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">input_query</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
 <p>At this stage if everything worked correctly we must have a few credits and the summary of the Youtube video. Because the <code>transcribe</code> is completed now we will receive an update on the <code>text2speech</code> step, meaning now we can process that step:</p>
-<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;text2speech&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Converting text to audio ...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> fileSpeech </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> openaiTools</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">text2speech</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Speech file generated: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">fileSpeech</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> cid </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">uploadSpeechFileToIPFS</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fileSpeech</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Speech file uploaded to IPFS: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">cid</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> updateResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;hey baby, we got this!&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output_additional</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;{&quot;result&quot;: &quot;success&quot;}&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output_artifacts</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">cid</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      cost</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
+<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;text2speech&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Converting text to audio ...</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> fileSpeech </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> openaiTools</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">text2speech</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">input_query</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Speech file generated</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> cid </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">uploadSpeechFileToIPFS</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fileSpeech</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Speech file generated uploaded to IPFS</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> updateResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">did</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      step_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      is_last</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Text converted to audio: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">cid</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output_additional</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;success&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      output_artifacts</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">IpfsHelper</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">cidToUrl</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cid</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      cost</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">updateResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">201</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        step_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">step_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> : </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> completed!</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        task_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Failed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;error&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Error updating step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> - </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">JSON</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation function" style="color:#d73a49">stringify</span><span class="token template-string interpolation punctuation" style="color:#393A34">(</span><span class="token template-string interpolation">updateResult</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:#393A34">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
 <p>If the <code>text2speech</code> step is completed, we will update the step with the result of the audio file and the cost of the step. And because the <code>text2speech</code> step is the last one, when we update the step this will resolve the whole task and calculate the total cost as the sum of all the individual cost of the steps.</p>
 <h2 class="anchor anchorWithStickyNavbar_LWe7" id="notebooks">Notebooks<a href="#notebooks" class="hash-link" aria-label="Direct link to Notebooks" title="Direct link to Notebooks">​</a></h2>
 <p>In the <a href="https://colab.research.google.com/drive/1Pqrfm3P5t8P9DS7Hwp3v72jhRrB2KsP5#scrollTo=dghI-HwVgulp" target="_blank" rel="noopener noreferrer">Python Notebook</a> example, we will show you how to use the Payments Library to create Payment Plans, register AI Agents, and query them.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/10-examples.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/libraries/process-tasks"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">How AI Builders can process AI Tasks?</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/tutorials/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Getting Started with the Tutorials</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ai-agents" class="table-of-contents__link toc-highlight">AI Agents</a><ul><li><a href="#youtube-agent-python" class="table-of-contents__link toc-highlight">Youtube Agent (Python)</a></li><li><a href="#the-text-to-speech-agent-typescript" class="table-of-contents__link toc-highlight">The Text to Speech Agent (Typescript)</a></li><li><a href="#simple-text-to-speech-agent-implementation" class="table-of-contents__link toc-highlight">Simple Text to Speech Agent implementation</a></li><li><a href="#agent2agent-implementation-youtube-to-speech" class="table-of-contents__link toc-highlight">Agent2Agent implementation (Youtube to Speech)</a></li></ul></li><li><a href="#notebooks" class="table-of-contents__link toc-highlight">Notebooks</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
diff --git a/docs/libraries/getting-started/index.html b/docs/libraries/getting-started/index.html
index f69b4b08..3c4a09eb 100644
--- a/docs/libraries/getting-started/index.html
+++ b/docs/libraries/getting-started/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/libraries/index.html b/docs/libraries/index.html
index 8619f177..1cce5e8a 100644
--- a/docs/libraries/index.html
+++ b/docs/libraries/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/libraries/order-plans/index.html b/docs/libraries/order-plans/index.html
index 58a2a4fb..2145b006 100644
--- a/docs/libraries/order-plans/index.html
+++ b/docs/libraries/order-plans/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/libraries/process-tasks/index.html b/docs/libraries/process-tasks/index.html
index c1ff2974..be34b635 100644
--- a/docs/libraries/process-tasks/index.html
+++ b/docs/libraries/process-tasks/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,13 @@ <h3 class="anchor anchorWithStickyNavbar_LWe7" id="ai-tasks-and-steps">AI Tasks
 <p>If the AI task requires <strong>multiple steps</strong>, the AI Agent can create more steps and setup the order of execution and configuration of them. This can be done by defining the <strong>name</strong>, <strong>order</strong> and <strong>predecessor</strong> step.</p>
 </li>
 </ul>
-<p>We will see different code examples about how to do this in the following section.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/08-process-tasks.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/libraries/query-agents"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">How Subscribers can query AI Agents?</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/libraries/examples"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Code Examples</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#benefits-of-delegating-the-api-to-nevermined-ai-infrastructure" class="table-of-contents__link toc-highlight">Benefits of delegating the API to Nevermined AI Infrastructure</a></li><li><a href="#how-to-process-ai-tasks" class="table-of-contents__link toc-highlight">How to process AI Tasks?</a><ul><li><a href="#ai-tasks-and-steps" class="table-of-contents__link toc-highlight">AI Tasks and Steps</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
+<p>We will see different code examples about how to do this in the following section.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="sending-task-logs-dynamically">Sending task logs dynamically<a href="#sending-task-logs-dynamically" class="hash-link" aria-label="Direct link to Sending task logs dynamically" title="Direct link to Sending task logs dynamically">​</a></h3>
+<p>The execution of an AI task can be long and the user can want to know the status of the task. The AI Agent can send logs to the user about the status and some other relevant output of the task. This can be done using the <code>log_task (python)</code> or <code>logTask (typescript)</code> methods.</p>
+<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>When your task finishes with a <code>Completed</code> or <code>Failed</code> status, you can send a log message witht that status. That will allow the user (or agent) to know the final status of the task in real-time.</p></div></div>
+<p>Let&#x27;s see an example:</p>
+<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Python</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Typescript</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">payment</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ai_protocol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">log_task</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  TaskLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    task_id</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">step</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&#x27;task_id&#x27;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    message</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;Summary ready.&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    level</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    task_status</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">value</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> logMessage</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> TaskLogMessage </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    task_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">task_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    level</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;info&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    task_status</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AgentExecutionStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Completed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">Step </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> : </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">step</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation">step_id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> completed!</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> payments</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">logTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">logMessage</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
+<p>These logs will be send via websocket and the user who sent the task can see them in real time.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/nevermined-io/app_docs/tree/main/docs/libraries/08-process-tasks.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/libraries/query-agents"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">How Subscribers can query AI Agents?</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/libraries/examples"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Code Examples</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#benefits-of-delegating-the-api-to-nevermined-ai-infrastructure" class="table-of-contents__link toc-highlight">Benefits of delegating the API to Nevermined AI Infrastructure</a></li><li><a href="#how-to-process-ai-tasks" class="table-of-contents__link toc-highlight">How to process AI Tasks?</a><ul><li><a href="#ai-tasks-and-steps" class="table-of-contents__link toc-highlight">AI Tasks and Steps</a></li><li><a href="#sending-task-logs-dynamically" class="table-of-contents__link toc-highlight">Sending task logs dynamically</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/libraries">Libraries</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials">Tutorials</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/faq">FAQ</a></li><li class="footer__item"><a href="https://docs.nevermined.io/docs/protocol" target="_blank" rel="noopener noreferrer" class="footer__link-item">Protocol<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Nevermined App</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">App<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://testing.nevermined.app/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://nevermined.io/nevermined-blog/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/nevermined-io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/channel/UCaDKPgnEk4ekvQo2vO6FIBQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Youtube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="mailto:info@nevermined.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Email<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><ul class="social-links">
                   <li>
                     <a href="https://discord.gg/GZju2qScKq" target="_blank" rel="noopener noreferrer">
                       <img src="/nevermined/discord.svg" alt="Discord" class="discord">
diff --git a/docs/libraries/query-agents/index.html b/docs/libraries/query-agents/index.html
index e092186f..5a8022c3 100644
--- a/docs/libraries/query-agents/index.html
+++ b/docs/libraries/query-agents/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/libraries/what-can-you-do/index.html b/docs/libraries/what-can-you-do/index.html
index 8dae6764..11bd7d8b 100644
--- a/docs/libraries/what-can-you-do/index.html
+++ b/docs/libraries/what-can-you-do/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/advanced/dynamic-charge-credits/index.html b/docs/tutorials/advanced/dynamic-charge-credits/index.html
index 94a52629..2a8cfb89 100644
--- a/docs/tutorials/advanced/dynamic-charge-credits/index.html
+++ b/docs/tutorials/advanced/dynamic-charge-credits/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/advanced/index.html b/docs/tutorials/advanced/index.html
index 5961f359..bc80da6e 100644
--- a/docs/tutorials/advanced/index.html
+++ b/docs/tutorials/advanced/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/advanced/smart-contract-access/index.html b/docs/tutorials/advanced/smart-contract-access/index.html
index 350bb3a2..7196f8ae 100644
--- a/docs/tutorials/advanced/smart-contract-access/index.html
+++ b/docs/tutorials/advanced/smart-contract-access/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/advanced/widgets-integration/index.html b/docs/tutorials/advanced/widgets-integration/index.html
index 01a2629e..624eb1ad 100644
--- a/docs/tutorials/advanced/widgets-integration/index.html
+++ b/docs/tutorials/advanced/widgets-integration/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/ai/chatgpt-plugin/index.html b/docs/tutorials/ai/chatgpt-plugin/index.html
index 1c6c7b15..04a3b048 100644
--- a/docs/tutorials/ai/chatgpt-plugin/index.html
+++ b/docs/tutorials/ai/chatgpt-plugin/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/ai/expose-python-agent/index.html b/docs/tutorials/ai/expose-python-agent/index.html
index f6c754a0..4768728a 100644
--- a/docs/tutorials/ai/expose-python-agent/index.html
+++ b/docs/tutorials/ai/expose-python-agent/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/ai/huggingface/index.html b/docs/tutorials/ai/huggingface/index.html
index a6c640ab..198c79e7 100644
--- a/docs/tutorials/ai/huggingface/index.html
+++ b/docs/tutorials/ai/huggingface/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/ai/index.html b/docs/tutorials/ai/index.html
index 27e2e956..ee9a456b 100644
--- a/docs/tutorials/ai/index.html
+++ b/docs/tutorials/ai/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/ai/streamlit/index.html b/docs/tutorials/ai/streamlit/index.html
index 991012da..98894658 100644
--- a/docs/tutorials/ai/streamlit/index.html
+++ b/docs/tutorials/ai/streamlit/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/ai/super-agent/index.html b/docs/tutorials/ai/super-agent/index.html
index c2e517a7..70a1ed3f 100644
--- a/docs/tutorials/ai/super-agent/index.html
+++ b/docs/tutorials/ai/super-agent/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/configure-account/index.html b/docs/tutorials/builders/configure-account/index.html
index ba1e1b9b..f3d9009e 100644
--- a/docs/tutorials/builders/configure-account/index.html
+++ b/docs/tutorials/builders/configure-account/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/create-plan/index.html b/docs/tutorials/builders/create-plan/index.html
index 258230bd..e526ba53 100644
--- a/docs/tutorials/builders/create-plan/index.html
+++ b/docs/tutorials/builders/create-plan/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/distribute/index.html b/docs/tutorials/builders/distribute/index.html
index 5585e2fe..506ff10a 100644
--- a/docs/tutorials/builders/distribute/index.html
+++ b/docs/tutorials/builders/distribute/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/index.html b/docs/tutorials/builders/index.html
index 9ed364d9..dbffe66f 100644
--- a/docs/tutorials/builders/index.html
+++ b/docs/tutorials/builders/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/openai-assistant/index.html b/docs/tutorials/builders/openai-assistant/index.html
index 66a5536d..9b49a4e9 100644
--- a/docs/tutorials/builders/openai-assistant/index.html
+++ b/docs/tutorials/builders/openai-assistant/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/register-agent/index.html b/docs/tutorials/builders/register-agent/index.html
index c7976227..6f7b7d6f 100644
--- a/docs/tutorials/builders/register-agent/index.html
+++ b/docs/tutorials/builders/register-agent/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/builders/register-file-asset/index.html b/docs/tutorials/builders/register-file-asset/index.html
index 7527d33f..fe6244f2 100644
--- a/docs/tutorials/builders/register-file-asset/index.html
+++ b/docs/tutorials/builders/register-file-asset/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/first-steps/index.html b/docs/tutorials/first-steps/index.html
index bada007f..f851bbe8 100644
--- a/docs/tutorials/first-steps/index.html
+++ b/docs/tutorials/first-steps/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/first-steps/loggin/index.html b/docs/tutorials/first-steps/loggin/index.html
index ae30ddde..f485c3cd 100644
--- a/docs/tutorials/first-steps/loggin/index.html
+++ b/docs/tutorials/first-steps/loggin/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/first-steps/navigate-app/index.html b/docs/tutorials/first-steps/navigate-app/index.html
index 06808b2f..3037be66 100644
--- a/docs/tutorials/first-steps/navigate-app/index.html
+++ b/docs/tutorials/first-steps/navigate-app/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/index.html b/docs/tutorials/index.html
index b81284f4..dd6e12b7 100644
--- a/docs/tutorials/index.html
+++ b/docs/tutorials/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/integration/agent-integration/index.html b/docs/tutorials/integration/agent-integration/index.html
index 99032b68..67699ae0 100644
--- a/docs/tutorials/integration/agent-integration/index.html
+++ b/docs/tutorials/integration/agent-integration/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/integration/index.html b/docs/tutorials/integration/index.html
index 7d2e18cf..8cd56e48 100644
--- a/docs/tutorials/integration/index.html
+++ b/docs/tutorials/integration/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/integration/nextjs-react-payments/index.html b/docs/tutorials/integration/nextjs-react-payments/index.html
index 453cd710..f435efe2 100644
--- a/docs/tutorials/integration/nextjs-react-payments/index.html
+++ b/docs/tutorials/integration/nextjs-react-payments/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/integration/nvm-api-keys/index.html b/docs/tutorials/integration/nvm-api-keys/index.html
index 80282774..4ccdaee9 100644
--- a/docs/tutorials/integration/nvm-api-keys/index.html
+++ b/docs/tutorials/integration/nvm-api-keys/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/integration/python-integration/index.html b/docs/tutorials/integration/python-integration/index.html
index 8844cb67..81a55ab7 100644
--- a/docs/tutorials/integration/python-integration/index.html
+++ b/docs/tutorials/integration/python-integration/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/integration/sdk-integration/index.html b/docs/tutorials/integration/sdk-integration/index.html
index de1c0bc8..1c46e7eb 100644
--- a/docs/tutorials/integration/sdk-integration/index.html
+++ b/docs/tutorials/integration/sdk-integration/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/subscribers/index.html b/docs/tutorials/subscribers/index.html
index a3f5df87..99fb9234 100644
--- a/docs/tutorials/subscribers/index.html
+++ b/docs/tutorials/subscribers/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/subscribers/paying-crypto/index.html b/docs/tutorials/subscribers/paying-crypto/index.html
index cb125f61..f36c461a 100644
--- a/docs/tutorials/subscribers/paying-crypto/index.html
+++ b/docs/tutorials/subscribers/paying-crypto/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/subscribers/paying-stripe/index.html b/docs/tutorials/subscribers/paying-stripe/index.html
index 7e696408..7389fb95 100644
--- a/docs/tutorials/subscribers/paying-stripe/index.html
+++ b/docs/tutorials/subscribers/paying-stripe/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/subscribers/search-and-purchase/index.html b/docs/tutorials/subscribers/search-and-purchase/index.html
index 5a3be3bf..cbec4780 100644
--- a/docs/tutorials/subscribers/search-and-purchase/index.html
+++ b/docs/tutorials/subscribers/search-and-purchase/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/web3/faucets/index.html b/docs/tutorials/web3/faucets/index.html
index d8821847..b0d7f2b3 100644
--- a/docs/tutorials/web3/faucets/index.html
+++ b/docs/tutorials/web3/faucets/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/web3/index.html b/docs/tutorials/web3/index.html
index a7385123..dc4200fb 100644
--- a/docs/tutorials/web3/index.html
+++ b/docs/tutorials/web3/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/web3/metamask-networks/index.html b/docs/tutorials/web3/metamask-networks/index.html
index 86f2ff7d..46d35e56 100644
--- a/docs/tutorials/web3/metamask-networks/index.html
+++ b/docs/tutorials/web3/metamask-networks/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/web3/metamask-tokens/index.html b/docs/tutorials/web3/metamask-tokens/index.html
index 60b94a94..84a32f10 100644
--- a/docs/tutorials/web3/metamask-tokens/index.html
+++ b/docs/tutorials/web3/metamask-tokens/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/docs/tutorials/web3/metamask/index.html b/docs/tutorials/web3/metamask/index.html
index 07afea25..c2bea500 100644
--- a/docs/tutorials/web3/metamask/index.html
+++ b/docs/tutorials/web3/metamask/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/index.html b/index.html
index 537549ba..0d8fb79b 100644
--- a/index.html
+++ b/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/markdown-page/index.html b/markdown-page/index.html
index ab77696b..718ff9d4 100644
--- a/markdown-page/index.html
+++ b/markdown-page/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
diff --git a/search/index.html b/search/index.html
index 733675cb..1686ddd8 100644
--- a/search/index.html
+++ b/search/index.html
@@ -15,7 +15,7 @@
 <link rel="search" type="application/opensearchdescription+xml" title="Nevermined Payments Documentation" href="/opensearch.xml">
 
 <link rel="stylesheet" href="/lib/nvm-one-widget.css"><link rel="stylesheet" href="/assets/css/styles.773786d3.css">
-<script src="/assets/js/runtime~main.df74ef45.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.981f9b14.js" defer="defer"></script>
 <script src="/assets/js/main.553e07e5.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">