langchain 0.3.7__py3-none-any.whl → 0.3.8__py3-none-any.whl

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.

Potentially problematic release.


This version of langchain might be problematic. Click here for more details.

@@ -9,7 +9,7 @@ from langchain.agents.mrkl.prompt import FORMAT_INSTRUCTIONS
9
9
 
10
10
  FINAL_ANSWER_ACTION = "Final Answer:"
11
11
  MISSING_ACTION_AFTER_THOUGHT_ERROR_MESSAGE = (
12
- "Invalid Format: Missing 'Action:' after 'Thought:"
12
+ "Invalid Format: Missing 'Action:' after 'Thought:'"
13
13
  )
14
14
  MISSING_ACTION_INPUT_AFTER_ACTION_ERROR_MESSAGE = (
15
15
  "Invalid Format: Missing 'Action Input:' after 'Action:'"
@@ -198,7 +198,9 @@ try:
198
198
  api_docs: str
199
199
  question_key: str = "question" #: :meta private:
200
200
  output_key: str = "output" #: :meta private:
201
- limit_to_domains: Optional[Sequence[str]] = Field(default_factory=list)
201
+ limit_to_domains: Optional[Sequence[str]] = Field(
202
+ default_factory=list # type: ignore
203
+ )
202
204
  """Use to limit the domains that can be accessed by the API chain.
203
205
 
204
206
  * For example, to limit to just the domain `https://www.example.com`, set
@@ -28,10 +28,10 @@ from langchain.chains.llm import LLMChain
28
28
  since="0.2.13",
29
29
  removal="1.0",
30
30
  message=(
31
- "Refer here for a recommended map-reduce implementation using langgraph: "
32
- "https://langchain-ai.github.io/langgraph/how-tos/map-reduce/. See also "
33
- "migration guide: "
34
- "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/" # noqa: E501
31
+ "Refer to migration guide here for a recommended implementation using "
32
+ "LangGraph: https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/" # noqa: E501
33
+ ". See also LangGraph guides for map-reduce: "
34
+ "https://langchain-ai.github.io/langgraph/how-tos/map-reduce/."
35
35
  ),
36
36
  )
37
37
  class MapReduceChain(Chain):
@@ -38,7 +38,7 @@ class OpenAIModerationChain(Chain):
38
38
  output_key: str = "output" #: :meta private:
39
39
  openai_api_key: Optional[str] = None
40
40
  openai_organization: Optional[str] = None
41
- openai_pre_1_0: bool = Field(default=None)
41
+ openai_pre_1_0: bool = Field(default=False)
42
42
 
43
43
  @model_validator(mode="before")
44
44
  @classmethod
@@ -6,7 +6,9 @@ import warnings
6
6
  from typing import Any, Dict, List, Optional
7
7
 
8
8
  from langchain_core._api import deprecated
9
+ from langchain_core.caches import BaseCache as BaseCache
9
10
  from langchain_core.callbacks import CallbackManagerForChainRun
11
+ from langchain_core.callbacks import Callbacks as Callbacks
10
12
  from langchain_core.language_models import BaseLanguageModel
11
13
  from langchain_core.output_parsers import StrOutputParser
12
14
  from langchain_core.runnables import Runnable
@@ -156,3 +158,6 @@ class NatBotChain(Chain):
156
158
  @property
157
159
  def _chain_type(self) -> str:
158
160
  return "nat_bot_chain"
161
+
162
+
163
+ NatBotChain.model_rebuild()
@@ -149,7 +149,16 @@ def init_chat_model(
149
149
  ``config["configurable"]["{config_prefix}_{param}"]`` keys. If
150
150
  config_prefix is an empty string then model will be configurable via
151
151
  ``config["configurable"]["{param}"]``.
152
- kwargs: Additional keyword args to pass to
152
+ temperature: Model temperature.
153
+ max_tokens: Max output tokens.
154
+ timeout: The maximum time (in seconds) to wait for a response from the model
155
+ before canceling the request.
156
+ max_retries: The maximum number of attempts the system will make to resend a
157
+ request if it fails due to issues like network timeouts or rate limits.
158
+ base_url: The URL of the API endpoint where requests are sent.
159
+ rate_limiter: A ``BaseRateLimiter`` to space out requests to avoid exceeding
160
+ rate limits.
161
+ kwargs: Additional model-specific keyword args to pass to
153
162
  ``<<selected ChatModel>>.__init__(model=model_name, **kwargs)``.
154
163
 
155
164
  Returns:
@@ -3,6 +3,8 @@ from __future__ import annotations
3
3
  from typing import Any, Dict, List, Type
4
4
 
5
5
  from langchain_core._api import deprecated
6
+ from langchain_core.caches import BaseCache as BaseCache # For model_rebuild
7
+ from langchain_core.callbacks import Callbacks as Callbacks # For model_rebuild
6
8
  from langchain_core.chat_history import BaseChatMessageHistory
7
9
  from langchain_core.language_models import BaseLanguageModel
8
10
  from langchain_core.messages import BaseMessage, SystemMessage, get_buffer_string
@@ -131,3 +133,6 @@ class ConversationSummaryMemory(BaseChatMemory, SummarizerMixin):
131
133
  """Clear memory contents."""
132
134
  super().clear()
133
135
  self.buffer = ""
136
+
137
+
138
+ ConversationSummaryMemory.model_rebuild()
@@ -109,7 +109,7 @@ class ConversationVectorStoreTokenBufferMemory(ConversationTokenBufferMemory):
109
109
  previous_history_template: str = DEFAULT_HISTORY_TEMPLATE
110
110
  split_chunk_size: int = 1000
111
111
 
112
- _memory_retriever: VectorStoreRetrieverMemory = PrivateAttr(default=None)
112
+ _memory_retriever: VectorStoreRetrieverMemory = PrivateAttr(default=None) # type: ignore
113
113
  _timestamps: List[datetime] = PrivateAttr(default_factory=list)
114
114
 
115
115
  @property
@@ -27,11 +27,12 @@ class OutputFixingParser(BaseOutputParser[T]):
27
27
  def is_lc_serializable(cls) -> bool:
28
28
  return True
29
29
 
30
- parser: Annotated[BaseOutputParser[T], SkipValidation()]
30
+ parser: Annotated[Any, SkipValidation()]
31
31
  """The parser to use to parse the output."""
32
32
  # Should be an LLMChain but we want to avoid top-level imports from langchain.chains
33
- retry_chain: Union[
34
- RunnableSerializable[OutputFixingParserRetryChainInput, str], Any
33
+ retry_chain: Annotated[
34
+ Union[RunnableSerializable[OutputFixingParserRetryChainInput, str], Any],
35
+ SkipValidation(),
35
36
  ]
36
37
  """The RunnableSerializable to use to retry the completion (Legacy: LLMChain)."""
37
38
  max_retries: int = 1
@@ -57,7 +57,10 @@ class RetryOutputParser(BaseOutputParser[T]):
57
57
  parser: Annotated[BaseOutputParser[T], SkipValidation()]
58
58
  """The parser to use to parse the output."""
59
59
  # Should be an LLMChain but we want to avoid top-level imports from langchain.chains
60
- retry_chain: Union[RunnableSerializable[RetryOutputParserRetryChainInput, str], Any]
60
+ retry_chain: Annotated[
61
+ Union[RunnableSerializable[RetryOutputParserRetryChainInput, str], Any],
62
+ SkipValidation(),
63
+ ]
61
64
  """The RunnableSerializable to use to retry the completion (Legacy: LLMChain)."""
62
65
  max_retries: int = 1
63
66
  """The maximum number of times to retry the parse."""
@@ -187,8 +190,11 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]):
187
190
  parser: Annotated[BaseOutputParser[T], SkipValidation()]
188
191
  """The parser to use to parse the output."""
189
192
  # Should be an LLMChain but we want to avoid top-level imports from langchain.chains
190
- retry_chain: Union[
191
- RunnableSerializable[RetryWithErrorOutputParserRetryChainInput, str], Any
193
+ retry_chain: Annotated[
194
+ Union[
195
+ RunnableSerializable[RetryWithErrorOutputParserRetryChainInput, str], Any
196
+ ],
197
+ SkipValidation(),
192
198
  ]
193
199
  """The RunnableSerializable to use to retry the completion (Legacy: LLMChain)."""
194
200
  max_retries: int = 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langchain
3
- Version: 0.3.7
3
+ Version: 0.3.8
4
4
  Summary: Building applications with LLMs through composability
5
5
  Home-page: https://github.com/langchain-ai/langchain
6
6
  License: MIT
@@ -15,11 +15,11 @@ Requires-Dist: PyYAML (>=5.3)
15
15
  Requires-Dist: SQLAlchemy (>=1.4,<3)
16
16
  Requires-Dist: aiohttp (>=3.8.3,<4.0.0)
17
17
  Requires-Dist: async-timeout (>=4.0.0,<5.0.0) ; python_version < "3.11"
18
- Requires-Dist: langchain-core (>=0.3.15,<0.4.0)
18
+ Requires-Dist: langchain-core (>=0.3.21,<0.4.0)
19
19
  Requires-Dist: langchain-text-splitters (>=0.3.0,<0.4.0)
20
20
  Requires-Dist: langsmith (>=0.1.17,<0.2.0)
21
- Requires-Dist: numpy (>=1,<2) ; python_version < "3.12"
22
- Requires-Dist: numpy (>=1.26.0,<2.0.0) ; python_version >= "3.12"
21
+ Requires-Dist: numpy (>=1.22.4,<2) ; python_version < "3.12"
22
+ Requires-Dist: numpy (>=1.26.2,<2) ; python_version >= "3.12"
23
23
  Requires-Dist: pydantic (>=2.7.4,<3.0.0)
24
24
  Requires-Dist: requests (>=2,<3)
25
25
  Requires-Dist: tenacity (>=8.1.0,!=8.4.0,<10)
@@ -124,7 +124,7 @@ langchain/agents/output_parsers/json.py,sha256=sW9e8fG4VlPnMn53dWIwSgnyRBUYs4ULF
124
124
  langchain/agents/output_parsers/openai_functions.py,sha256=MjNEFVCxYgS6Efr3HX4rR1zoks2vJxoV8FCUa240jPQ,3467
125
125
  langchain/agents/output_parsers/openai_tools.py,sha256=A_GpcYqy3xnkKrlBtrmHIUWwwLMyaKwWc8R-gEvRV3s,2317
126
126
  langchain/agents/output_parsers/react_json_single_input.py,sha256=SUkOGmdGGzxB4e1CNJD1eo4dJneiMYsgfGVHpxZ5bfI,2473
127
- langchain/agents/output_parsers/react_single_input.py,sha256=lIHosxNep1YFCgW9h71gEDWs59dmGeWlWedl9gWf11k,3218
127
+ langchain/agents/output_parsers/react_single_input.py,sha256=nIdieCfXKXpk-CzqvVmAQS0SBrdFS1gKb9ngVeCVYjA,3219
128
128
  langchain/agents/output_parsers/self_ask.py,sha256=-4_-hQbKB1ichR5odEyeYUV-wIdLmP5eGDxzw77Cop4,1545
129
129
  langchain/agents/output_parsers/tools.py,sha256=go3kYKW406Wi8tR8Oqy6YGD26Ab-9PHQtTQ1FHScHA0,3779
130
130
  langchain/agents/output_parsers/xml.py,sha256=2MjxW4nAM4sZN-in3K40_K5DBx6cI2Erb0TZbpSoZIY,1658
@@ -201,7 +201,7 @@ langchain/callbacks/wandb_callback.py,sha256=mWcDRVTlUnzQGhN2BMiGhPsKw5uyB2qDQ_L
201
201
  langchain/callbacks/whylabs_callback.py,sha256=N36XACtHYNgFSSYrNbfXiZ4nxSdwSrIE5e6xwxukrPc,688
202
202
  langchain/chains/__init__.py,sha256=xsRWTwsP3mTejfnKTzsTKRwpYT5xthXZAde30M_118U,5092
203
203
  langchain/chains/api/__init__.py,sha256=d8xBEQqFVNOMTm4qXNz5YiYkvA827Ayyd4XCG1KP-z4,84
204
- langchain/chains/api/base.py,sha256=OBdwr1T1ll4D3uSmEPjSf5jMugwTqM_aeZbGmiracZI,15221
204
+ langchain/chains/api/base.py,sha256=hUSXqxtQbNm_9G4Nofsv6WEldjhhv9ByjSdhCt1G-V8,15259
205
205
  langchain/chains/api/news_docs.py,sha256=9vzx5nSPwe_cjFV8cemlfMp4EX8wiZe2eXBuRik2Vdg,2452
206
206
  langchain/chains/api/open_meteo_docs.py,sha256=8pLSX24K37lcgq3jmgfThcuiz7WY3zkub_V6dtsqc18,3399
207
207
  langchain/chains/api/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -279,10 +279,10 @@ langchain/chains/llm_summarization_checker/prompts/create_facts.txt,sha256=hM2_E
279
279
  langchain/chains/llm_summarization_checker/prompts/revise_summary.txt,sha256=nSSq5UQMx6gvjMKIs2t_ituuEQzu2nni1wdnywAe-5U,416
280
280
  langchain/chains/llm_symbolic_math/__init__.py,sha256=KQ6bFiFMsqs8PNtU-oo6l-czNBBwQUn2rEirz3gt-w8,470
281
281
  langchain/chains/loading.py,sha256=57shFurz0r_FDoUSTcD5Hv7cZl4Rr2G2A_gT-p7XHCE,28829
282
- langchain/chains/mapreduce.py,sha256=90P4QcNczv22qye9JCuOptR9ze-0qIFotb6bOS6HX8g,4092
283
- langchain/chains/moderation.py,sha256=ezUrzTOI6uGynyglpSuGom2gK26bKtkER2UuMG4yJWQ,4427
282
+ langchain/chains/mapreduce.py,sha256=1Sjrnu21VaRtfAGQB-Mf-ssbsv3vk5-mXThwIq1IHTA,4117
283
+ langchain/chains/moderation.py,sha256=HqOo7_ySVVg1NNbP7Qknaz3CzxNujoYL7ms2qavo0HY,4428
284
284
  langchain/chains/natbot/__init__.py,sha256=ACF2TYNK_CTfvmdLlG5Ry0_j9D6ZfjgfQxmeKe1BAIg,96
285
- langchain/chains/natbot/base.py,sha256=zl_sf4dgS8dFRYTY83cdaMXq1oqEsB-ddlb7RHx5SUM,5286
285
+ langchain/chains/natbot/base.py,sha256=pS4NHgEHDjqiHRcyxzNgrFrUG56tW8nQ7BOmxjvoe6c,5433
286
286
  langchain/chains/natbot/crawler.py,sha256=E1mQUEsg8Jj6Eth-LBUcMU-Zc88JEA3a79kMhHkKO08,16050
287
287
  langchain/chains/natbot/prompt.py,sha256=zB95SYLG5_12ABFFGDtDi8vVP9DSdPoP8UCjrar_4TI,4989
288
288
  langchain/chains/openai_functions/__init__.py,sha256=o8B_I98nFTlFPkF6FPpLyt8pU3EfEPHADHr9xY5V1O0,1489
@@ -360,7 +360,7 @@ langchain/chat_models/azure_openai.py,sha256=aRNol2PNC49PmvdZnwjhQeMFRDOOelPNAXz
360
360
  langchain/chat_models/azureml_endpoint.py,sha256=6mxXm8UFXataLp0NYRGA88V3DpiNKPo095u_JGj7XGE,863
361
361
  langchain/chat_models/baichuan.py,sha256=3-GveFoF5ZNyLdRNK6V4i3EDDjdseOTFWbCMhDbtO9w,643
362
362
  langchain/chat_models/baidu_qianfan_endpoint.py,sha256=CZrX2SMpbE9H7wBXNC6rGvw-YqQl9zjuJrClYQxEzuI,715
363
- langchain/chat_models/base.py,sha256=Y8cqyWUy_wK1XqPF3C6Ini93vz3U63UA2FGHni1YZXU,31650
363
+ langchain/chat_models/base.py,sha256=9LDM93_1-pEV_kRbCebXmZdnWLsoepp2M_J6u6YGXbk,32221
364
364
  langchain/chat_models/bedrock.py,sha256=HRV3T_0mEnZ8LvJJqAA_UVpt-_03G715oIgomRJw55M,757
365
365
  langchain/chat_models/cohere.py,sha256=EYOECHX-nKRhZVfCfmFGZ2lr51PzaB5OvOEqmBCu1fI,633
366
366
  langchain/chat_models/databricks.py,sha256=5_QkC5lG4OldaHC2FS0XylirJouyZx1YT95SKwc12M0,653
@@ -804,12 +804,12 @@ langchain/memory/motorhead_memory.py,sha256=OXjtlAQi1ioRXdM3GVcYmReynkKn8Vm1e5Tr
804
804
  langchain/memory/prompt.py,sha256=r8vxZSRydSOWJzRszStN0Wky4n3fyM_QJ2XoKMsP3JA,8181
805
805
  langchain/memory/readonly.py,sha256=IbZFbyuPo_bHEzyACQcLIcOPpczoX5CLfM_n0YllYjw,792
806
806
  langchain/memory/simple.py,sha256=7El81OHJA0HBqwJ-AZDTQFPfB7B5NEsmY_fEOrwD0XA,761
807
- langchain/memory/summary.py,sha256=KS6V7eD2hCsX5vtLUO20VbVVFprkXhGAFxVFEiiEIaA,4503
807
+ langchain/memory/summary.py,sha256=LHf8a59eQKFFGujcmpRnzeUf7J1Fjv9qy-a9CLwN6S4,4706
808
808
  langchain/memory/summary_buffer.py,sha256=ynYbCa-XEjFeYcVIwyjsiOShWyLj6v1sDmurdv1kGUM,5514
809
809
  langchain/memory/token_buffer.py,sha256=jYtua6S5M6R2KyElsqXc8VRuGNsu7YVpavINj91HfGg,2556
810
810
  langchain/memory/utils.py,sha256=PvauM6AkPRX5Hy5sY6NysuieRI9Oae1IeC61y1iIQMs,617
811
811
  langchain/memory/vectorstore.py,sha256=RdOX2EDSFXAC6LEE_9aYWIJcVoZ32lUQuludOgPCAoc,4189
812
- langchain/memory/vectorstore_token_buffer_memory.py,sha256=CSuatQSOEs7iKeMBhKLUqDvNrdl12lquvC89q9_NlXo,7602
812
+ langchain/memory/vectorstore_token_buffer_memory.py,sha256=73GYFp_hExF1IRc6xFTOYU4lLdQAp0cvig6858OAJVQ,7618
813
813
  langchain/memory/zep_memory.py,sha256=WMrAJ7jymx0_0d3JnhCuklJxfomsGhEEEQ6uPMJ21Bo,628
814
814
  langchain/model_laboratory.py,sha256=IaJzVG_SbFX7W6ODriqqme-Q5x0MB18j4Bhg1Y-fWLo,3278
815
815
  langchain/output_parsers/__init__.py,sha256=A9fDuB-lYuOIN8QbDx-fULqSwugB7saLRKD23gdaIl4,2720
@@ -818,7 +818,7 @@ langchain/output_parsers/combining.py,sha256=tBQx3lVAz4YL52unRsRGofAgQPFbIgDU8Mn
818
818
  langchain/output_parsers/datetime.py,sha256=zxhwax0YxVahE3CCHMXTqjpyzQcffgZ9J0NA0qLL0_8,1974
819
819
  langchain/output_parsers/enum.py,sha256=VrkErkDrW6JEiIOjw18J0D4p_BU0p59pUcb7W1sRLbk,1267
820
820
  langchain/output_parsers/ernie_functions.py,sha256=86DsYlAGncjRalnmw5ZGwhH80lP2ms6zaw8PJGC3m3Q,1427
821
- langchain/output_parsers/fix.py,sha256=TuKf5pH3wNO_kqJClz5RxPUH-szPvp899zRhTeq7wdE,5568
821
+ langchain/output_parsers/fix.py,sha256=QAra1xRX1fgEOkahlrCanT_3gYPq1waRtwJ0jBVLme8,5590
822
822
  langchain/output_parsers/format_instructions.py,sha256=y5oSpjwzgmvYRNhfe0JmKHHdFZZP65L2snJI6xcMXEY,3958
823
823
  langchain/output_parsers/json.py,sha256=2FJL7uLd7pHgvpQm-r5XDyt9S1ZZ9mlJUW8ilQAQ0k4,340
824
824
  langchain/output_parsers/list.py,sha256=D35r0U51Xy5wHn-VcWxr97Ftul4UqszmyLetDi4syYQ,310
@@ -831,7 +831,7 @@ langchain/output_parsers/pydantic.py,sha256=uxbrfdyPnZxfdDvmuDr3QOmBFMwML3SfMDEm
831
831
  langchain/output_parsers/rail_parser.py,sha256=iHmX3ux2jE2k0MsLqe5XCrJ1eQOBBfZtRbRzQoYPTfU,691
832
832
  langchain/output_parsers/regex.py,sha256=TAkxKzxRQQ810LuXbxYatwLZgsYhoVwez3j5e2P55bA,1230
833
833
  langchain/output_parsers/regex_dict.py,sha256=UK6iL4Hx-q6UlPNEGLAnbh7_8-IwtXY2V1-_KicG1Z8,1725
834
- langchain/output_parsers/retry.py,sha256=QPLKiY5uSU8QcnfW067qYVCWqvaktsH5ulR0bo0qgoM,10457
834
+ langchain/output_parsers/retry.py,sha256=OebVl-COlUP5FbAtPvHjXCWYYyQagj4z0wURwZRyWqM,10569
835
835
  langchain/output_parsers/structured.py,sha256=R38VNhDr-xD9zM30q71h31ApZofi9UaAkMW7xCz6S2U,3147
836
836
  langchain/output_parsers/xml.py,sha256=WDHazWjxO-nDAzxkBJrd1tGINVrzo4mH2-Qgqtz9Y2w,93
837
837
  langchain/output_parsers/yaml.py,sha256=jKxg4cBFF6LCfoIexu9Q4M4LX7MQzb7QbMRT4_bZ5Y0,2409
@@ -1335,8 +1335,8 @@ langchain/vectorstores/xata.py,sha256=HW_Oi5Hz8rH2JaUhRNWQ-3hLYmNzD8eAz6K5YqPArm
1335
1335
  langchain/vectorstores/yellowbrick.py,sha256=-lnjGcRE8Q1nEPOTdbKYTw5noS2cy2ce1ePOU804-_o,624
1336
1336
  langchain/vectorstores/zep.py,sha256=RJ2auxoA6uHHLEZknw3_jeFmYJYVt-PWKMBcNMGV6TM,798
1337
1337
  langchain/vectorstores/zilliz.py,sha256=XhPPIUfKPFJw0_svCoBgCnNkkBLoRVVcyuMfOnE5IxU,609
1338
- langchain-0.3.7.dist-info/LICENSE,sha256=TsZ-TKbmch26hJssqCJhWXyGph7iFLvyFBYAa3stBHg,1067
1339
- langchain-0.3.7.dist-info/METADATA,sha256=dnEGxVj9Mtqfl-VUt9arKGHht18C67QuVMiQgYfc7hU,7076
1340
- langchain-0.3.7.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
1341
- langchain-0.3.7.dist-info/entry_points.txt,sha256=IgKjoXnkkVC8Nm7ggiFMCNAk01ua6RVTb9cmZTVNm5w,58
1342
- langchain-0.3.7.dist-info/RECORD,,
1338
+ langchain-0.3.8.dist-info/LICENSE,sha256=TsZ-TKbmch26hJssqCJhWXyGph7iFLvyFBYAa3stBHg,1067
1339
+ langchain-0.3.8.dist-info/METADATA,sha256=ppLVCXbqfVMXsuKkeLbxThC7VSxWU5kwV5Li-z_uOeY,7077
1340
+ langchain-0.3.8.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
1341
+ langchain-0.3.8.dist-info/entry_points.txt,sha256=IgKjoXnkkVC8Nm7ggiFMCNAk01ua6RVTb9cmZTVNm5w,58
1342
+ langchain-0.3.8.dist-info/RECORD,,