Spaces:
Runtime error
Runtime error
| from typing import Optional, List | |
| from llama_index.core.vector_stores import ( | |
| MetadataFilter, | |
| MetadataFilters, | |
| FilterCondition, | |
| ) | |
| from llama_index.core.memory import ChatMemoryBuffer | |
| from llama_index.core.tools import QueryEngineTool, ToolMetadata | |
| from llama_index.agent.openai import OpenAIAgent | |
| from llama_index.llms.openai import OpenAI | |
| from llama_index.storage.chat_store.redis import RedisChatStore | |
| from llama_index.core.memory import ChatMemoryBuffer | |
| from llama_index.core.query_engine import CitationQueryEngine | |
| from llama_index.core import Settings | |
| from core.chat.chatstore import ChatStore | |
| from service.dto import ChatMessage | |
| from config import GPTBOT_CONFIG | |
| from core.prompt import SYSTEM_BOT_TEMPLATE | |
| import redis | |
| import os | |
| import json | |
| class Engine: | |
| def __init__(self): | |
| self.llm = OpenAI( | |
| temperature=GPTBOT_CONFIG.temperature, | |
| model=GPTBOT_CONFIG.model, | |
| max_tokens=GPTBOT_CONFIG.max_tokens, | |
| api_key=GPTBOT_CONFIG.api_key, | |
| ) | |
| self.chat_store = ChatStore() | |
| Settings.llm = self.llm | |
| def _build_description_bot(self, title, category): | |
| try: | |
| prompt = f"Write a detailed description for an OpenAI agent with the title '{title}' and categorized under '{category}'." | |
| description = self.llm.complete(prompt) | |
| return description | |
| except Exception as e: | |
| return f"Error generating description: {str(e)}" | |
| def get_citation_engine(self, title, category, index): | |
| filters = MetadataFilters( | |
| filters=[ | |
| MetadataFilter(key="title", value=title), | |
| MetadataFilter(key="category", value=category), | |
| ], | |
| condition=FilterCondition.AND, | |
| ) | |
| # Create the QueryEngineTool with the index and filters | |
| kwargs = {"similarity_top_k": 5, "filters": filters} | |
| retriever = index.as_retriever(**kwargs) | |
| citation_engine = CitationQueryEngine(retriever=retriever) | |
| return citation_engine | |
| def get_chat_engine( | |
| self, session_id, index, title=None, category=None, type="general" | |
| ): | |
| # Create the QueryEngineTool based on the type | |
| if type == "general": | |
| # query_engine = index.as_query_engine(similarity_top_k=3) | |
| citation_engine = CitationQueryEngine.from_args(index, similarity_top_k=5) | |
| description = "A book containing information about medicine" | |
| else: | |
| citation_engine = self.get_citation_engine(title, category, index) | |
| description = self._build_description_bot() | |
| metadata = ToolMetadata(name="bot-belajar", description=description) | |
| print(metadata) | |
| vector_query_engine = QueryEngineTool( | |
| query_engine=citation_engine, metadata=metadata | |
| ) | |
| print(vector_query_engine) | |
| # Initialize the OpenAI agent with the tools | |
| chat_engine = OpenAIAgent.from_tools( | |
| tools=[vector_query_engine], | |
| llm=self.llm, | |
| memory=self.chat_store.initialize_memory_bot(session_id), | |
| # memory = self.initialize_memory_bot(session_id), | |
| system_prompt=SYSTEM_BOT_TEMPLATE, | |
| ) | |
| return chat_engine |