|
1 | | -import typing |
2 | 1 | from contextvars import Token |
| 2 | +from typing import ( |
| 3 | + Any, |
| 4 | + Dict, |
| 5 | + List, |
| 6 | + Literal, |
| 7 | + Optional, |
| 8 | + Sequence, |
| 9 | + Set, |
| 10 | + Type, |
| 11 | + Union, |
| 12 | + cast, |
| 13 | +) |
| 14 | +from uuid import UUID |
3 | 15 |
|
4 | 16 | import pydantic |
5 | 17 | from opentelemetry import context, trace |
|
16 | 28 | LangfuseSpan, |
17 | 29 | LangfuseTool, |
18 | 30 | ) |
| 31 | +from langfuse._utils import _get_timestamp |
| 32 | +from langfuse.langchain.utils import _extract_model_name |
19 | 33 | from langfuse.logger import langfuse_logger |
20 | 34 |
|
21 | 35 | try: |
22 | | - import langchain # noqa |
23 | | - |
24 | | -except ImportError as e: |
25 | | - langfuse_logger.error( |
26 | | - f"Could not import langchain. The langchain integration will not work. {e}" |
27 | | - ) |
| 36 | + import langchain |
28 | 37 |
|
29 | | -from typing import Any, Dict, List, Literal, Optional, Sequence, Set, Type, Union, cast |
30 | | -from uuid import UUID |
| 38 | + if langchain.__version__.startswith("1"): |
| 39 | + # Langchain v1 |
| 40 | + from langchain_core.agents import AgentAction, AgentFinish |
| 41 | + from langchain_core.callbacks import ( |
| 42 | + BaseCallbackHandler as LangchainBaseCallbackHandler, |
| 43 | + ) |
| 44 | + from langchain_core.documents import Document |
| 45 | + from langchain_core.messages import ( |
| 46 | + AIMessage, |
| 47 | + BaseMessage, |
| 48 | + ChatMessage, |
| 49 | + FunctionMessage, |
| 50 | + HumanMessage, |
| 51 | + SystemMessage, |
| 52 | + ToolMessage, |
| 53 | + ) |
| 54 | + from langchain_core.outputs import ChatGeneration, LLMResult |
31 | 55 |
|
32 | | -from langfuse._utils import _get_timestamp |
33 | | -from langfuse.langchain.utils import _extract_model_name |
| 56 | + else: |
| 57 | + # Langchain v0 |
| 58 | + from langchain.callbacks.base import ( # type: ignore |
| 59 | + BaseCallbackHandler as LangchainBaseCallbackHandler, |
| 60 | + ) |
| 61 | + from langchain.schema.agent import AgentAction, AgentFinish # type: ignore |
| 62 | + from langchain.schema.document import Document # type: ignore |
| 63 | + from langchain_core.messages import ( |
| 64 | + AIMessage, |
| 65 | + BaseMessage, |
| 66 | + ChatMessage, |
| 67 | + FunctionMessage, |
| 68 | + HumanMessage, |
| 69 | + SystemMessage, |
| 70 | + ToolMessage, |
| 71 | + ) |
| 72 | + from langchain_core.outputs import ( |
| 73 | + ChatGeneration, |
| 74 | + LLMResult, |
| 75 | + ) |
34 | 76 |
|
35 | | -try: |
36 | | - from langchain.callbacks.base import ( |
37 | | - BaseCallbackHandler as LangchainBaseCallbackHandler, |
38 | | - ) |
39 | | - from langchain.schema.agent import AgentAction, AgentFinish |
40 | | - from langchain.schema.document import Document |
41 | | - from langchain_core.messages import ( |
42 | | - AIMessage, |
43 | | - BaseMessage, |
44 | | - ChatMessage, |
45 | | - FunctionMessage, |
46 | | - HumanMessage, |
47 | | - SystemMessage, |
48 | | - ToolMessage, |
49 | | - ) |
50 | | - from langchain_core.outputs import ( |
51 | | - ChatGeneration, |
52 | | - LLMResult, |
53 | | - ) |
54 | 77 | except ImportError: |
55 | 78 | raise ModuleNotFoundError( |
56 | 79 | "Please install langchain to use the Langfuse langchain integration: 'pip install langchain'" |
@@ -1011,7 +1034,7 @@ def _flatten_comprehension(matrix: Any) -> Any: |
1011 | 1034 | return [item for row in matrix for item in row] |
1012 | 1035 |
|
1013 | 1036 |
|
1014 | | -def _parse_usage_model(usage: typing.Union[pydantic.BaseModel, dict]) -> Any: |
| 1037 | +def _parse_usage_model(usage: Union[pydantic.BaseModel, dict]) -> Any: |
1015 | 1038 | # maintains a list of key translations. For each key, the usage model is checked |
1016 | 1039 | # and a new object will be created with the new key if the key exists in the usage model |
1017 | 1040 | # All non matched keys will remain on the object. |
|
0 commit comments