From c0eca219a2282183d0424d721e190be641fbb6fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=AD=E6=BD=87?= <1576730710@qq.com> Date: Fri, 4 Jul 2025 15:25:56 +0800 Subject: [PATCH] [fel] Improve the code of ecological plug-ins and introduce third-party packages --- .../fel_langchain_tools/langchain_tools.py | 26 +++++++++---------- .../llama_rag_basic_toolkit.py | 13 ++++------ .../fel_llama_index_tools/node_utils.py | 2 +- .../llamaindex_network_tool.py | 2 +- framework/fel/python/requirements.txt | 5 +++- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/framework/fel/python/plugins/fel_langchain_tools/langchain_tools.py b/framework/fel/python/plugins/fel_langchain_tools/langchain_tools.py index 90ce8c4f..9cdd69fb 100644 --- a/framework/fel/python/plugins/fel_langchain_tools/langchain_tools.py +++ b/framework/fel/python/plugins/fel_langchain_tools/langchain_tools.py @@ -5,21 +5,10 @@ # ====================================================================================================================== import json from urllib.parse import quote_plus -import psycopg2 -from langchain.agents import AgentExecutor -from langchain_community.utilities.sql_database import SQLDatabase -from langchain_community.agent_toolkits import create_sql_agent -from langchain_community.tools.sql_database.tool import ( - InfoSQLDatabaseTool, - ListSQLDatabaseTool, - QuerySQLCheckerTool, - QuerySQLDataBaseTool, -) -from langchain_core.tools import BaseTool -from langchain_openai import ChatOpenAI, OpenAI -from langchain_community.utilities.requests import TextRequestsWrapper +from langchain.agents import AgentExecutor from langchain_community.agent_toolkits import JsonToolkit, create_json_agent +from langchain_community.agent_toolkits import create_sql_agent from langchain_community.tools.json.tool import JsonSpec from langchain_community.tools.requests.tool import ( RequestsDeleteTool, @@ -28,6 +17,17 @@ RequestsPostTool, RequestsPutTool, ) +from langchain_community.tools.sql_database.tool import ( + InfoSQLDatabaseTool, + ListSQLDatabaseTool, + QuerySQLCheckerTool, + QuerySQLDataBaseTool, +) +from langchain_community.utilities.requests import TextRequestsWrapper +from langchain_community.utilities.sql_database import SQLDatabase +from langchain_core.tools import BaseTool +from langchain_openai import ChatOpenAI + from .langchain_registers import register_function_tools, register_api_tools diff --git a/framework/fel/python/plugins/fel_llama_index_tools/llama_rag_basic_toolkit.py b/framework/fel/python/plugins/fel_llama_index_tools/llama_rag_basic_toolkit.py index d6084d68..3a84e07b 100644 --- a/framework/fel/python/plugins/fel_llama_index_tools/llama_rag_basic_toolkit.py +++ b/framework/fel/python/plugins/fel_llama_index_tools/llama_rag_basic_toolkit.py @@ -3,30 +3,27 @@ # This file is a part of the ModelEngine Project. # Licensed under the MIT License. See License.txt in the project root for license information. # ====================================================================================================================== -import functools import os import traceback from enum import Enum, unique -from inspect import signature from typing import List, Callable, Any, Tuple from fitframework import fit_logger from fitframework.core.repo.fitable_register import register_fitable -from llama_index.core import PromptTemplate from llama_index.core.base.base_selector import SingleSelection from llama_index.core.postprocessor import SimilarityPostprocessor, SentenceEmbeddingOptimizer, LLMRerank, \ LongContextReorder, FixedRecencyPostprocessor from llama_index.core.postprocessor.types import BaseNodePostprocessor -from llama_index.core.prompts import PromptType +from llama_index.core.prompts import PromptType, PromptTemplate from llama_index.core.prompts.default_prompts import DEFAULT_CHOICE_SELECT_PROMPT_TMPL from llama_index.core.selectors import LLMSingleSelector, LLMMultiSelector from llama_index.core.selectors.prompts import DEFAULT_SINGLE_SELECT_PROMPT_TMPL, DEFAULT_MULTI_SELECT_PROMPT_TMPL from llama_index.embeddings.openai import OpenAIEmbedding -from llama_index.legacy.llms import OpenAILike +from llama_index.llms.openai import OpenAI from .callable_registers import register_callable_tool -from .types.document import Document from .node_utils import document_to_query_node, query_node_to_document +from .types.document import Document os.environ["no_proxy"] = "*" @@ -80,7 +77,7 @@ def llm_rerank(nodes: List[Document], query_str: str, **kwargs) -> List[Document choice_batch_size = int(kwargs.get("choice_batch_size") or 10) top_n = int(kwargs.get("top_n") or 10) - llm = OpenAILike(model=model_name, api_base=api_base, api_key=api_key, max_tokens=4096) + llm = OpenAI(model=model_name, api_base=api_base, api_key=api_key, max_tokens=4096) choice_select_prompt = PromptTemplate(prompt, prompt_type=PromptType.CHOICE_SELECT) llm_rerank_obj = LLMRerank(llm=llm, choice_select_prompt=choice_select_prompt, choice_batch_size=choice_batch_size, top_n=top_n) @@ -110,7 +107,7 @@ def llm_choice_selector(choice: List[str], query_str: str, **kwargs) -> List[Sin if mode.lower() not in [m.value for m in SelectorMode]: raise ValueError(f"Invalid mode {mode}.") - llm = OpenAILike(model=model_name, api_base=api_base, api_key=api_key, max_tokens=4096) + llm = OpenAI(model=model_name, api_base=api_base, api_key=api_key, max_tokens=4096) if mode.lower() == SelectorMode.SINGLE.value: selector_prompt = prompt or DEFAULT_SINGLE_SELECT_PROMPT_TMPL selector = LLMSingleSelector.from_defaults(llm=llm, prompt_template_str=selector_prompt) diff --git a/framework/fel/python/plugins/fel_llama_index_tools/node_utils.py b/framework/fel/python/plugins/fel_llama_index_tools/node_utils.py index 65bcabf9..79df4a75 100644 --- a/framework/fel/python/plugins/fel_llama_index_tools/node_utils.py +++ b/framework/fel/python/plugins/fel_llama_index_tools/node_utils.py @@ -5,7 +5,7 @@ # ====================================================================================================================== from llama_index.core.multi_modal_llms.generic_utils import encode_image from llama_index.core.schema import ImageNode, TextNode, NodeWithScore -from llama_index.core import Document as LDocument +from llama_index.core.schema import Document as LDocument from .types.document import Document from .types.media import Media diff --git a/framework/fel/python/plugins/fel_llamaindex_network_tools/llamaindex_network_tool.py b/framework/fel/python/plugins/fel_llamaindex_network_tools/llamaindex_network_tool.py index de2f1202..da0a79cf 100644 --- a/framework/fel/python/plugins/fel_llamaindex_network_tools/llamaindex_network_tool.py +++ b/framework/fel/python/plugins/fel_llamaindex_network_tools/llamaindex_network_tool.py @@ -5,7 +5,7 @@ # ====================================================================================================================== import time -from typing import List, Any, Optional, Callable, Union, Tuple +from typing import List, Any, Callable, Tuple from .callable_registers import register_callable_tool diff --git a/framework/fel/python/requirements.txt b/framework/fel/python/requirements.txt index 1e6c8076..11bd73d4 100644 --- a/framework/fel/python/requirements.txt +++ b/framework/fel/python/requirements.txt @@ -1,4 +1,7 @@ pydantic==2.6.3 psutil==6.1.1 httpx==0.28.1 -pandas==2.1.3 \ No newline at end of file +pandas==2.1.3 +llama-index==0.12.46 +langchain-core==0.3.68 +langchain_community==0.3.27 \ No newline at end of file