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)}))