Skip to content

Conversation

janspoerer
Copy link
Contributor

No description provided.

@janspoerer
Copy link
Contributor Author

Please note that Claude-Sonnet-3.5 works much better than Gemini-2.5-Flash.

@janspoerer
Copy link
Contributor Author

I think, though, that this is mostly a LLM-related behavior. But I'll need to dig deeper into this. Maybe it is not (only) that Gemini-2.5-Flash is just worse at tool use.

@janspoerer
Copy link
Contributor Author

@evalstate

Some integration tests fail since I merged the latest uv.lock into this branch.

It seems like the main change was that mcp was updated from 1.12.0 to 1.12.1.

All unit tests are still passing, and the agent runs normally, as far as I can tell.

Will try to find the root cause on the weekend.

@janspoerer
Copy link
Contributor Author

storlien wrote this in #286:

@janspoerer
I did make an adhoc solution to the error displayed earlier that fixed it for me in this branch, but currently checking out the branch you mentioned.
I'm trying to get it working with Gemini, but encountered an error that I can post later. Would be extremely grateful if you could implement for OpenAI/Azure asap, that would be very beneficial to the project I'm working on!

  1. Thanks, that would be helpful. I have no clear idea where to look into to fix this strange new error.
  2. Yes, please post the error, that would also be extremely helpful.
  3. Yes, sure, I'm working on OpenAI right now. I think I have no Azure API key, but I can see if I can get one.

@evalstate
Copy link
Owner

Hi @janspoerer -- send me a DM on discord if you need help with a key.

@storlien
Copy link

storlien commented Jul 26, 2025

@janspoerer

This is the error I got when trying out gemini-2.5-pro.

TypeError: GoogleNativeAugmentedLLM._completion_orchestrator() got an unexpected keyword argument 'multipart_messages'

Had to add

context_truncation_or_summarization_mode = None,
context_truncation_or_summarization_length_limit = None,

several places in the direct_decorators.py file first.

Haven't tried with your latest changes. This occured when your latest commit was "Made linter happy". Can try with your latest changes now.

Full traceback:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/carl.edward.storlien/Documents/Altinn/altinity/fastagent/altinity.py", line 84, in <module>
    asyncio.run(main())
    ~~~~~~~~~~~^^^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 132, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 132, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 132, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  [Previous line repeated 1 more time]
  File "/Users/carl.edward.storlien/Documents/Altinn/altinity/fastagent/altinity.py", line 81, in main
    await agent.interactive()
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/agent_app.py", line 305, in interactive
    return await prompt.prompt_loop(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/interactive_prompt.py", line 215, in prompt_loop
    result = await send_func(user_input, agent)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/agent_app.py", line 288, in send_wrapper
    result = await self.send(message, agent_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/agent_app.py", line 95, in send
    return await self._agent(agent_name).send(message)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/agents/base_agent.py", line 228, in send
    response = await self.generate([prompt], None)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/agents/base_agent.py", line 659, in generate
    return await self._llm.generate(multipart_messages, request_params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/augmented_llm.py", line 236, in generate
    assistant_response: PromptMessageMultipart = await self._apply_prompt_provider_specific(
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        multipart_messages, request_params
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/providers/augmented_llm_google_native.py", line 343, in _apply_prompt_provider_specific
    final_content, new_history_messages = await self._completion_orchestrator(
                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        messages_for_turn=messages_for_turn,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
        multipart_messages=self.history.get(...)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
TypeError: GoogleNativeAugmentedLLM._completion_orchestrator() got an unexpected keyword argument 'multipart_messages'

@janspoerer
Copy link
Contributor Author

Thanks a lot.

Will have a look into this on Monday.

I have progressed with the OpenAI truncation as well. Will push the changes now.

@storlien
Copy link

@janspoerer

Trying it out now.

I do get this error when I add "context_truncation_mode" and "context_truncation_length_limit" to the agent decorator.

@altinity.agent(
     ~~~~~~~~~~~~~~^
        name="Altinity_Executer",
        ^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<7 lines>...
        context_truncation_length_limit=5000,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        model="openai.gpt-4.1-mini-2025-04-14")
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: agent() got an unexpected keyword argument 'context_truncation_mode'

It seems you haven't added the parameters to the direct_decorators.py file. After adding the parameters several locations in this file, I get this error instead:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/carl.edward.storlien/Documents/Altinn/altinity/fastagent/altinity.py", line 84, in <module>
    asyncio.run(main())
    ~~~~~~~~~~~^^^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 219, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 219, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 219, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  [Previous line repeated 1 more time]
  File "/Users/carl.edward.storlien/Documents/Altinn/altinity/fastagent/altinity.py", line 79, in main
    async with altinity.run() as agent:
               ~~~~~~~~~~~~^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/contextlib.py", line 214, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/fastagent.py", line 312, in run
    active_agents = await create_agents_in_dependency_order(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_factory.py", line 376, in create_agents_in_dependency_order
    basic_agents = await create_agents_by_type(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<9 lines>...
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_factory.py", line 153, in create_agents_by_type
    await agent.attach_llm(
    ...<3 lines>...
    )
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/agents/base_agent.py", line 173, in attach_llm
    self._llm = llm_factory(
                ~~~~~~~~~~~^
        agent=self, request_params=effective_params, context=self._context, **additional_kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/model_factory.py", line 285, in factory
    llm: AugmentedLLMProtocol = llm_class(**llm_args)
                                ~~~~~~~~~^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/providers/augmented_llm_azure.py", line 32, in __init__
    super().__init__(provider=provider, *args, **kwargs)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/providers/augmented_llm_openai.py", line 86, in __init__
    self.client = self._initialize_client()
                  ~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/providers/augmented_llm_azure.py", line 107, in _initialize_client
    if self.use_default_cred:
       ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'AzureOpenAIAugmentedLLM' object has no attribute 'use_default_cred'

Some of my agents use Azure models. When changing all agents to OpenAI models, it starts up correctly.

I tried setting the context_truncation_mode to a random string. I didn't get an error message about this, perhaps there should be a validation of that?

Truncation doesn't seem to work for me with OpenAI. I've set context_truncation_mode="remove" and context_truncation_length_limit=5000.

image

@storlien
Copy link

Wait, I see that I should put the params in the RequestParams. Trying it out now

@storlien
Copy link

New error after setting the params in the RequestParams. First message to the LLM works fine, then it crashes after the next:

image

Traceback:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/carl.edward.storlien/Documents/Altinn/altinity/fastagent/altinity.py", line 85, in <module>
    asyncio.run(main())
    ~~~~~~~~~~~^^^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/carl.edward.storlien/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 217, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 217, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/direct_decorators.py", line 217, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  [Previous line repeated 1 more time]
  File "/Users/carl.edward.storlien/Documents/Altinn/altinity/fastagent/altinity.py", line 82, in main
    await agent.interactive()
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/agent_app.py", line 305, in interactive
    return await prompt.prompt_loop(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/interactive_prompt.py", line 215, in prompt_loop
    result = await send_func(user_input, agent)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/agent_app.py", line 288, in send_wrapper
    result = await self.send(message, agent_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/core/agent_app.py", line 95, in send
    return await self._agent(agent_name).send(message)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/agents/base_agent.py", line 228, in send
    response = await self.generate([prompt], None)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/agents/base_agent.py", line 659, in generate
    return await self._llm.generate(multipart_messages, request_params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/augmented_llm.py", line 252, in generate
    assistant_response: PromptMessageMultipart = await self._apply_prompt_provider_specific(
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        multipart_messages, request_params
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/providers/augmented_llm_openai.py", line 498, in _apply_prompt_provider_specific
    responses: List[ContentBlock] = await self._openai_completion(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
    )                                    ##
    ^
  File "/Users/carl.edward.storlien/Documents/Altinn/jan-repo/fast-agent/src/mcp_agent/llm/providers/augmented_llm_openai.py", line 361, in _openai_completion
    message["role"]
    ~~~~~~~^^^^^^^^
TypeError: 'ParsedChatCompletionMessage[NoneType]' object is not subscriptable

@janspoerer
Copy link
Contributor Author

I changed:

"opentelemetry-exporter-otlp-proto-http>=1.7.0"

to:

"opentelemetry-exporter-otlp-proto-http>=1.34.1"

As there was a dependency conflict.

(.venv) ➜  fast-agent git:(feature/compaction) pip install -e .
Obtaining file:///Users/janspoerer/code/agents/01_fast-agent-clones/refactored-augmented-llm/fast-agent
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Installing backend dependencies ... done
  Preparing editable metadata (pyproject.toml) ... done
Collecting a2a-sdk>=0.2.9 (from fast-agent-mcp==0.2.48)
  Using cached a2a_sdk-0.3.0-py3-none-any.whl.metadata (5.4 kB)
Collecting aiohttp>=3.11.13 (from fast-agent-mcp==0.2.48)
  Using cached aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl.metadata (7.7 kB)
Collecting anthropic>=0.59.0 (from fast-agent-mcp==0.2.48)
  Using cached anthropic-0.62.0-py3-none-any.whl.metadata (27 kB)
Collecting azure-identity>=1.14.0 (from fast-agent-mcp==0.2.48)
  Using cached azure_identity-1.24.0-py3-none-any.whl.metadata (86 kB)
Collecting boto3>=1.35.0 (from fast-agent-mcp==0.2.48)
  Using cached boto3-1.40.6-py3-none-any.whl.metadata (6.7 kB)
Collecting deprecated>=1.2.18 (from fast-agent-mcp==0.2.48)
  Using cached Deprecated-1.2.18-py2.py3-none-any.whl.metadata (5.7 kB)
Collecting email-validator>=2.2.0 (from fast-agent-mcp==0.2.48)
  Using cached email_validator-2.2.0-py3-none-any.whl.metadata (25 kB)
Collecting fastapi>=0.115.6 (from fast-agent-mcp==0.2.48)
  Using cached fastapi-0.116.1-py3-none-any.whl.metadata (28 kB)
Collecting google-genai>=1.27.0 (from fast-agent-mcp==0.2.48)
  Using cached google_genai-1.29.0-py3-none-any.whl.metadata (43 kB)
Collecting mcp==1.12.1 (from fast-agent-mcp==0.2.48)
  Using cached mcp-1.12.1-py3-none-any.whl.metadata (60 kB)
Collecting openai>=1.97.1 (from fast-agent-mcp==0.2.48)
  Using cached openai-1.99.5-py3-none-any.whl.metadata (29 kB)
Collecting opentelemetry-distro>=0.55b0 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_distro-0.57b0-py3-none-any.whl.metadata (1.7 kB)
Requirement already satisfied: opentelemetry-exporter-otlp-proto-http>=1.7.0 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from fast-agent-mcp==0.2.48) (1.34.1)
Collecting opentelemetry-instrumentation-anthropic>=0.43.1 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation_anthropic-0.44.1-py3-none-any.whl.metadata (2.2 kB)
Collecting opentelemetry-instrumentation-google-genai>=0.3b0 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation_google_genai-0.3b0-py3-none-any.whl.metadata (4.4 kB)
Requirement already satisfied: opentelemetry-instrumentation-mcp>=0.43.1 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from fast-agent-mcp==0.2.48) (0.44.1)
Collecting opentelemetry-instrumentation-openai>=0.43.1 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation_openai-0.44.1-py3-none-any.whl.metadata (2.1 kB)
Collecting prompt-toolkit>=3.0.51 (from fast-agent-mcp==0.2.48)
  Using cached prompt_toolkit-3.0.51-py3-none-any.whl.metadata (6.4 kB)
Collecting pydantic-settings>=2.7.0 (from fast-agent-mcp==0.2.48)
  Using cached pydantic_settings-2.10.1-py3-none-any.whl.metadata (3.4 kB)
Collecting pydantic>=2.10.4 (from fast-agent-mcp==0.2.48)
  Using cached pydantic-2.11.7-py3-none-any.whl.metadata (67 kB)
Collecting pyperclip>=1.9.0 (from fast-agent-mcp==0.2.48)
  Using cached pyperclip-1.9.0-py3-none-any.whl
Collecting pyyaml>=6.0.2 (from fast-agent-mcp==0.2.48)
  Using cached PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl.metadata (2.1 kB)
Collecting rich>=14.1.0 (from fast-agent-mcp==0.2.48)
  Using cached rich-14.1.0-py3-none-any.whl.metadata (18 kB)
Collecting tensorzero>=2025.6.3 (from fast-agent-mcp==0.2.48)
  Using cached tensorzero-2025.8.0-cp39-abi3-macosx_11_0_arm64.whl.metadata (6.5 kB)
Collecting typer>=0.15.1 (from fast-agent-mcp==0.2.48)
  Using cached typer-0.16.0-py3-none-any.whl.metadata (15 kB)
Collecting anyio>=4.5 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached anyio-4.10.0-py3-none-any.whl.metadata (4.0 kB)
Collecting httpx-sse>=0.4 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached httpx_sse-0.4.1-py3-none-any.whl.metadata (9.4 kB)
Collecting httpx>=0.27 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
Collecting jsonschema>=4.20.0 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached jsonschema-4.25.0-py3-none-any.whl.metadata (7.7 kB)
Collecting python-multipart>=0.0.9 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached python_multipart-0.0.20-py3-none-any.whl.metadata (1.8 kB)
Collecting sse-starlette>=1.6.1 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached sse_starlette-3.0.2-py3-none-any.whl.metadata (11 kB)
Collecting starlette>=0.27 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached starlette-0.47.2-py3-none-any.whl.metadata (6.2 kB)
Collecting uvicorn>=0.23.1 (from mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached uvicorn-0.35.0-py3-none-any.whl.metadata (6.5 kB)
Collecting google-api-core>=1.26.0 (from a2a-sdk>=0.2.9->fast-agent-mcp==0.2.48)
  Using cached google_api_core-2.25.1-py3-none-any.whl.metadata (3.0 kB)
Requirement already satisfied: protobuf==5.29.5 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from a2a-sdk>=0.2.9->fast-agent-mcp==0.2.48) (5.29.5)
Collecting aiohappyeyeballs>=2.5.0 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)
Collecting aiosignal>=1.4.0 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)
Collecting attrs>=17.3.0 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached attrs-25.3.0-py3-none-any.whl.metadata (10 kB)
Collecting frozenlist>=1.1.1 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached frozenlist-1.7.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (18 kB)
Collecting multidict<7.0,>=4.5 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached multidict-6.6.3-cp312-cp312-macosx_11_0_arm64.whl.metadata (5.3 kB)
Collecting propcache>=0.2.0 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached propcache-0.3.2-cp312-cp312-macosx_11_0_arm64.whl.metadata (12 kB)
Collecting yarl<2.0,>=1.17.0 (from aiohttp>=3.11.13->fast-agent-mcp==0.2.48)
  Using cached yarl-1.20.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (73 kB)
Collecting distro<2,>=1.7.0 (from anthropic>=0.59.0->fast-agent-mcp==0.2.48)
  Using cached distro-1.9.0-py3-none-any.whl.metadata (6.8 kB)
Collecting jiter<1,>=0.4.0 (from anthropic>=0.59.0->fast-agent-mcp==0.2.48)
  Using cached jiter-0.10.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (5.2 kB)
Collecting sniffio (from anthropic>=0.59.0->fast-agent-mcp==0.2.48)
  Using cached sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: typing-extensions<5,>=4.10 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from anthropic>=0.59.0->fast-agent-mcp==0.2.48) (4.14.1)
Collecting azure-core>=1.31.0 (from azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached azure_core-1.35.0-py3-none-any.whl.metadata (44 kB)
Collecting cryptography>=2.5 (from azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl.metadata (5.7 kB)
Collecting msal>=1.30.0 (from azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached msal-1.33.0-py3-none-any.whl.metadata (11 kB)
Collecting msal-extensions>=1.2.0 (from azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached msal_extensions-1.3.1-py3-none-any.whl.metadata (7.8 kB)
Collecting botocore<1.41.0,>=1.40.6 (from boto3>=1.35.0->fast-agent-mcp==0.2.48)
  Using cached botocore-1.40.6-py3-none-any.whl.metadata (5.7 kB)
Collecting jmespath<2.0.0,>=0.7.1 (from boto3>=1.35.0->fast-agent-mcp==0.2.48)
  Using cached jmespath-1.0.1-py3-none-any.whl.metadata (7.6 kB)
Collecting s3transfer<0.14.0,>=0.13.0 (from boto3>=1.35.0->fast-agent-mcp==0.2.48)
  Using cached s3transfer-0.13.1-py3-none-any.whl.metadata (1.7 kB)
Requirement already satisfied: wrapt<2,>=1.10 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from deprecated>=1.2.18->fast-agent-mcp==0.2.48) (1.17.2)
Collecting dnspython>=2.0.0 (from email-validator>=2.2.0->fast-agent-mcp==0.2.48)
  Using cached dnspython-2.7.0-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: idna>=2.0.0 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from email-validator>=2.2.0->fast-agent-mcp==0.2.48) (3.10)
Collecting google-auth<3.0.0,>=2.14.1 (from google-genai>=1.27.0->fast-agent-mcp==0.2.48)
  Using cached google_auth-2.40.3-py2.py3-none-any.whl.metadata (6.2 kB)
Requirement already satisfied: requests<3.0.0,>=2.28.1 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from google-genai>=1.27.0->fast-agent-mcp==0.2.48) (2.32.4)
Collecting tenacity<9.2.0,>=8.2.3 (from google-genai>=1.27.0->fast-agent-mcp==0.2.48)
  Using cached tenacity-9.1.2-py3-none-any.whl.metadata (1.2 kB)
Collecting websockets<15.1.0,>=13.0.0 (from google-genai>=1.27.0->fast-agent-mcp==0.2.48)
  Using cached websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (6.8 kB)
Collecting tqdm>4 (from openai>=1.97.1->fast-agent-mcp==0.2.48)
  Using cached tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)
Requirement already satisfied: opentelemetry-api~=1.12 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48) (1.34.1)
Collecting opentelemetry-instrumentation==0.57b0 (from opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation-0.57b0-py3-none-any.whl.metadata (6.7 kB)
Requirement already satisfied: opentelemetry-sdk~=1.13 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48) (1.34.1)
Collecting opentelemetry-semantic-conventions==0.57b0 (from opentelemetry-instrumentation==0.57b0->opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_semantic_conventions-0.57b0-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: packaging>=18.0 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-instrumentation==0.57b0->opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48) (25.0)
Collecting opentelemetry-api~=1.12 (from opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_api-1.36.0-py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: importlib-metadata<8.8.0,>=6.0 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-api~=1.12->opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48) (8.7.0)
Requirement already satisfied: googleapis-common-protos~=1.52 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48) (1.70.0)
Requirement already satisfied: opentelemetry-exporter-otlp-proto-common==1.34.1 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48) (1.34.1)
Requirement already satisfied: opentelemetry-proto==1.34.1 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48) (1.34.1)
Requirement already satisfied: opentelemetry-semantic-conventions-ai==0.4.11 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-instrumentation-anthropic>=0.43.1->fast-agent-mcp==0.2.48) (0.4.11)
Requirement already satisfied: opentelemetry-exporter-otlp==1.34.1 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-instrumentation-mcp>=0.43.1->fast-agent-mcp==0.2.48) (1.34.1)
Requirement already satisfied: opentelemetry-exporter-otlp-proto-grpc==1.34.1 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-exporter-otlp==1.34.1->opentelemetry-instrumentation-mcp>=0.43.1->fast-agent-mcp==0.2.48) (1.34.1)
Requirement already satisfied: grpcio<2.0.0,>=1.63.2 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from opentelemetry-exporter-otlp-proto-grpc==1.34.1->opentelemetry-exporter-otlp==1.34.1->opentelemetry-instrumentation-mcp>=0.43.1->fast-agent-mcp==0.2.48) (1.74.0)
Collecting wcwidth (from prompt-toolkit>=3.0.51->fast-agent-mcp==0.2.48)
  Using cached wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Collecting annotated-types>=0.6.0 (from pydantic>=2.10.4->fast-agent-mcp==0.2.48)
  Using cached annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.33.2 (from pydantic>=2.10.4->fast-agent-mcp==0.2.48)
  Using cached pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl.metadata (6.8 kB)
Collecting typing-inspection>=0.4.0 (from pydantic>=2.10.4->fast-agent-mcp==0.2.48)
  Using cached typing_inspection-0.4.1-py3-none-any.whl.metadata (2.6 kB)
Collecting python-dotenv>=0.21.0 (from pydantic-settings>=2.7.0->fast-agent-mcp==0.2.48)
  Using cached python_dotenv-1.1.1-py3-none-any.whl.metadata (24 kB)
Collecting markdown-it-py>=2.2.0 (from rich>=14.1.0->fast-agent-mcp==0.2.48)
  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Collecting pygments<3.0.0,>=2.13.0 (from rich>=14.1.0->fast-agent-mcp==0.2.48)
  Using cached pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB)
Collecting uuid-utils>=0.9.0 (from tensorzero>=2025.6.3->fast-agent-mcp==0.2.48)
  Using cached uuid_utils-0.11.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.metadata (4.7 kB)
Collecting click>=8.0.0 (from typer>=0.15.1->fast-agent-mcp==0.2.48)
  Using cached click-8.2.1-py3-none-any.whl.metadata (2.5 kB)
Collecting shellingham>=1.3.0 (from typer>=0.15.1->fast-agent-mcp==0.2.48)
  Using cached shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)
Collecting six>=1.11.0 (from azure-core>=1.31.0->azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting python-dateutil<3.0.0,>=2.1 (from botocore<1.41.0,>=1.40.6->boto3>=1.35.0->fast-agent-mcp==0.2.48)
  Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Requirement already satisfied: urllib3!=2.2.0,<3,>=1.25.4 in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from botocore<1.41.0,>=1.40.6->boto3>=1.35.0->fast-agent-mcp==0.2.48) (2.5.0)
Collecting cffi>=1.14 (from cryptography>=2.5->azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (1.5 kB)
Collecting proto-plus<2.0.0,>=1.22.3 (from google-api-core>=1.26.0->a2a-sdk>=0.2.9->fast-agent-mcp==0.2.48)
  Using cached proto_plus-1.26.1-py3-none-any.whl.metadata (2.2 kB)
Collecting cachetools<6.0,>=2.0.0 (from google-auth<3.0.0,>=2.14.1->google-genai>=1.27.0->fast-agent-mcp==0.2.48)
  Using cached cachetools-5.5.2-py3-none-any.whl.metadata (5.4 kB)
Collecting pyasn1-modules>=0.2.1 (from google-auth<3.0.0,>=2.14.1->google-genai>=1.27.0->fast-agent-mcp==0.2.48)
  Using cached pyasn1_modules-0.4.2-py3-none-any.whl.metadata (3.5 kB)
Collecting rsa<5,>=3.1.4 (from google-auth<3.0.0,>=2.14.1->google-genai>=1.27.0->fast-agent-mcp==0.2.48)
  Using cached rsa-4.9.1-py3-none-any.whl.metadata (5.6 kB)
Requirement already satisfied: certifi in /Users/janspoerer/code/agents/agent-playground/.venv/lib/python3.12/site-packages (from httpx>=0.27->mcp==1.12.1->fast-agent-mcp==0.2.48) (2025.8.3)
Collecting httpcore==1.* (from httpx>=0.27->mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
Collecting h11>=0.16 (from httpcore==1.*->httpx>=0.27->mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=4.20.0->mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached jsonschema_specifications-2025.4.1-py3-none-any.whl.metadata (2.9 kB)
Collecting referencing>=0.28.4 (from jsonschema>=4.20.0->mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached referencing-0.36.2-py3-none-any.whl.metadata (2.8 kB)
Collecting rpds-py>=0.7.1 (from jsonschema>=4.20.0->mcp==1.12.1->fast-agent-mcp==0.2.48)
  Using cached rpds_py-0.27.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (4.2 kB)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=14.1.0->fast-agent-mcp==0.2.48)
  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Collecting PyJWT<3,>=1.0.0 (from PyJWT[crypto]<3,>=1.0.0->msal>=1.30.0->azure-identity>=1.14.0->fast-agent-mcp==0.2.48)
  Using cached PyJWT-2.10.1-py3-none-any.whl.metadata (4.0 kB)
INFO: pip is looking at multiple versions of opentelemetry-sdk to determine which version is compatible with other requirements. This could take a while.
Collecting opentelemetry-instrumentation-openai>=0.43.1 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation_openai-0.44.0-py3-none-any.whl.metadata (2.1 kB)
  Using cached opentelemetry_instrumentation_openai-0.43.1-py3-none-any.whl.metadata (2.2 kB)
Collecting tiktoken<1,>=0.6.0 (from opentelemetry-instrumentation-openai>=0.43.1->fast-agent-mcp==0.2.48)
  Using cached tiktoken-0.10.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (6.7 kB)
Collecting opentelemetry-exporter-otlp-proto-grpc==1.34.1 (from opentelemetry-exporter-otlp==1.34.1->opentelemetry-instrumentation-mcp>=0.43.1->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_grpc-1.34.1-py3-none-any.whl.metadata (2.4 kB)
Collecting opentelemetry-exporter-otlp==1.34.1 (from opentelemetry-instrumentation-mcp>=0.43.1->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp-1.34.1-py3-none-any.whl.metadata (2.4 kB)
INFO: pip is still looking at multiple versions of opentelemetry-sdk to determine which version is compatible with other requirements. This could take a while.
Collecting opentelemetry-instrumentation-mcp>=0.43.1 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation_mcp-0.44.1-py3-none-any.whl.metadata (2.1 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  Using cached opentelemetry_instrumentation_mcp-0.44.0-py3-none-any.whl.metadata (2.1 kB)
  Using cached opentelemetry_instrumentation_mcp-0.43.1-py3-none-any.whl.metadata (2.1 kB)
Collecting opentelemetry-instrumentation-anthropic>=0.43.1 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_instrumentation_anthropic-0.44.0-py3-none-any.whl.metadata (2.2 kB)
  Using cached opentelemetry_instrumentation_anthropic-0.43.1-py3-none-any.whl.metadata (2.2 kB)
Collecting opentelemetry-exporter-otlp-proto-http>=1.7.0 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_http-1.36.0-py3-none-any.whl.metadata (2.3 kB)
Collecting opentelemetry-exporter-otlp-proto-common==1.36.0 (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_common-1.36.0-py3-none-any.whl.metadata (1.8 kB)
Collecting opentelemetry-proto==1.36.0 (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_proto-1.36.0-py3-none-any.whl.metadata (2.3 kB)
Collecting opentelemetry-sdk~=1.13 (from opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_sdk-1.36.0-py3-none-any.whl.metadata (1.5 kB)
Collecting opentelemetry-exporter-otlp-proto-http>=1.7.0 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_http-1.34.1-py3-none-any.whl.metadata (2.3 kB)
INFO: pip is looking at multiple versions of opentelemetry-exporter-otlp-proto-http to determine which version is compatible with other requirements. This could take a while.
  Using cached opentelemetry_exporter_otlp_proto_http-1.35.0-py3-none-any.whl.metadata (2.3 kB)
Collecting opentelemetry-exporter-otlp-proto-common==1.35.0 (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_common-1.35.0-py3-none-any.whl.metadata (1.8 kB)
Collecting opentelemetry-proto==1.35.0 (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_proto-1.35.0-py3-none-any.whl.metadata (2.3 kB)
Collecting opentelemetry-sdk~=1.13 (from opentelemetry-distro>=0.55b0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_sdk-1.35.0-py3-none-any.whl.metadata (1.5 kB)
Collecting opentelemetry-exporter-otlp-proto-http>=1.7.0 (from fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_http-1.34.0-py3-none-any.whl.metadata (2.3 kB)
Collecting opentelemetry-exporter-otlp-proto-common==1.34.0 (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_exporter_otlp_proto_common-1.34.0-py3-none-any.whl.metadata (1.9 kB)
Collecting opentelemetry-proto==1.34.0 (from opentelemetry-exporter-otlp-proto-http>=1.7.0->fast-agent-mcp==0.2.48)
  Using cached opentelemetry_proto-1.34.0-py3-none-any.whl.metadata (2.4 kB)
INFO: pip is looking at multiple versions of opentelemetry-exporter-otlp to determine which version is compatible with other requirements. This could take a while.
ERROR: Cannot install fast-agent-mcp==0.2.48 and opentelemetry-exporter-otlp==1.34.1 because these package versions have conflicting dependencies.

The conflict is caused by:
    fast-agent-mcp 0.2.48 depends on opentelemetry-exporter-otlp-proto-http>=1.7.0
    opentelemetry-exporter-otlp 1.34.1 depends on opentelemetry-exporter-otlp-proto-http==1.34.1

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip to attempt to solve the dependency conflict


[notice] A new release of pip is available: 25.0 -> 25.2
[notice] To update, run: pip install --upgrade pip
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

@janspoerer
Copy link
Contributor Author

I am not sure why GitHub displays the warning "This branch has conflicts that must be resolved."

I have merged all changes from the main branch locally into this feature branch.

Do you have an idea, @evalstate?

Other than that, given that the tests and linting work here, I think this is ready for review.

@janspoerer
Copy link
Contributor Author

Ah my bad, I have of course compared this to my forked main branch. Sorry, will sync my fork.

@janspoerer
Copy link
Contributor Author

Alright, now the tests are being queued... All good :-)

@evalstate
Copy link
Owner

@janspoerer how are you running the tests? they work from the command line if api keys are set; not otherwise. are api keys strictly needed for these (if so, we can shift to e2e). the test_truncate_if_required_no_truncation_needed unit test fails in both environments - looks like it is truncating when it shouldn't be. is that a config issue?

@janspoerer
Copy link
Contributor Author

@evalstate

Sorry for the late reply!

Thanks for looking at this.

I run the tests using:

  • pytest tests/integration
  • pytest tests/unit

And now they are running.

I turned off the integration test that required Google API keys. This test is not needed.

@janspoerer
Copy link
Contributor Author

I will use the features from this PR next week in some long-running workflows.

The features will thus be somewhat battle-tested (and not only have integration tests and unit tests).

@janspoerer
Copy link
Contributor Author

Update: Still battle-testing. :)

@evalstate
Copy link
Owner

Good stuff. I'm definitely going to need your help with the merge to 0.3.0.....

@evalstate
Copy link
Owner

Hi @janspoerer lmk how the testing went. I've been having a look at this to figure out the best way to proceed with merging with 0.3.0.

My current thought is to bring the e2e tests over as-is (as the top-level interface remains the same), and then manually merge the functionality (as I think post-refactor we can reduce some of the duplication you've had to deal with).

@janspoerer
Copy link
Contributor Author

Hi @janspoerer lmk how the testing went. I've been having a look at this to figure out the best way to proceed with merging with 0.3.0.

My current thought is to bring the e2e tests over as-is (as the top-level interface remains the same), and then manually merge the functionality (as I think post-refactor we can reduce some of the duplication you've had to deal with).

Hi @evalstate,

sorry for the late answer. I'm building a browser use MCP for work that I wanted to use to test this compaction feature, but the MCP took longer than expected, so my testing got delayed. So far, I could not find bugs with the compaction feature.

Maybe to clarify:

  • You would keep the e2e tests as they currently are in the master branch and discard test changes introduced in this compaction branch -> That is absolutely fine with me.
  • "manually merge the functionality" -> That is not clear to me.

Can you maybe elaborate on what you mean with "manually merging"? Thank you :)

Next step would thus be: I remove the e2e changes? Anything else that you would like to see being done here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants