import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_community.callbacks import StreamlitCallbackHandler import streamlit as st import requests import time model_service = os.getenv("MODEL_ENDPOINT", "http://localhost:8001") model_service = f"{model_service}/v1" model_service_bearer = os.getenv("MODEL_ENDPOINT_BEARER") request_kwargs = {} if model_service_bearer is not None: request_kwargs = {"headers": {"Authorization": f"Bearer {model_service_bearer}"}} @st.cache_resource(show_spinner=False) def checking_model_service(): start = time.time() print("Checking Model Service Availability...") ready = False while not ready: try: request = requests.get(f'{model_service}/models', **request_kwargs) if request.status_code == 200: ready = True except: pass time.sleep(1) print("Model Service Available") print(f"{time.time()-start} seconds") with st.spinner("Checking Model Service Availability..."): checking_model_service() st.title("Code Generation App") if "messages" not in st.session_state: st.session_state["messages"] = [{"role": "assistant", "content": "How can I help you?"}] for msg in st.session_state.messages: st.chat_message(msg["role"]).write(msg["content"]) model_name = os.getenv("MODEL_NAME", "") llm = ChatOpenAI(base_url=model_service, model=model_name, api_key="EMPTY" if model_service_bearer is None else model_service_bearer, streaming=True) # Define the Langchain chain prompt = ChatPromptTemplate.from_template("""You are an helpful code assistant that can help developer to code for a given {input}. Generate the code block at first, and explain the code at the end. If the {input} is not making sense, please ask for more clarification.""") chain = ( {"input": RunnablePassthrough()} | prompt | llm ) if prompt := st.chat_input(): st.session_state.messages.append({"role": "user", "content": prompt}) st.chat_message("user").markdown(prompt) st_callback = StreamlitCallbackHandler(st.container()) response = chain.invoke(prompt, {"callbacks": [st_callback]}) st.chat_message("assistant").markdown(response.content) st.session_state.messages.append({"role": "assistant", "content": response.content}) st.rerun()