Skip to content

Integrate Memory Modules into Your AI Assistant

Overview

Memory modules are crucial components in building AI assistants that can retain context, personalize interactions, and provide coherent responses over time. By integrating memory modules, your assistant can remember previous conversations, utilize environment variables, and retrieve relevant information to enhance user experience. This tutorial will guide you through configuring and using memory modules.

The detailed configuration documentation and API references are available in Memory Section.

Examples

This section demonstrates how to use memory modules in your AI assistant through practical code examples.

Configuration

Here’s the configuration used in this tutorial (config.yaml):

memory_config:  # Top-level configuration for all memory modules
  embedding_config: # Global configuration of the embedding model (optional).
    model: "Qwen/Qwen3-Embedding-0.6B" # Embedding model identifier.
  memory_modules:  # List of memory modules to integrate (ChatMemoryModule, VariableMemoryModule, MemTreeModule) 
    - memory_name: chat_history  # Unique identifier for this memory module
      memory_class: ChatMemoryModule  # Class that implements conversation history storage
      config:  # Configuration parameters for ChatMemoryModule
        n_rounds: 5  # Default number of conversation rounds to retrieve (overridable at runtime)
        max_context: 5000  # Maximum character count for retrieved history (overridable at runtime). Must be a positive integer. 
    - memory_name: env_variable  # Unique identifier for environment variables memory
      memory_class: VariableMemoryModule  # Class that stores key-value pairs
      config:  # Configuration parameters for VariableMemoryModule
        variables:  # Dictionary of environment variables
          event_title: "FIFA World Cup"  # Title of the event
          event_year: "2022"  # Year of the event
          supporting_team: "Brazil"  # User's favorite team
          main_competitors: "Argentina, Germany, France"  # Main competing teams

orchestrator:  # Orchestrator configuration for managing agent interactions
  agent_list:  # List of agents available to the orchestrator
    - agent_name: "Search Agent"  # Agent that performs web searches
    - agent_name: "Memory Insight Agent"  # Agent that uses memory for context-aware responses

utility_agents:  # Definitions of utility agents
  - agent_class: SearchAgent  # Built-in search agent class
    agent_name: "Search Agent"  # Name referenced by orchestrator
    agent_description: "The Search Agent retrieves information from the web."  # Description of agent capabilities

  - agent_class: CustomAgent  # Custom agent class (user-defined)
    agent_name: "Memory Insight Agent"  # Name referenced by orchestrator
    agent_description: "The Memory Insight Agent can help you by utilizing stored memory to provide context-aware responses about different sports tournaments."  # Description of agent capabilities

Define Your Custom Python Agent

First, define a custom agent that utilizes the memory modules. For example, a simple agent that responds based on user queries, environment variables, and chat history:

import asyncio
import os
from typing import Optional

from air import AsyncAIRefinery, DistillerClient
from dotenv import load_dotenv

load_dotenv() # loads your API_KEY from your local '.env' file
api_key=str(os.getenv("API_KEY"))



async def memory_insight_agent(
    query: str, env_variable: Optional[dict] = None, chat_history: Optional[str] = None
):
    """
    A simple agent that generates responses based on user queries,
    environment variables, and chat history.

    Args:
        query (str): User query to be processed.
        env_variables (dict): Environment variables that can be used to personalize responses.
        chat_history (str): Previous conversation rounds to maintain context.

    Returns:
        str: Assistant's response.
    """
    # Construct the prompt with environment variables and chat history
    prompt = f"""
    You are a helpful personal assistant focused on the FIFA World Cup 2022. Use the user's environment variables and previous conversation to provide a personalized and relevant response to the user's query. Ensure that your response is informed by their preferences and past interactions.

    Environment Variables:
    {env_variable}

    Chat History:
    {chat_history}

    User Query: {query}
    Assistant:
    """

    # Initialize the AsyncAIRefinery client using the authenticated credentials
    client = AsyncAIRefinery(api_key=api_key)

    # print(prompt)

    # Get the response from the language model
    response = await client.chat.completions.create(
        messages=[{"role": "user", "content": prompt}],
        model="openai/gpt-oss-120b",
    )

    # Return the assistant's response
    return str(response.choices[0].message.content).strip()

Initialize the Distiller Client and Add Memory Modules

Next, initialize the DistillerClient, create a project, define custom agent mappings, and add memory entries.

async def custom_demo():
    """
    Demonstrates the use of environment variables and chat history as memory in an AI assistant focused on the FIFA World Cup 2022.
    """
    # Initialize a Distiller client for managing interactions
    distiller_client = DistillerClient(api_key=api_key)

    # Create/register a new Distiller project
    distiller_client.create_project(config_path="config.yaml", project="memory_tutorial")


    # Define custom agent mappings
    executor_dict = {
        "Memory Insight Agent": memory_insight_agent,
    }

    # Use the Distiller client
    async with distiller_client(
        project="memory_tutorial",
        uuid="test_user",
        executor_dict=executor_dict,
    ) as dc:

        # Add environment variables to the memory
        await dc.add_memory(
            source="env_variable",
            variables_dict={
                "match_location": "Qatar",
                "fan_experience": "High excitement and engagement",
            },
        )
        print("\n[INFO] Environment variables added to memory.")

        # List of user queries to process
        queries = [
            "Who are our main competitors in this world cup?",
            "Which country is hosting the tournament?",
        ]

        print("\n\n=== Custom Demo ===")
        for query in queries:
            responses = await dc.query(query=query)
            print("-------------------------")
            print(f"\nUser Query: {query}")
            async for response in responses:
                print(f"Response:\n{response['content']}")

        # Demonstrate memory retrieval and usage
        print("\n=== Memory Retrieval Demo ===")

        # Retrieve chat history
        chat_memory = await dc.retrieve_memory(source="chat_history", n_rounds=3)
        print(f"Retrieved Chat History Content:\n{chat_memory}")

        # Retrieve environment variables
        env_memory = await dc.retrieve_memory(source="env_variable")
        print(f"Retrieved Environment Variables:\n{env_memory}")

if __name__ == "__main__":
    asyncio.run(custom_demo())

Explanation

  • DistillerClient: Manages interactions with the Distiller framework.
  • create_project: Initializes a new project using the configuration file.
  • executor_dict: Maps the agent name to the custom agent function.
  • add_memory: Adds environment variables to the assistant's memory under the specified source (env_variable).
  • Processing Queries: The assistant processes each query, accessing memory modules to generate informed responses.
  • Memory Retrieval Demo: Shows how to retrieve memory content as a string using retrieve_memory().

Expected Output

After running the custom_demo function, the assistant should provide responses that utilize both the environment variables and chat history. The output might look like:

=== Custom Demo ===
-------------------------

User Query: Who are our main competitors in this world cup?
Response:
I remember we discussed this earlier. In the FIFA World Cup 2022, Brazil's main competitors are Argentina, Germany, and France. These teams have a strong track record and are expected to give Brazil a tough competition. Are you excited to see how Brazil will perform against these teams?
-------------------------

User Query: Which country is hosting the tournament?
Response:
We've been over this before! I recall you asking about the host country earlier. The FIFA World Cup 2022 is being hosted by Qatar. Isn't it exciting to think about the thrilling matches that will take place in this beautiful country? By the way, have you checked the schedule for Brazil's matches? I can help you with that if you'd like!

=== Memory Retrieval Demo ===
Retrieved Chat History Content:
user: Who are our main competitors in this world cup?
Memory Insight Agent: I remember we discussed this earlier. In the FIFA World Cup 2022, Brazil's main competitors are Argentina, Germany, and France...

user: Which country is hosting the tournament?
Memory Insight Agent: We've been over this before! I recall you asking about the host country earlier. The FIFA World Cup 2022 is being hosted by Qatar...

Retrieved Environment Variables:
event_title: "FIFA World Cup"
event_year: "2022"
supporting_team: "Brazil"
main_competitors: "Argentina, Germany, France"
match_location: "Qatar"
fan_experience: "High excitement and engagement"

Advanced Memory Features with Examples

Memory Slicing Examples (UtilityAgent Contexts)

Memory slicing is optional. Within contexts, you can use the object form to selectively filter chat history or environment variables, or use a plain string entry to include the entire memory module without filtering.

Below are two concrete patterns, adapted from the SDK examples, that show how to slice chat history and variable memory.

Example A: Chat History Slicing (Full vs Partial Access)

This example shows how a UtilityAgent can either see full chat history or only the user's turns. The include_agents list controls which agent messages are included.

memory_config:
  memory_modules:
    # Stores recent user/agent turns for context.
    - memory_name: chat_history
      memory_class: ChatMemoryModule
      config:
        auto_add: True
        n_rounds: 3

orchestrator:
  # Orchestrator can route to both agents in this demo.
  agent_list:
    - agent_name: "Response Agent"
    - agent_name: "Search Agent"

utility_agents:
  # Response Agent answers the user using sliced memory context.
  - agent_class: UtilityAgent
    agent_name: "Response Agent"
    agent_description: "Assistant to answer user queries."
    config:
      magic_prompt: |
        You are a general assistant to answer user queries.

        Question: {query}
        Answer:
      output_style: "markdown"
      contexts:
        # Full access to chat history (user + agent messages)
        # - chat_history

        # Partial access to chat history (user-only, no agent turns)
        - chat_history:
            # Empty list means only user messages are visible.
            include_agents: []
        # Or restrict to specific agents only:
        # - chat_history:
        #     include_agents:
        #       - "Search Agent"

  # Search Agent fetches facts for the Response Agent to reuse.
  - agent_class: SearchAgent
    agent_name: "Search Agent"
    agent_description: "Performs research on queries."
Python File: Chat History Slicing

This example is the same as the SDK demo and shows how include_agents affects what the UtilityAgent can see. With full access, the assistant can leverage the Search Agent's output; with partial access (include_agents: []), it only sees the user query.

async def run_demo(config_file) -> None:
    """
    Create a project with a UtilityAgent that slices chat history.
    """
    distiller_client = DistillerClient(api_key=str(os.getenv("API_KEY")))
    distiller_client.create_project(config_path="config.yaml", project="memory_tutorial")

    async with distiller_client(project="memory_tutorial", uuid="test_user") as dc:

        # The config file controls chat history slicing via include_agents.
        queries = [
            "Search Agent, what is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree? Response Agent, what is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?",
        ]
        # This single user query will be split into two tasks by the orchestrator:
        # 1) Search Agent task: "What is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?"
        # 2) Response Agent task: "What is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?"

        # Expected behavior with full chat-history access:
        # The Response Agent can generate the correct answer based on the memory
        # from the Search Agent. Expected answer: "Kathmandu College of Management".

        # Expected behavior with partial chat-history access (user query only):
        # The Response Agent lacks access to the Search Agent's results
        # and will likely generate a wrong answer.

        for query in queries:
            print(f"\nUser: {query}")
            responses = await dc.query(query=query)
            async for response in responses:
                print(f"{response['role']}: {response['content']}")

        await dc.reset_memory()
        await async_print("Memory reset complete.")


if __name__ == "__main__":
    print("--------------- Full Access to Chat History --------------- ")
    asyncio.run(run_demo(config_file=CONFIG_PATH_FULL_ACCESS))

    print("\n\n--------------- Partial Access to Chat History --------------- ")
    asyncio.run(run_demo(config_file=CONFIG_PATH_PARTIAL_ACCESS))
Expected Output: Chat History Slicing

Example output from running the script above (full access vs partial access):

--------------- Full Access to Chat History --------------- 
User: Search Agent, what is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree? Response Agent, what is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?
orchestrator: I will decompose your query into subtasks and handle them one by one. Search Agent, What is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?
Search Agent: Searching over Web Search
Search Agent: Prince Nirajan Bir Bikram Shah Dev completed his bachelor's degree at Kathmandu College of Management.[1]

## References
[1] https://www.raonline.ch/pages/story/np/npstory22c.html — Document stating Prince Nirajan pursued a Bachelor in Business Studies at Kathmandu College of Management.
orchestrator: Response Agent, What is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?
Response Agent: # Answer
## Kathmandu College of Management
Memory reset complete.


--------------- Partial Access to Chat History --------------- 
User: Search Agent, what is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree? Response Agent, what is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?
orchestrator: I will decompose your query into subtasks and handle them one by one. Search Agent, What is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?
Search Agent: Searching over Web Search
Search Agent: ## College where Prince Nirajan completed his bachelor's degree
Prince Nirajan Bir Bikram Shah Dev completed his bachelor's degree at Kathmandu College of Management.[1]

## References
[1] https://www.raonline.ch/pages/story/np/npstory22c.html — Article mentioning Prince Nirajan's higher education at Kathmandu College of Management
orchestrator: Response Agent, What is the name of the college where Prine Nirajan Bir Bikram Shah Dev completed his bachelor's degree?
Response Agent: # Answer

## Tribhuvan University
Memory reset complete.

Notes: - With full chat history, the Response Agent can use the Search Agent's result to answer correctly.

  • With partial access, the Response Agent cannot see the Search Agent output and may answer incorrectly.
Example B: Variable Memory Slicing (Selected Keys Only)

This example shows how to pass only a subset of key-value variables into the UtilityAgent. The include_variables list is the allow-list.

memory_config:
  memory_modules:
    # Key-value memory used for env-style variables.
    - memory_name: env_variable
      memory_class: VariableMemoryModule
      config:
        variables:
          favorite_team: "Argentina"
          timezone: "UTC"
          venue: "Doha"
          ignore_me: "this key should be filtered out"

orchestrator:
  # Single-agent demo, no routing needed.
  agent_list:
    - agent_name: "Response Agent"
  enable_routing: false

utility_agents:
  # Response Agent uses allow-listed env vars only.
  - agent_class: UtilityAgent
    agent_name: "Response Agent"
    agent_description: "Shows how context filters limit env variables."
    config:
      magic_prompt: |
        You are a concise assistant for tournament questions.
        Only use the provided context; do not invent extra facts.

        Question: {query}
        Answer:
      output_style: "markdown"
      contexts:
        - env_variable:
            # Only the allow-listed keys are passed into the agent context.
            include_variables:
              - "timezone"
              - "venue"
Python File: Variable Memory Slicing

This snippet mirrors the SDK example and shows how to add variable memory, run queries, and compare filtered vs full retrieval.

async def run_demo() -> None:
    distiller_client = DistillerClient(api_key=str(os.getenv("API_KEY")))
    distiller_client.create_project(config_path="config.yaml", project="memory_tutorial")

    async with distiller_client(project="memory_tutorial", uuid="test_user") as dc:
        # Add/override a few env vars to demonstrate key filtering
        await dc.add_memory(
            source="env_variable",
            variables_dict={
                "favorite_team": "Japan",
                "timezone": "Asia/Tokyo",
                "sponsor": "ExampleCo (should not be surfaced)",
            },
        )

        queries = [
            "What is my favorite team and where is the match taking place?",
            "Remind me of the timezone we're using.",
        ]

        # Expected behavior:
        # The assistant can answer timezone using env_variable,
        # but should NOT reveal "favorite team" because it is not in include_variables.
        for query in queries:
            responses = await dc.query(query=query)
            async for response in responses:
                print(f"{response['role']}: {response['content']}")

        await dc.reset_memory()
        await async_print("Memory reset complete.")


if __name__ == "__main__":
    asyncio.run(run_demo())
Expected Output: Variable Memory Slicing

Example output from running the script above:

=== UtilityAgent with context filters ===

User: What is my favorite team and where is the match taking place?
Response Agent: # Answer

## Favorite Team
*Information not provided.*

## Match Venue
Doha

User: Remind me of the timezone we're using.
Response Agent: # Timezone
## Current Timezone
Asia/Tokyo
Unexpected fields: {'variables'}. Expected fields: {'n_rounds', 'format', 'max_context', 'source', 'variables_dict'}

Notes: - The assistant can return timezone and venue because those are allow-listed in include_variables.

  • The favorite team is not surfaced because it is not allow-listed in this example.

  • The Unexpected fields line indicates an extra key was passed to the memory module; remove variables from any retrieve_memory call or config kwargs to resolve it.

Usage Notes

  • Use include_agents: [] to restrict chat history to only the user messages. In this example, we set it to [] for simplicity. In real usage, you can provide a subset of agents to scope execution to only the ones relevant to your workflow (e.g., include_agents: ["Search Agent"]).

  • Use include_variables to expose only the keys you want the agent to see.

  • Use a plain string entry (e.g., - chat_history) to pass the full memory module without filtering.

Memory Retrieval with Search Demo

You can further explore the capabilities of memory modules with advanced querying and memory retrieval:

async def search_demo():
    """
    Demonstrates advanced querying and memory retrieval capabilities of the assistant.
    """
    # Initialize a Distiller client
    distiller_client = DistillerClient()

    # Create/register a new Distiller project
    distiller_client.create_project(config_path="config.yaml", project="memory_tutorial")

    # Define custom agent mappings
    executor_dict = {
        "Memory Insight Agent": memory_insight_agent,
    }

    # Use the Distiller client
    async with distiller_client(
        project="memory_tutorial",
        uuid="test_user",
        executor_dict=executor_dict,
    ) as dc:

        # List of user queries to process
        queries = [
            "What were the results of the semi-finals of the tournament?",
            "How have our main competitors been performing since the tournament, particularly in recent developments in 2025?",
        ]

        print("\n\n=== Search Demo ===")
        for query in queries:
            responses = await dc.query(query=query)
            print("-------------------------")
            print(f"\nUser Query: {query}")
            async for response in responses:
                print(f"Response:\n{response['content']}")

        print("-------------------------")
        # Retrieve chat history
        retrieved_chat_history = await dc.retrieve_memory(
            source="chat_history", n_rounds=3
        )
        print(f"\n[INFO] Retrieved Chat History:\n{retrieved_chat_history}\n")
Explanation
  • Processing Advanced Queries: The assistant handles more complex queries, utilizing memory modules for informed responses.
  • retrieve_memory: Retrieves chat history as a formatted string. You can control the amount of history with n_rounds and max_context parameters. See the Retrieving Memory Content section for all available options and format details.
Expected Output

The assistant leverages memory modules to provide detailed responses and retrieves recent chat history:

=== Search Demo ===
-------------------------

User Query: What were the results of the semi-finals of the tournament?
Response:
I see you're eager to know the semi-finals results of the FIFA World Cup 2022! As you're supporting Brazil, I'm sure you're interested in knowing how they fared. Unfortunately, Brazil was eliminated in the quarter-finals, losing to Croatia in a penalty shootout.

However, I can still provide you with the results of the semi-finals. The two matches were:

1. Argentina vs. Croatia: Argentina won 3-0, with goals from Lionel Messi, Julián Álvarez, and Alexis Mac Allister.
2. France vs. Morocco: France won 2-0, with goals from Théo Hernandez and Randal Kolo Muani.

The stage is now set for the final match between Argentina and France. As a Brazil supporter, you might be interested in knowing that Argentina is one of Brazil's main competitors, and this match is sure to be an exciting one!
-------------------------

User Query: How have our main competitors been performing since the tournament, particularly in recent developments in 2025?
Response:
I will decompose your query into subtasks and handle them one by one.Search Agent, argentina football team recent developments 2025
Response:
Searching over Web Search
Response:
**Argentina National Football Team: Recent Developments in 2025**

Argentina's national football team has been making waves in recent developments, particularly in 2025. As the reigning world champions, having won the 2022 FIFA World Cup, they continue to solidify their position as a force to be reckoned with in the football world.

**Rankings and Titles**

As of April 2025, Argentina ranks 1st in the FIFA Men's World Ranking, a testament to their consistent performance and dominance in the sport. They have also won a record 23 official titles, including the 2022 FIFA World Cup, and hold the record for the most senior official titles won.

**Notable Players and Rivalries**

Lionel Messi, the team's captain, is the all-time most-capped player with 191 matches and the highest goalscorer with 112 goals. Argentina is known for its intense rivalries with Brazil, England, Germany, Netherlands, Uruguay, Chile, and France, among others.

**Recent Matches and Performances**

In a recent World Cup qualifier match against Brazil, Argentina thrashed their arch-rivals 4-1, with Enzo Fernández scoring the second goal. This win was a significant milestone for the team, showcasing their strength and determination.

**Coaching Staff and Sponsorships**

Inter Miami CF announced Javier Mascherano's coaching staff for the 2025 season, which includes assistant coaches Lucas Rodríguez Pagano and Leandro Stillitano, among others. The team has also partnered with XBO.com, a crypto exchange, as their official global sponsor, marking a significant milestone in their global expansion strategy.

**Upcoming Matches and Events**

Argentina is set to visit India in October 2025 to play an exhibition match, which is expected to be a thrilling encounter. The team will also participate in the 2026 FIFA World Cup, where they will face stiff competition from other top teams.

Overall, Argentina's national football team continues to be a dominant force in the sport, with a strong team, notable players, and a rich history of success.
Response:
Search Agent, france football team recent developments 2025
Response:
Searching over Web Search
Response:
France's national football team has been making headlines in recent developments, particularly in 2025. As one of the main competitors, France has been working hard to maintain their position as a top team in the football world.

**Recent Performance and Rankings**

As of April 2025, France ranks 2nd in the FIFA Men's World Ranking, just behind Argentina. They have been performing well in recent matches, with a few notable wins and draws. However, they did face a setback in the UEFA Euro 2024 semi-finals, where they lost to Spain.

**Notable Players and Transfers**

Olivier Giroud, France's all-time leading scorer, has been making waves with his recent transfer to LAFC. He has been in top form, scoring crucial goals for his new team. Other notable players like Ousmane Dembele and Kylian Mbappé have also been performing well, with Dembele being PSG's top scorer with 33 goals in the current season.

**Coaching Staff and Contract Extensions**

Didier Deschamps, France's head coach, has confirmed that he will leave his contract after the 2026 World Cup. This news has sparked speculation about who will take over as the new head coach. Meanwhile, the team has been focusing on their upcoming matches, with a few key players extending their contracts with their respective clubs.

**Upcoming Matches and Events**

France is set to participate in the 2026 FIFA World Cup, where they will face stiff competition from other top teams. They will also be playing in the UEFA Nations League, where they will face teams like Spain and Portugal.

Overall, France's national football team continues to be a force to be reckoned with in the football world, with a strong team, notable players, and a rich history of success.
-------------------------

[INFO] Retrieved Chat History:
user: What were the results of the semi-finals of the tournament?
Memory Insight Agent: I see you're eager to know the semi-finals results of the FIFA World Cup 2022! As you're supporting Brazil, I'm sure you're interested in knowing how they fared. Unfortunately, Brazil was eliminated in the quarter-finals, losing to Croatia in a penalty shootout.

However, I can still provide you with the results of the semi-finals. The two matches were:

1. Argentina vs. Croatia: Argentina won 3-0, with goals from Lionel Messi, Julián Álvarez, and Alexis Mac Allister.
2. France vs. Morocco: France won 2-0, with goals from Théo Hernandez and Randal Kolo Muani.

The stage is now set for the final match between Argentina and France. As a Brazil supporter, you might be interested in knowing that Argentina is one of Brazil's main competitors, and this match is sure to be an exciting one!
orchestrator: Argentina football team recent developments 2025
Search Agent: **Argentina National Football Team: Recent Developments in 2025**

Argentina's national football team has been making waves in recent developments, particularly in 2025. As the reigning world champions, having won the 2022 FIFA World Cup, they continue to solidify their position as a force to be reckoned with in the football world.

**Rankings and Titles**

As of April 2025, Argentina ranks 1st in the FIFA Men's World Ranking, a testament to their consistent performance and dominance in the sport. They have also won a record 23 official titles, including the 2022 FIFA World Cup, and hold the record for the most senior official titles won.

**Notable Players and Rivalries**

Lionel Messi, the team's captain, is the all-time most-capped player with 191 matches and the highest goalscorer with 112 goals. Argentina is known for its intense rivalries with Brazil, England, Germany, Netherlands, Uruguay, Chile, and France, among others.

**Recent Matches and Performances**

In a recent World Cup qualifier match against Brazil, Argentina thrashed their arch-rivals 4-1, with Enzo Fernández scoring the second goal. This win was a significant milestone for the team, showcasing their strength and determination.

**Coaching Staff and Sponsorships**

Inter Miami CF announced Javier Mascherano's coaching staff for the 2025 season, which includes assistant coaches Lucas Rodríguez Pagano and Leandro Stillitano, among others. The team has also partnered with XBO.com, a crypto exchange, as their official global sponsor, marking a significant milestone in their global expansion strategy.

**Upcoming Matches and Events**

Argentina is set to visit India in October 2025 to play an exhibition match, which is expected to be a thrilling encounter. The team will also participate in the 2026 FIFA World Cup, where they will face stiff competition from other top teams.

Overall, Argentina's national football team continues to be a dominant force in the sport, with a strong team, notable players, and a rich history of success.
orchestrator: France football team recent developments 2025
Search Agent: France's national football team has been making headlines in recent developments, particularly in 2025. As one of the main competitors, France has been working hard to maintain their position as a top team in the football world.

**Recent Performance and Rankings**

As of April 2025, France ranks 2nd in the FIFA Men's World Ranking, just behind Argentina. They have been performing well in recent matches, with a few notable wins and draws. However, they did face a setback in the UEFA Euro 2024 semi-finals, where they lost to Spain.

**Notable Players and Transfers**

Olivier Giroud, France's all-time leading scorer, has been making waves with his recent transfer to LAFC. He has been in top form, scoring crucial goals for his new team. Other notable players like Ousmane Dembele and Kylian Mbappé have also been performing well, with Dembele being PSG's top scorer with 33 goals in the current season.

**Coaching Staff and Contract Extensions**

Didier Deschamps, France's head coach, has confirmed that he will leave his contract after the 2026 World Cup. This news has sparked speculation about who will take over as the new head coach. Meanwhile, the team has been focusing on their upcoming matches, with a few key players extending their contracts with their respective clubs.

**Upcoming Matches and Events**

France is set to participate in the 2026 FIFA World Cup, where they will face stiff competition from other top teams. They will also be playing in the UEFA Nations League, where they will face teams like Spain and Portugal.

Overall, France's national football team continues to be a force to be reckoned with in the football world, with a strong team, notable players, and a rich history of success.

Overall, France's national football team continues to be a force to be reckoned with in the football world, with a strong team, notable players, and a rich history of success. ```