Spaces:
Runtime error
Runtime error
| """ | |
| #TODO: make a agent that uses HUMAMN as a tool to get: | |
| - Purpose of science experiment | |
| - What fields of study do they already know of | |
| #IDEA: Platform generate more indepth experiments by generaing a data set and generate / collect scienfic data | |
| ### Chatbot | |
| the chatbot helps the BOUNTY_BOARD_CHAIN generate science experiments | |
| ### EXPERIMENT and Provide feedback on experiments | |
| ### Interrgration | |
| - I need to intergrate this code into the app. This includes creating an id for each post, and potentially and a comment section for each "Experiment" | |
| - I addition i need to generate a mostly pinecone retriever to geenrate scientific experiments from the "community vectore search" | |
| - potentially have prenium users store their private data, but i may not implement this during the hackathon | |
| """ | |
| # https://python.langchain.com/docs/modules/model_io/output_parsers/types/structured | |
| from langchain.output_parsers import ResponseSchema, StructuredOutputParser | |
| from langchain.prompts import PromptTemplate | |
| from langchain_openai import ChatOpenAI | |
| from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder | |
| from langchain.memory import ConversationBufferMemory | |
| from langchain_core.runnables import RunnablePassthrough | |
| from langchain.retrievers import ArxivRetriever, pubmed | |
| from langchain_core.output_parsers import StrOutputParser | |
| from langchain.retrievers import ArxivRetriever | |
| from langchain.retrievers import PubMedRetriever | |
| from langchain.retrievers import WikipediaRetriever | |
| from operator import itemgetter | |
| # import dotenv | |
| import os | |
| from dotenv import load_dotenv | |
| os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY") | |
| # The scheme for creating experiments | |
| # experiment_schema = [ | |
| # ResponseSchema(name="Material", description="list of materials need to perfrom the experiments please be specific", type="list"), | |
| # ] | |
| response_schemas = [ | |
| ResponseSchema(name="Material", description="The base components needed to create this items from scratch DIY This item must be exact and not an estimation", type="list"), | |
| ResponseSchema(name="Feild Of Study", description="List the field of study this can be used for", type="list"), | |
| ] | |
| output_parser = StructuredOutputParser.from_response_schemas(response_schemas) | |
| memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) | |
| format_instructions = output_parser.get_format_instructions() | |
| # experiment_output_parser = StructuredOutputParser.from_response_schemas(experiment_schema) | |
| # maker_output_parser = StructuredOutputParser.from_response_schemas(maker_schema) | |
| memory = ConversationBufferMemory( | |
| memory_key="chat_history", | |
| return_messages=True, | |
| ) | |
| # format_instructions = experiment_output_parser.get_format_instructions() | |
| # maker_format_instructions = maker_output_parser.get_format_instructions() | |
| # output_parser = StructuredOutputParser.from_response_schemas(maker_schema) | |
| format_instructions = output_parser.get_format_instructions() | |
| # experiment_prompt = PromptTemplate( | |
| # template="You must generate well detailed science experiments.\n{format_instructions}\n{question}\n{context}", | |
| # input_variables=["question"], | |
| # partial_variables={"format_instructions": format_instructions}, | |
| # memory = memory | |
| # ) | |
| maker_prompt = PromptTemplate( | |
| template="You must generate a well detailed list of items for creating a given item from scratch. \ | |
| Also describe the purpose for a text-to-3d model to use for extra context\n{format_instructions}\n{question}\n{context}", | |
| input_variables=["question"], | |
| partial_variables={"format_instructions": format_instructions}, | |
| memory = memory | |
| ) | |
| def join_strings(*args: str) -> str: | |
| """ | |
| Join an arbitrary number of strings into one string. | |
| Args: | |
| *args: Variable number of strings to join. | |
| Returns: | |
| str: Joined string. | |
| """ | |
| return ''.join(args) | |
| def format_docs(docs): | |
| return "\n\n".join([join_strings(d.page_content, d.metadata['Entry ID'],d.metadata['Title'], ) for d in docs]) | |
| # model = ChatOpenAI(temperature=0) | |
| model = ChatOpenAI(temperature=0,model="gpt-4") | |
| arxiv_retriever = ArxivRetriever(load_max_docs=2) | |
| pub_med_retriever = PubMedRetriever() | |
| wikipedia_retriever = WikipediaRetriever() | |
| # arxiv_chain = ( | |
| # {"context": arxiv_retriever, "question": RunnablePassthrough()} | |
| # | experiment_prompt | |
| # | model | |
| # | experiment_output_parser | |
| # ) | |
| # pub_med_chain = ( | |
| # {"context": pub_med_retriever, "question": RunnablePassthrough()} | |
| # | experiment_prompt | |
| # | model | |
| # | experiment_output_parser | |
| # ) | |
| # wikipedia_chain = ( | |
| # {"context": wikipedia_retriever, "question": RunnablePassthrough()} | |
| # | experiment_prompt | |
| # | model | |
| # | experiment_output_parser | |
| # ) | |
| maker_wikipedia_chain = ( | |
| {"context": wikipedia_retriever, "question": RunnablePassthrough()} | |
| | maker_prompt | |
| | model | |
| | output_parser | |
| ) | |
| if __name__ == "__main__": | |
| # query = "how to create electronoic on a cellulose subtstrate" | |
| query = "A Microscope" | |
| # output = wikipedia_chain.invoke(query) | |
| output = maker_wikipedia_chain.invoke(query) | |
| x=0 | |