purellm / app.py
alexander-hm
Add application files
59cb708
# app_pure_llm.py
import os
import re
import gradio as gr
import openai
from openai import OpenAI
from langchain.text_splitter import CharacterTextSplitter
from sentence_transformers import SentenceTransformer
DARTMOUTH_CHAT_API_KEY = os.getenv('DARTMOUTH_CHAT_API_KEY')
if DARTMOUTH_CHAT_API_KEY is None:
raise ValueError("DARTMOUTH_CHAT_API_KEY not set.")
MODEL = "openai.gpt-4o-2024-08-06"
client = OpenAI(
base_url="https://chat.dartmouth.edu/api", # Replace with your endpoint URL
api_key=DARTMOUTH_CHAT_API_KEY, # Replace with your API key, if required
)
# --- Load and Prepare Data ---
# (Even if not used by the pure LLM function, we load the file to maintain consistency.)
with open("gen_agents.txt", "r", encoding="utf-8") as f:
full_text = f.read()
text_splitter = CharacterTextSplitter(separator="\n\n", chunk_size=512, chunk_overlap=20)
docs = text_splitter.create_documents([full_text])
# You might not need passages for the pure LLM output, but we'll load them for completeness.
passages = [doc.page_content for doc in docs]
# --- Provided Function for Pure LLM ---
def generate_plain_answer(query):
"""
Generate an answer using GPT-4 without additional context.
"""
messages = [
{"role": "system", "content": "You are a knowledgeable teaching assistant."},
{"role": "user", "content": f"Answer the question: {query}"}
]
response = client.chat.completions.create(
model=MODEL,
messages=messages,
)
answer = response.choices[0].message.content.strip()
return answer
# --- Gradio App Function ---
def get_pure_llm_output(query):
answer = generate_plain_answer(query)
return f"<div style='white-space: pre-wrap;'>{answer}</div>"
def clear_output():
return ""
# --- Custom CSS ---
custom_css = """
body {
background-color: #343541 !important;
color: #ECECEC !important;
margin: 0;
padding: 0;
font-family: 'Inter', sans-serif;
}
#container {
max-width: 900px;
margin: 0 auto;
padding: 20px;
}
label {
color: #ECECEC;
font-weight: 600;
}
textarea, input {
background-color: #40414F;
color: #ECECEC;
border: 1px solid #565869;
}
button {
background-color: #565869;
color: #ECECEC;
border: none;
font-weight: 600;
transition: background-color 0.2s ease;
}
button:hover {
background-color: #6e7283;
}
.output-box {
border: 1px solid #565869;
border-radius: 4px;
padding: 10px;
margin-top: 8px;
background-color: #40414F;
}
"""
# --- Build Gradio Interface ---
with gr.Blocks(css=custom_css) as demo:
with gr.Column(elem_id="container"):
gr.Markdown("## Anonymous Chatbot\n### Loaded Article: Generative Agents - Interactive Simulacra of Human Behavior (Park et al. 2023)\n [https://arxiv.org/pdf/2304.03442](https://arxiv.org/pdf/2304.03442)")
gr.Markdown("Enter any questions about the article above in the prompt!")
query_input = gr.Textbox(label="Query", placeholder="Enter your query here...", lines=1)
with gr.Column():
submit_button = gr.Button("Submit")
clear_button = gr.Button("Clear")
output_box = gr.HTML(label="Output", elem_classes="output-box")
submit_button.click(fn=get_pure_llm_output, inputs=query_input, outputs=output_box)
clear_button.click(fn=clear_output, inputs=[], outputs=output_box)
demo.launch()