| |
| |
| |
| |
| |
|
|
| import os |
| import time |
| import logging |
|
|
| import streamlit as st |
| from dotenv import load_dotenv |
| from langchain_openai import ChatOpenAI |
| from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace |
|
|
| |
| |
| logging.basicConfig( |
| level=logging.INFO, |
| format="%(asctime)s | %(levelname)-7s | %(message)s", |
| datefmt="%H:%M:%S", |
| ) |
| log = logging.getLogger("langchain-demo") |
|
|
| |
| log.info("STEP 0: Loading environment variables from .env") |
| load_dotenv() |
| log.info(" OPENAI_API_KEY set: %s", bool(os.getenv("OPENAI_API_KEY"))) |
| log.info(" HUGGINGFACEHUB_API_TOKEN set: %s", bool(os.getenv("HUGGINGFACEHUB_API_TOKEN"))) |
|
|
|
|
| |
| |
| def load_answer(provider, question): |
| t0 = time.perf_counter() |
| log.info("STEP 1: Provider selected β %s", provider) |
| log.info("STEP 2: Question β %r", question) |
|
|
| if provider == "OpenAI": |
| log.info("STEP 3: Building ChatOpenAI(model='gpt-4o')") |
| llm = ChatOpenAI(model="gpt-4o") |
| log.info("STEP 4: Calling llm.invoke(...) β waiting for OpenAI") |
| answer = llm.invoke(question).content |
| else: |
| log.info("STEP 3: Building HuggingFaceEndpoint(repo_id='Qwen/Qwen2.5-72B-Instruct', " |
| "task='conversational', provider='novita')") |
| llm = HuggingFaceEndpoint( |
| repo_id="Qwen/Qwen2.5-72B-Instruct", |
| task="conversational", |
| provider="novita", |
| huggingfacehub_api_token=os.getenv("HUGGINGFACEHUB_API_TOKEN"), |
| ) |
| log.info("STEP 4: Wrapping in ChatHuggingFace and calling chat.invoke(...) β waiting for HF") |
| chat = ChatHuggingFace(llm=llm) |
| answer = chat.invoke(question).content |
|
|
| elapsed = time.perf_counter() - t0 |
| log.info("STEP 5: Got response (%d chars) in %.2fs", len(answer), elapsed) |
| return answer |
|
|
|
|
| |
| st.set_page_config(page_title="LangChain Demo", page_icon=":robot:") |
| st.header("HuggingFace Demo") |
|
|
| |
| with st.sidebar: |
| st.subheader("Model settings") |
| provider = st.selectbox("Provider", ["OpenAI", "HuggingFace"]) |
|
|
|
|
| |
| def get_text(): |
| input_text = st.text_input("You: ", key="input") |
| return input_text |
|
|
|
|
| user_input = get_text() |
|
|
| submit = st.button("Generate") |
|
|
| |
| if submit and user_input: |
| with st.spinner(f"Asking {provider}β¦"): |
| try: |
| response = load_answer(provider, user_input) |
| st.subheader("Answer:") |
| st.write(response) |
| except Exception as e: |
| log.exception("ERROR during load_answer") |
| st.error(f"{type(e).__name__}: {e}") |
| elif submit: |
| st.warning("Please enter a question first.") |
|
|