Spaces:
Sleeping
Sleeping
| from langchain_openai import AzureChatOpenAI | |
| import os, json | |
| from langchain_core.prompts import ChatPromptTemplate | |
| from langchain_core.output_parsers import StrOutputParser | |
| from channels.generic.websocket import AsyncWebsocketConsumer | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| os.environ["AZURE_OPENAI_API_KEY"] = os.getenv("AZURE_OPENAI_API_KEY") | |
| os.environ["OPENAI_API_VERSION"] = os.getenv("OPENAI_API_VERSION") | |
| os.environ["AZURE_OPENAI_ENDPOINT"] = os.getenv("AZURE_OPENAI_ENDPOINT") | |
| llm = AzureChatOpenAI( | |
| azure_deployment="gpt-4o", | |
| temperature=0, | |
| max_tokens=None, | |
| timeout=None, | |
| max_retries=2, | |
| ) | |
| prompt = ChatPromptTemplate.from_messages( | |
| [("system", "You are a helpful assistant"), ("user", "{input}")] | |
| ) | |
| output_parser = StrOutputParser() | |
| chain = ( | |
| prompt | |
| | llm.with_config({"run_name": "model"}) | |
| | output_parser.with_config({"run_name": "Assistant"}) | |
| ) | |
| class ChatConsumer(AsyncWebsocketConsumer): | |
| async def connect(self): | |
| await self.accept() | |
| async def disconnect(self, close_code): | |
| pass | |
| async def receive(self, text_data): | |
| text_data_json = json.loads(text_data) | |
| message = text_data_json["message"] | |
| try: | |
| async for chunk in chain.astream_events( | |
| {"input": message}, version="v1", include_names=["Assistant"] | |
| ): | |
| if chunk["event"] in ["on_parser_start", "on_parser_stream"]: | |
| await self.send(text_data=json.dumps(chunk)) | |
| except Exception as e: | |
| await self.send(text_data=json.dumps({"error": str(e)})) | |