langchain-core 0.3.79__py3-none-any.whl → 1.0.0__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-core might be problematic. Click here for more details.

Files changed (165) hide show
  1. langchain_core/__init__.py +1 -1
  2. langchain_core/_api/__init__.py +3 -4
  3. langchain_core/_api/beta_decorator.py +23 -26
  4. langchain_core/_api/deprecation.py +52 -65
  5. langchain_core/_api/path.py +3 -6
  6. langchain_core/_import_utils.py +3 -4
  7. langchain_core/agents.py +19 -19
  8. langchain_core/caches.py +53 -63
  9. langchain_core/callbacks/__init__.py +1 -8
  10. langchain_core/callbacks/base.py +323 -334
  11. langchain_core/callbacks/file.py +44 -44
  12. langchain_core/callbacks/manager.py +441 -507
  13. langchain_core/callbacks/stdout.py +29 -30
  14. langchain_core/callbacks/streaming_stdout.py +32 -32
  15. langchain_core/callbacks/usage.py +60 -57
  16. langchain_core/chat_history.py +48 -63
  17. langchain_core/document_loaders/base.py +23 -23
  18. langchain_core/document_loaders/langsmith.py +37 -37
  19. langchain_core/documents/__init__.py +0 -1
  20. langchain_core/documents/base.py +62 -65
  21. langchain_core/documents/compressor.py +4 -4
  22. langchain_core/documents/transformers.py +28 -29
  23. langchain_core/embeddings/fake.py +50 -54
  24. langchain_core/example_selectors/length_based.py +1 -1
  25. langchain_core/example_selectors/semantic_similarity.py +21 -25
  26. langchain_core/exceptions.py +10 -11
  27. langchain_core/globals.py +3 -151
  28. langchain_core/indexing/api.py +61 -66
  29. langchain_core/indexing/base.py +58 -58
  30. langchain_core/indexing/in_memory.py +3 -3
  31. langchain_core/language_models/__init__.py +14 -27
  32. langchain_core/language_models/_utils.py +270 -84
  33. langchain_core/language_models/base.py +55 -162
  34. langchain_core/language_models/chat_models.py +442 -402
  35. langchain_core/language_models/fake.py +11 -11
  36. langchain_core/language_models/fake_chat_models.py +61 -39
  37. langchain_core/language_models/llms.py +123 -231
  38. langchain_core/load/dump.py +4 -5
  39. langchain_core/load/load.py +18 -28
  40. langchain_core/load/mapping.py +2 -4
  41. langchain_core/load/serializable.py +39 -40
  42. langchain_core/messages/__init__.py +61 -22
  43. langchain_core/messages/ai.py +368 -163
  44. langchain_core/messages/base.py +214 -43
  45. langchain_core/messages/block_translators/__init__.py +111 -0
  46. langchain_core/messages/block_translators/anthropic.py +470 -0
  47. langchain_core/messages/block_translators/bedrock.py +94 -0
  48. langchain_core/messages/block_translators/bedrock_converse.py +297 -0
  49. langchain_core/messages/block_translators/google_genai.py +530 -0
  50. langchain_core/messages/block_translators/google_vertexai.py +21 -0
  51. langchain_core/messages/block_translators/groq.py +143 -0
  52. langchain_core/messages/block_translators/langchain_v0.py +301 -0
  53. langchain_core/messages/block_translators/openai.py +1010 -0
  54. langchain_core/messages/chat.py +2 -6
  55. langchain_core/messages/content.py +1423 -0
  56. langchain_core/messages/function.py +6 -10
  57. langchain_core/messages/human.py +41 -38
  58. langchain_core/messages/modifier.py +2 -2
  59. langchain_core/messages/system.py +38 -28
  60. langchain_core/messages/tool.py +96 -103
  61. langchain_core/messages/utils.py +478 -504
  62. langchain_core/output_parsers/__init__.py +1 -14
  63. langchain_core/output_parsers/base.py +58 -61
  64. langchain_core/output_parsers/json.py +7 -8
  65. langchain_core/output_parsers/list.py +5 -7
  66. langchain_core/output_parsers/openai_functions.py +49 -47
  67. langchain_core/output_parsers/openai_tools.py +14 -19
  68. langchain_core/output_parsers/pydantic.py +12 -13
  69. langchain_core/output_parsers/string.py +2 -2
  70. langchain_core/output_parsers/transform.py +15 -17
  71. langchain_core/output_parsers/xml.py +8 -10
  72. langchain_core/outputs/__init__.py +1 -1
  73. langchain_core/outputs/chat_generation.py +18 -18
  74. langchain_core/outputs/chat_result.py +1 -3
  75. langchain_core/outputs/generation.py +8 -8
  76. langchain_core/outputs/llm_result.py +10 -10
  77. langchain_core/prompt_values.py +12 -12
  78. langchain_core/prompts/__init__.py +3 -27
  79. langchain_core/prompts/base.py +45 -55
  80. langchain_core/prompts/chat.py +254 -313
  81. langchain_core/prompts/dict.py +5 -5
  82. langchain_core/prompts/few_shot.py +81 -88
  83. langchain_core/prompts/few_shot_with_templates.py +11 -13
  84. langchain_core/prompts/image.py +12 -14
  85. langchain_core/prompts/loading.py +6 -8
  86. langchain_core/prompts/message.py +3 -3
  87. langchain_core/prompts/prompt.py +24 -39
  88. langchain_core/prompts/string.py +4 -4
  89. langchain_core/prompts/structured.py +42 -50
  90. langchain_core/rate_limiters.py +51 -60
  91. langchain_core/retrievers.py +49 -190
  92. langchain_core/runnables/base.py +1484 -1709
  93. langchain_core/runnables/branch.py +45 -61
  94. langchain_core/runnables/config.py +80 -88
  95. langchain_core/runnables/configurable.py +117 -134
  96. langchain_core/runnables/fallbacks.py +83 -79
  97. langchain_core/runnables/graph.py +85 -95
  98. langchain_core/runnables/graph_ascii.py +27 -28
  99. langchain_core/runnables/graph_mermaid.py +38 -50
  100. langchain_core/runnables/graph_png.py +15 -16
  101. langchain_core/runnables/history.py +135 -148
  102. langchain_core/runnables/passthrough.py +124 -150
  103. langchain_core/runnables/retry.py +46 -51
  104. langchain_core/runnables/router.py +25 -30
  105. langchain_core/runnables/schema.py +79 -74
  106. langchain_core/runnables/utils.py +62 -68
  107. langchain_core/stores.py +81 -115
  108. langchain_core/structured_query.py +8 -8
  109. langchain_core/sys_info.py +27 -29
  110. langchain_core/tools/__init__.py +1 -14
  111. langchain_core/tools/base.py +179 -187
  112. langchain_core/tools/convert.py +131 -139
  113. langchain_core/tools/render.py +10 -10
  114. langchain_core/tools/retriever.py +11 -11
  115. langchain_core/tools/simple.py +19 -24
  116. langchain_core/tools/structured.py +30 -39
  117. langchain_core/tracers/__init__.py +1 -9
  118. langchain_core/tracers/base.py +97 -99
  119. langchain_core/tracers/context.py +29 -52
  120. langchain_core/tracers/core.py +50 -60
  121. langchain_core/tracers/evaluation.py +11 -11
  122. langchain_core/tracers/event_stream.py +115 -70
  123. langchain_core/tracers/langchain.py +21 -21
  124. langchain_core/tracers/log_stream.py +43 -43
  125. langchain_core/tracers/memory_stream.py +3 -3
  126. langchain_core/tracers/root_listeners.py +16 -16
  127. langchain_core/tracers/run_collector.py +2 -4
  128. langchain_core/tracers/schemas.py +0 -129
  129. langchain_core/tracers/stdout.py +3 -3
  130. langchain_core/utils/__init__.py +1 -4
  131. langchain_core/utils/_merge.py +46 -8
  132. langchain_core/utils/aiter.py +57 -61
  133. langchain_core/utils/env.py +9 -9
  134. langchain_core/utils/function_calling.py +89 -191
  135. langchain_core/utils/html.py +7 -8
  136. langchain_core/utils/input.py +6 -6
  137. langchain_core/utils/interactive_env.py +1 -1
  138. langchain_core/utils/iter.py +37 -42
  139. langchain_core/utils/json.py +4 -3
  140. langchain_core/utils/json_schema.py +8 -8
  141. langchain_core/utils/mustache.py +9 -11
  142. langchain_core/utils/pydantic.py +33 -35
  143. langchain_core/utils/strings.py +5 -5
  144. langchain_core/utils/usage.py +1 -1
  145. langchain_core/utils/utils.py +80 -54
  146. langchain_core/vectorstores/base.py +129 -164
  147. langchain_core/vectorstores/in_memory.py +99 -174
  148. langchain_core/vectorstores/utils.py +5 -5
  149. langchain_core/version.py +1 -1
  150. {langchain_core-0.3.79.dist-info → langchain_core-1.0.0.dist-info}/METADATA +28 -27
  151. langchain_core-1.0.0.dist-info/RECORD +172 -0
  152. {langchain_core-0.3.79.dist-info → langchain_core-1.0.0.dist-info}/WHEEL +1 -1
  153. langchain_core/beta/__init__.py +0 -1
  154. langchain_core/beta/runnables/__init__.py +0 -1
  155. langchain_core/beta/runnables/context.py +0 -447
  156. langchain_core/memory.py +0 -120
  157. langchain_core/messages/content_blocks.py +0 -176
  158. langchain_core/prompts/pipeline.py +0 -138
  159. langchain_core/pydantic_v1/__init__.py +0 -30
  160. langchain_core/pydantic_v1/dataclasses.py +0 -23
  161. langchain_core/pydantic_v1/main.py +0 -23
  162. langchain_core/tracers/langchain_v1.py +0 -31
  163. langchain_core/utils/loading.py +0 -35
  164. langchain_core-0.3.79.dist-info/RECORD +0 -174
  165. langchain_core-0.3.79.dist-info/entry_points.txt +0 -4
@@ -3,34 +3,17 @@
3
3
  It is more general than a vector store. A retriever does not need to be able to
4
4
  store documents, only to return (or retrieve) it. Vector stores can be used as
5
5
  the backbone of a retriever, but there are other types of retrievers as well.
6
-
7
- **Class hierarchy:**
8
-
9
- .. code-block::
10
-
11
- BaseRetriever --> <name>Retriever # Examples: ArxivRetriever, MergerRetriever
12
-
13
- **Main helpers:**
14
-
15
- .. code-block::
16
-
17
- RetrieverInput, RetrieverOutput, RetrieverLike, RetrieverOutputLike,
18
- Document, Serializable, Callbacks,
19
- CallbackManagerForRetrieverRun, AsyncCallbackManagerForRetrieverRun
20
6
  """
21
7
 
22
8
  from __future__ import annotations
23
9
 
24
- import warnings
25
10
  from abc import ABC, abstractmethod
26
11
  from inspect import signature
27
- from typing import TYPE_CHECKING, Any, Optional
12
+ from typing import TYPE_CHECKING, Any
28
13
 
29
14
  from pydantic import ConfigDict
30
15
  from typing_extensions import Self, TypedDict, override
31
16
 
32
- from langchain_core._api import deprecated
33
- from langchain_core.callbacks import Callbacks
34
17
  from langchain_core.callbacks.manager import AsyncCallbackManager, CallbackManager
35
18
  from langchain_core.documents import Document
36
19
  from langchain_core.runnables import (
@@ -58,11 +41,11 @@ class LangSmithRetrieverParams(TypedDict, total=False):
58
41
 
59
42
  ls_retriever_name: str
60
43
  """Retriever name."""
61
- ls_vector_store_provider: Optional[str]
44
+ ls_vector_store_provider: str | None
62
45
  """Vector store provider."""
63
- ls_embedding_provider: Optional[str]
46
+ ls_embedding_provider: str | None
64
47
  """Embedding provider."""
65
- ls_embedding_model: Optional[str]
48
+ ls_embedding_model: str | None
66
49
  """Embedding model."""
67
50
 
68
51
 
@@ -87,48 +70,45 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
87
70
 
88
71
  Example: A retriever that returns the first 5 documents from a list of documents
89
72
 
90
- .. code-block:: python
73
+ ```python
74
+ from langchain_core.documents import Document
75
+ from langchain_core.retrievers import BaseRetriever
91
76
 
92
- from langchain_core.documents import Document
93
- from langchain_core.retrievers import BaseRetriever
77
+ class SimpleRetriever(BaseRetriever):
78
+ docs: list[Document]
79
+ k: int = 5
94
80
 
95
- class SimpleRetriever(BaseRetriever):
96
- docs: list[Document]
97
- k: int = 5
81
+ def _get_relevant_documents(self, query: str) -> list[Document]:
82
+ \"\"\"Return the first k documents from the list of documents\"\"\"
83
+ return self.docs[:self.k]
98
84
 
99
- def _get_relevant_documents(self, query: str) -> list[Document]:
100
- \"\"\"Return the first k documents from the list of documents\"\"\"
101
- return self.docs[:self.k]
102
-
103
- async def _aget_relevant_documents(self, query: str) -> list[Document]:
104
- \"\"\"(Optional) async native implementation.\"\"\"
105
- return self.docs[:self.k]
85
+ async def _aget_relevant_documents(self, query: str) -> list[Document]:
86
+ \"\"\"(Optional) async native implementation.\"\"\"
87
+ return self.docs[:self.k]
88
+ ```
106
89
 
107
90
  Example: A simple retriever based on a scikit-learn vectorizer
108
91
 
109
- .. code-block:: python
110
-
111
- from sklearn.metrics.pairwise import cosine_similarity
112
-
92
+ ```python
93
+ from sklearn.metrics.pairwise import cosine_similarity
113
94
 
114
- class TFIDFRetriever(BaseRetriever, BaseModel):
115
- vectorizer: Any
116
- docs: list[Document]
117
- tfidf_array: Any
118
- k: int = 4
119
95
 
120
- class Config:
121
- arbitrary_types_allowed = True
96
+ class TFIDFRetriever(BaseRetriever, BaseModel):
97
+ vectorizer: Any
98
+ docs: list[Document]
99
+ tfidf_array: Any
100
+ k: int = 4
122
101
 
123
- def _get_relevant_documents(self, query: str) -> list[Document]:
124
- # Ip -- (n_docs,x), Op -- (n_docs,n_Feats)
125
- query_vec = self.vectorizer.transform([query])
126
- # Op -- (n_docs,1) -- Cosine Sim with each doc
127
- results = cosine_similarity(self.tfidf_array, query_vec).reshape(
128
- (-1,)
129
- )
130
- return [self.docs[i] for i in results.argsort()[-self.k :][::-1]]
102
+ class Config:
103
+ arbitrary_types_allowed = True
131
104
 
105
+ def _get_relevant_documents(self, query: str) -> list[Document]:
106
+ # Ip -- (n_docs,x), Op -- (n_docs,n_Feats)
107
+ query_vec = self.vectorizer.transform([query])
108
+ # Op -- (n_docs,1) -- Cosine Sim with each doc
109
+ results = cosine_similarity(self.tfidf_array, query_vec).reshape((-1,))
110
+ return [self.docs[i] for i in results.argsort()[-self.k :][::-1]]
111
+ ```
132
112
  """
133
113
 
134
114
  model_config = ConfigDict(
@@ -137,15 +117,15 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
137
117
 
138
118
  _new_arg_supported: bool = False
139
119
  _expects_other_args: bool = False
140
- tags: Optional[list[str]] = None
141
- """Optional list of tags associated with the retriever. Defaults to None.
120
+ tags: list[str] | None = None
121
+ """Optional list of tags associated with the retriever.
142
122
  These tags will be associated with each call to this retriever,
143
123
  and passed as arguments to the handlers defined in `callbacks`.
144
124
  You can use these to eg identify a specific instance of a retriever with its
145
125
  use case.
146
126
  """
147
- metadata: Optional[dict[str, Any]] = None
148
- """Optional metadata associated with the retriever. Defaults to None.
127
+ metadata: dict[str, Any] | None = None
128
+ """Optional metadata associated with the retriever.
149
129
  This metadata will be associated with each call to this retriever,
150
130
  and passed as arguments to the handlers defined in `callbacks`.
151
131
  You can use these to eg identify a specific instance of a retriever with its
@@ -155,35 +135,6 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
155
135
  @override
156
136
  def __init_subclass__(cls, **kwargs: Any) -> None:
157
137
  super().__init_subclass__(**kwargs)
158
- # Version upgrade for old retrievers that implemented the public
159
- # methods directly.
160
- if cls.get_relevant_documents != BaseRetriever.get_relevant_documents:
161
- warnings.warn(
162
- "Retrievers must implement abstract `_get_relevant_documents` method"
163
- " instead of `get_relevant_documents`",
164
- DeprecationWarning,
165
- stacklevel=4,
166
- )
167
- swap = cls.get_relevant_documents
168
- cls.get_relevant_documents = ( # type: ignore[method-assign]
169
- BaseRetriever.get_relevant_documents
170
- )
171
- cls._get_relevant_documents = swap # type: ignore[method-assign]
172
- if (
173
- hasattr(cls, "aget_relevant_documents")
174
- and cls.aget_relevant_documents != BaseRetriever.aget_relevant_documents
175
- ):
176
- warnings.warn(
177
- "Retrievers must implement abstract `_aget_relevant_documents` method"
178
- " instead of `aget_relevant_documents`",
179
- DeprecationWarning,
180
- stacklevel=4,
181
- )
182
- aswap = cls.aget_relevant_documents
183
- cls.aget_relevant_documents = ( # type: ignore[method-assign]
184
- BaseRetriever.aget_relevant_documents
185
- )
186
- cls._aget_relevant_documents = aswap # type: ignore[method-assign]
187
138
  parameters = signature(cls._get_relevant_documents).parameters
188
139
  cls._new_arg_supported = parameters.get("run_manager") is not None
189
140
  if (
@@ -216,7 +167,7 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
216
167
 
217
168
  @override
218
169
  def invoke(
219
- self, input: str, config: Optional[RunnableConfig] = None, **kwargs: Any
170
+ self, input: str, config: RunnableConfig | None = None, **kwargs: Any
220
171
  ) -> list[Document]:
221
172
  """Invoke the retriever to get relevant documents.
222
173
 
@@ -224,18 +175,16 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
224
175
 
225
176
  Args:
226
177
  input: The query string.
227
- config: Configuration for the retriever. Defaults to None.
228
- kwargs: Additional arguments to pass to the retriever.
178
+ config: Configuration for the retriever.
179
+ **kwargs: Additional arguments to pass to the retriever.
229
180
 
230
181
  Returns:
231
182
  List of relevant documents.
232
183
 
233
184
  Examples:
234
-
235
- .. code-block:: python
236
-
237
- retriever.invoke("query")
238
-
185
+ ```python
186
+ retriever.invoke("query")
187
+ ```
239
188
  """
240
189
  config = ensure_config(config)
241
190
  inheritable_metadata = {
@@ -278,7 +227,7 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
278
227
  async def ainvoke(
279
228
  self,
280
229
  input: str,
281
- config: Optional[RunnableConfig] = None,
230
+ config: RunnableConfig | None = None,
282
231
  **kwargs: Any,
283
232
  ) -> list[Document]:
284
233
  """Asynchronously invoke the retriever to get relevant documents.
@@ -287,18 +236,16 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
287
236
 
288
237
  Args:
289
238
  input: The query string.
290
- config: Configuration for the retriever. Defaults to None.
291
- kwargs: Additional arguments to pass to the retriever.
239
+ config: Configuration for the retriever.
240
+ **kwargs: Additional arguments to pass to the retriever.
292
241
 
293
242
  Returns:
294
243
  List of relevant documents.
295
244
 
296
245
  Examples:
297
-
298
- .. code-block:: python
299
-
300
- await retriever.ainvoke("query")
301
-
246
+ ```python
247
+ await retriever.ainvoke("query")
248
+ ```
302
249
  """
303
250
  config = ensure_config(config)
304
251
  inheritable_metadata = {
@@ -369,91 +316,3 @@ class BaseRetriever(RunnableSerializable[RetrieverInput, RetrieverOutput], ABC):
369
316
  query,
370
317
  run_manager=run_manager.get_sync(),
371
318
  )
372
-
373
- @deprecated(since="0.1.46", alternative="invoke", removal="1.0")
374
- def get_relevant_documents(
375
- self,
376
- query: str,
377
- *,
378
- callbacks: Callbacks = None,
379
- tags: Optional[list[str]] = None,
380
- metadata: Optional[dict[str, Any]] = None,
381
- run_name: Optional[str] = None,
382
- **kwargs: Any,
383
- ) -> list[Document]:
384
- """Retrieve documents relevant to a query.
385
-
386
- Users should favor using `.invoke` or `.batch` rather than
387
- `get_relevant_documents directly`.
388
-
389
- Args:
390
- query: string to find relevant documents for.
391
- callbacks: Callback manager or list of callbacks. Defaults to None.
392
- tags: Optional list of tags associated with the retriever.
393
- These tags will be associated with each call to this retriever,
394
- and passed as arguments to the handlers defined in `callbacks`.
395
- Defaults to None.
396
- metadata: Optional metadata associated with the retriever.
397
- This metadata will be associated with each call to this retriever,
398
- and passed as arguments to the handlers defined in `callbacks`.
399
- Defaults to None.
400
- run_name: Optional name for the run. Defaults to None.
401
- kwargs: Additional arguments to pass to the retriever.
402
-
403
- Returns:
404
- List of relevant documents.
405
- """
406
- config: RunnableConfig = {}
407
- if callbacks:
408
- config["callbacks"] = callbacks
409
- if tags:
410
- config["tags"] = tags
411
- if metadata:
412
- config["metadata"] = metadata
413
- if run_name:
414
- config["run_name"] = run_name
415
- return self.invoke(query, config, **kwargs)
416
-
417
- @deprecated(since="0.1.46", alternative="ainvoke", removal="1.0")
418
- async def aget_relevant_documents(
419
- self,
420
- query: str,
421
- *,
422
- callbacks: Callbacks = None,
423
- tags: Optional[list[str]] = None,
424
- metadata: Optional[dict[str, Any]] = None,
425
- run_name: Optional[str] = None,
426
- **kwargs: Any,
427
- ) -> list[Document]:
428
- """Asynchronously get documents relevant to a query.
429
-
430
- Users should favor using `.ainvoke` or `.abatch` rather than
431
- `aget_relevant_documents directly`.
432
-
433
- Args:
434
- query: string to find relevant documents for.
435
- callbacks: Callback manager or list of callbacks.
436
- tags: Optional list of tags associated with the retriever.
437
- These tags will be associated with each call to this retriever,
438
- and passed as arguments to the handlers defined in `callbacks`.
439
- Defaults to None.
440
- metadata: Optional metadata associated with the retriever.
441
- This metadata will be associated with each call to this retriever,
442
- and passed as arguments to the handlers defined in `callbacks`.
443
- Defaults to None.
444
- run_name: Optional name for the run. Defaults to None.
445
- kwargs: Additional arguments to pass to the retriever.
446
-
447
- Returns:
448
- List of relevant documents.
449
- """
450
- config: RunnableConfig = {}
451
- if callbacks:
452
- config["callbacks"] = callbacks
453
- if tags:
454
- config["tags"] = tags
455
- if metadata:
456
- config["metadata"] = metadata
457
- if run_name:
458
- config["run_name"] = run_name
459
- return await self.ainvoke(query, config, **kwargs)