Spaces:
Sleeping
Sleeping
File size: 5,840 Bytes
30596e4 c6cb298 30596e4 b5b988a c6cb298 b5b988a 30596e4 519bb78 b5b988a 30596e4 c6cb298 30596e4 519bb78 c6cb298 519bb78 c6cb298 519bb78 c6cb298 c8fe20b c6cb298 519bb78 c6cb298 519bb78 30596e4 b5b988a c8fe20b b5b988a 30596e4 519bb78 c8fe20b c6cb298 c8fe20b c6cb298 c8fe20b c6cb298 c8fe20b c6cb298 fcbd089 519bb78 30596e4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# LangChain supports many other chat models. Here, we're using Ollama
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain.tools.retriever import create_retriever_tool
from langchain_community.utilities import SerpAPIWrapper
from langchain.retrievers import ArxivRetriever
from langchain_core.tools import Tool
from langchain import hub
from langchain.agents import AgentExecutor, load_tools
from langchain.agents.format_scratchpad import format_log_to_str
from langchain.agents.output_parsers import (
ReActJsonSingleInputOutputParser,
)
# Import things that are needed generically
from langchain.pydantic_v1 import BaseModel, Field
from langchain.tools import BaseTool, StructuredTool, tool
from typing import List, Dict
from datetime import datetime
from langchain.tools.render import render_text_description
import os
import dotenv
dotenv.load_dotenv()
OLLMA_BASE_URL = os.getenv("OLLMA_BASE_URL")
# supports many more optional parameters. Hover on your `ChatOllama(...)`
# class to view the latest available supported parameters
llm = ChatOllama(
model="mistral:instruct",
base_url= OLLMA_BASE_URL
)
prompt = ChatPromptTemplate.from_template("Tell me a short joke about {topic}")
arxiv_retriever = ArxivRetriever(load_max_docs=2)
def format_info_list(info_list: List[Dict[str, str]]) -> str:
"""
Format a list of dictionaries containing information into a single string.
Args:
info_list (List[Dict[str, str]]): A list of dictionaries containing information.
Returns:
str: A formatted string containing the information from the list.
"""
formatted_strings = []
for info_dict in info_list:
formatted_string = "|"
for key, value in info_dict.items():
if isinstance(value, datetime.date):
value = value.strftime('%Y-%m-%d')
formatted_string += f"'{key}': '{value}', "
formatted_string = formatted_string.rstrip(', ') + "|"
formatted_strings.append(formatted_string)
return '\n'.join(formatted_strings)
@tool
def arxiv_search(query: str) -> str:
"""Using the arxiv search and collects metadata."""
# return "LangChain"
global all_sources
data = arxiv_retriever.invoke(query)
meta_data = [i.metadata for i in data]
# meta_data += all_sources
# all_sources += meta_data
all_sources += meta_data
# formatted_info = format_info(entry_id, published, title, authors)
# formatted_info = format_info_list(all_sources)
return meta_data.__str__()
@tool
def google_search(query: str) -> str:
"""Using the google search and collects metadata."""
# return "LangChain"
global all_sources
x = SerpAPIWrapper()
search_results:dict = x.results(query)
organic_source = search_results['organic_results']
# formatted_string = "Title: {title}, link: {link}, snippet: {snippet}".format(**organic_source)
cleaner_sources = ["Title: {title}, link: {link}, snippet: {snippet}".format(**i) for i in organic_source]
all_sources += cleaner_sources
return cleaner_sources.__str__()
# return organic_source
tools = [arxiv_search,google_search]
# tools = [
# create_retriever_tool(
# retriever,
# "search arxiv's database for",
# "Use this to recomend the user a paper to read Unless stated please choose the most recent models",
# # "Searches and returns excerpts from the 2022 State of the Union.",
# ),
# Tool(
# name="SerpAPI",
# description="A low-cost Google Search API. Useful for when you need to answer questions about current events. Input should be a search query.",
# func=SerpAPIWrapper().run,
# )
# ]
prompt = hub.pull("hwchase17/react-json")
prompt = prompt.partial(
tools=render_text_description(tools),
tool_names=", ".join([t.name for t in tools]),
)
chat_model = llm
# define the agent
chat_model_with_stop = chat_model.bind(stop=["\nObservation"])
agent = (
{
"input": lambda x: x["input"],
"agent_scratchpad": lambda x: format_log_to_str(x["intermediate_steps"]),
}
| prompt
| chat_model_with_stop
| ReActJsonSingleInputOutputParser()
)
# instantiate AgentExecutor
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
# handle_parsing_errors=True #prevents error
)
if __name__ == "__main__":
# global variable for collecting sources
all_sources = []
input = agent_executor.invoke(
{
"input": "How to generate videos from images using state of the art macchine learning models; Using the axriv retriever " +
"add the urls of the papers used in the final answer using the metadata from the retriever please do not use '`' "
# f"Please prioritize the newest papers this is the current data {get_current_date()}"
}
)
# input_1 = agent_executor.invoke(
# {
# "input": "I am looking for a text to 3d model; Using the axriv retriever " +
# "add the urls of the papers used in the final answer using the metadata from the retriever"
# # f"Please prioritize the newest papers this is the current data {get_current_date()}"
# }
# )
# input_1 = agent_executor.invoke(
# {
# "input": "I am looking for a text to 3d model; Using the google search tool " +
# "add the urls in the final answer using the metadata from the retriever, also provid a summary of the searches"
# # f"Please prioritize the newest papers this is the current data {get_current_date()}"
# }
# )
x = 0
|