langchain-dev-utils 1.2.11__tar.gz → 1.2.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/PKG-INFO +1 -1
  2. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/pyproject.toml +1 -1
  3. langchain_dev_utils-1.2.12/src/langchain_dev_utils/__init__.py +1 -0
  4. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/__init__.py +2 -0
  5. langchain_dev_utils-1.2.12/src/langchain_dev_utils/agents/middleware/format_prompt.py +66 -0
  6. langchain_dev_utils-1.2.11/src/langchain_dev_utils/__init__.py +0 -1
  7. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/.gitignore +0 -0
  8. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/.python-version +0 -0
  9. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/.vscode/settings.json +0 -0
  10. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/LICENSE +0 -0
  11. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/README.md +0 -0
  12. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/README_cn.md +0 -0
  13. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/_utils.py +0 -0
  14. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/__init__.py +0 -0
  15. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/factory.py +0 -0
  16. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/file_system.py +0 -0
  17. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/model_fallback.py +0 -0
  18. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/model_router.py +0 -0
  19. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/plan.py +0 -0
  20. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/summarization.py +0 -0
  21. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/tool_call_repair.py +0 -0
  22. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/tool_emulator.py +0 -0
  23. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/middleware/tool_selection.py +0 -0
  24. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/plan.py +0 -0
  25. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/agents/wrap.py +0 -0
  26. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/chat_models/__init__.py +0 -0
  27. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/chat_models/adapters/__init__.py +0 -0
  28. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/chat_models/adapters/openai_compatible.py +0 -0
  29. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/chat_models/base.py +0 -0
  30. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/chat_models/types.py +0 -0
  31. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/embeddings/__init__.py +0 -0
  32. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/embeddings/base.py +0 -0
  33. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/message_convert/__init__.py +0 -0
  34. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/message_convert/content.py +0 -0
  35. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/message_convert/format.py +0 -0
  36. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/pipeline/__init__.py +0 -0
  37. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/pipeline/parallel.py +0 -0
  38. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/pipeline/sequential.py +0 -0
  39. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/pipeline/types.py +0 -0
  40. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/py.typed +0 -0
  41. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/tool_calling/__init__.py +0 -0
  42. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/tool_calling/human_in_the_loop.py +0 -0
  43. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/src/langchain_dev_utils/tool_calling/utils.py +0 -0
  44. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/__init__.py +0 -0
  45. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_agent.py +0 -0
  46. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_chat_models.py +0 -0
  47. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_human_in_the_loop.py +0 -0
  48. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_load_embbeding.py +0 -0
  49. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_load_model.py +0 -0
  50. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_messages.py +0 -0
  51. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_model_tool_emulator.py +0 -0
  52. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_pipline.py +0 -0
  53. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_plan_middleware.py +0 -0
  54. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_router_model.py +0 -0
  55. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_tool_call_repair.py +0 -0
  56. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_tool_calling.py +0 -0
  57. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/tests/test_wrap_agent.py +0 -0
  58. {langchain_dev_utils-1.2.11 → langchain_dev_utils-1.2.12}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-dev-utils
3
- Version: 1.2.11
3
+ Version: 1.2.12
4
4
  Summary: A practical utility library for LangChain and LangGraph development
5
5
  Project-URL: Source Code, https://github.com/TBice123123/langchain-dev-utils
6
6
  Project-URL: repository, https://github.com/TBice123123/langchain-dev-utils
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "langchain-dev-utils"
3
- version = "1.2.11"
3
+ version = "1.2.12"
4
4
  description = "A practical utility library for LangChain and LangGraph development"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "tiebingice", email = "tiebingice123@outlook.com" }]
@@ -0,0 +1 @@
1
+ __version__ = "1.2.12"
@@ -1,3 +1,4 @@
1
+ from .format_prompt import format_prompt
1
2
  from .model_fallback import ModelFallbackMiddleware
2
3
  from .model_router import ModelRouterMiddleware
3
4
  from .plan import (
@@ -22,4 +23,5 @@ __all__ = [
22
23
  "LLMToolEmulator",
23
24
  "ModelRouterMiddleware",
24
25
  "ToolCallRepairMiddleware",
26
+ "format_prompt",
25
27
  ]
@@ -0,0 +1,66 @@
1
+ from langchain.agents.middleware import ModelRequest, dynamic_prompt
2
+ from langchain_core.prompts.string import get_template_variables
3
+
4
+
5
+ @dynamic_prompt
6
+ def format_prompt(request: ModelRequest) -> str:
7
+ """Format the system prompt with variables from state and context.
8
+
9
+ This middleware function extracts template variables from the system prompt
10
+ and populates them with values from the agent's state and runtime context.
11
+ Variables are first resolved from the state, then from the context if not found.
12
+
13
+ Example:
14
+ >>> from langchain_dev_utils.agents.middleware.format_prompt import format_prompt
15
+ >>> from langchain.agents import create_agent
16
+ >>> from langchain_core.messages import HumanMessage
17
+ >>> from dataclasses import dataclass
18
+ >>>
19
+ >>> @dataclass
20
+ ... class Context:
21
+ ... name: str
22
+ ... user: str
23
+ >>>
24
+ >>> agent=create_agent(
25
+ ... model=model,
26
+ ... tools=tools,
27
+ ... system_prompt="You are a helpful assistant. Your name is {name}. Your user is {user}.",
28
+ ... middleware=[format_prompt],
29
+ ... context_schema=Context,
30
+ ... )
31
+ >>> agent.invoke(
32
+ ... {
33
+ ... "messages": [HumanMessage(content="Hello")],
34
+ ... },
35
+ ... context=Context(name="assistant", user="tbice"),
36
+ ... )
37
+
38
+ """
39
+ system_msg = request.system_message
40
+ if system_msg is None:
41
+ raise ValueError(
42
+ "system_message must be provided,while use format_prompt in middleware."
43
+ )
44
+
45
+ system_prompt = "\n".join(
46
+ [content.get("text", "") for content in system_msg.content_blocks]
47
+ )
48
+ variables = get_template_variables(system_prompt, "f-string")
49
+
50
+ format_params = {}
51
+
52
+ state = request.state
53
+ for key in variables:
54
+ if var := state.get(key, None):
55
+ format_params[key] = var
56
+
57
+ other_var_keys = set(variables) - set(format_params.keys())
58
+
59
+ if other_var_keys:
60
+ context = request.runtime.context
61
+ if context is not None:
62
+ for key in other_var_keys:
63
+ if var := getattr(context, key, None):
64
+ format_params[key] = var
65
+
66
+ return system_prompt.format(**format_params)
@@ -1 +0,0 @@
1
- __version__ = "1.2.11"