Skip to content

Conversation

@keenborder786
Copy link
Contributor

@keenborder786 keenborder786 commented Jan 5, 2026

@github-actions github-actions bot added core `langchain-core` package issues & PRs fix For PRs that implement a fix and removed fix For PRs that implement a fix labels Jan 5, 2026
@codspeed-hq
Copy link

codspeed-hq bot commented Jan 5, 2026

Merging this PR will not alter performance

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

Summary

✅ 13 untouched benchmarks
⏩ 21 skipped benchmarks1


Comparing keenborder786:fix/additional_parameters (cb2faee) with master (25bb36d)

Open in CodSpeed

Footnotes

  1. 21 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Copy link
Collaborator

@ccurme ccurme left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a test that fails on master and passes here?

On line 452 above we already apply _recursive_set_additional_properties_false

@keenborder786
Copy link
Contributor Author

@ccurme just run the following example

import aiohttp
import asyncio
from langchain_core.messages import HumanMessage
from langchain_core.tools import StructuredTool
from langchain.agents import create_agent
from langchain.agents.structured_output import ProviderStrategy
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field

class StructuredResult(BaseModel):
    answer: str

class SearchInput(BaseModel):
    query: str = Field(default="", description="The search query string to find relevant information.")
    limit: int = Field(default=3, description="The number of results to return.")

    model_config = {
        "extra": "forbid"
    }


def search(aiohttp_session) -> StructuredTool:
    """Search Tool"""

    async def _search(
        query: str = "",
        limit: int = 3,
    ) -> str:
        # Just echo the query
        answer = f"Echo: {query} | Limit: {limit}"
        return answer

    return StructuredTool.from_function(
        coroutine=_search,
        name="search-tool",
        description="Use this tool to search for information based on a query and an optional limit.",
        args_schema=SearchInput,
        return_direct=False,)


async def main():
    model = ChatOpenAI(
        model="gpt-4.1"
    )

    async with aiohttp.ClientSession() as session:
        # session shared across tools
        tools = [search(aiohttp_session=session)]

        agent = create_agent(
            model=model,
            tools=tools,
            system_prompt="You are a helpful assistant. Use the tools to answer user queries.",
            response_format=ProviderStrategy(schema=StructuredResult,strict=True)
        )

        input_state = {"messages": [HumanMessage(content="Search for information about AI research.")]}

        out = await agent.ainvoke(input_state)

        print(out,'out')


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

Fails on master.

@ccurme ccurme changed the title fix(core): In case of strict mode, additionalProperties needs to be set to False fix(core): fix strict schema generation for functions with optional args Jan 7, 2026
@github-actions github-actions bot added fix For PRs that implement a fix and removed fix For PRs that implement a fix labels Jan 7, 2026
@ccurme ccurme merged commit e6a9694 into langchain-ai:master Jan 7, 2026
90 checks passed
nomore8797 added a commit to nomore8797/langchain that referenced this pull request Jan 8, 2026
* test(text-splitters): add edge case tests for CharacterTextSplitter (langchain-ai#34628)

* chore(groq): document vision support (langchain-ai#34620)

* feat(core): support custom message separator in get_buffer_string() (langchain-ai#34569)

* chore(langchain): fix types in test_wrap_model_call (langchain-ai#34573)

* fix: handle empty assistant content in Responses API (langchain-ai#34272) (langchain-ai#34296)

* fix(openai): raise proper exception `OpenAIRefusalError` on structured output refusal (langchain-ai#34619)

* release(openai): 1.1.7 (langchain-ai#34640)

* fix(core): fix strict schema generation for functions with optional args (langchain-ai#34599)

* test(core): add edge case for empty examples in LengthBasedExampleSelector (langchain-ai#34641)

* fix(langchain): handle parallel usage of the todo tool in planning middleware (langchain-ai#34637)

The agent should only make a single call to update the todo list at a
time. A parallel call doesn't make sense, but also cannot work as
there's no obvious reducer to use.

On parallel calls of the todo tool, we return ToolMessage containing to
guide the LLM to not call the tool in parallel.

---------

Co-authored-by: Eugene Yurtsev <[email protected]>

* release(langchain): release 1.2.2 (langchain-ai#34643)

Release langchain 1.2.2

* fix(langchain): add test to verify version (langchain-ai#34644)

verify version in langchain to avoid accidental drift

---------

Co-authored-by: Manas karthik <[email protected]>
Co-authored-by: Aarav Dugar <[email protected]>
Co-authored-by: Chris Papademetrious <[email protected]>
Co-authored-by: Christophe Bornet <[email protected]>
Co-authored-by: Sujal M H <[email protected]>
Co-authored-by: OysterMax <[email protected]>
Co-authored-by: ccurme <[email protected]>
Co-authored-by: Mohammad Mohtashim <[email protected]>
Co-authored-by: Harrison Chase <[email protected]>
Co-authored-by: Eugene Yurtsev <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core `langchain-core` package issues & PRs fix For PRs that implement a fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants