API / app.py
Reality123b's picture
Update app.py
caf6b1d verified
raw
history blame
4.18 kB
import os
import gradio as gr
from huggingface_hub import InferenceClient
from PIL import Image
class XylariaChat:
def __init__(self):
# Securely load HuggingFace token
self.hf_token = os.getenv("HF_TOKEN")
if not self.hf_token:
raise ValueError("HuggingFace token not found in environment variables")
# Initialize the inference clients
self.chat_client = InferenceClient(
model="Qwen/QwQ-32B-Preview",
api_key=self.hf_token
)
self.image_client = InferenceClient(
model="SG161222/RealVisXL_V4.0",
api_key=self.hf_token
)
# Initialize conversation history and persistent memory
self.conversation_history = []
self.persistent_memory = {}
def get_response(self, user_input):
"""Get text-based response from the model."""
messages = [
{"role": "system", "content": "Your name is Xylaria 1.4 Senoa, an advanced ai model developed by sk md saad amin"},
*self.conversation_history,
{"role": "user", "content": user_input}
]
try:
response_stream = self.chat_client.chat.completions.create(
messages=messages,
temperature=0.5,
max_tokens=10240,
top_p=0.7,
stream=True
)
return response_stream
except Exception as e:
return f"Error generating response: {str(e)}"
def generate_image(self, prompt):
"""Generate image based on prompt."""
try:
# Create an image from the prompt
image = self.image_client.text_to_image(prompt)
return image
except Exception as e:
return f"Error generating image: {str(e)}"
def create_interface(self):
def streaming_response(message, chat_history):
"""Handle text response streaming."""
response_stream = self.get_response(message)
if isinstance(response_stream, str):
return "", chat_history + [[message, response_stream]]
full_response = ""
updated_history = chat_history + [[message, ""]]
for chunk in response_stream:
if chunk.choices[0].delta.content:
full_response += chunk.choices[0].delta.content
updated_history[-1][1] = full_response
yield "", updated_history
self.conversation_history.append({"role": "user", "content": message})
self.conversation_history.append({"role": "assistant", "content": full_response})
if len(self.conversation_history) > 10:
self.conversation_history = self.conversation_history[-10:]
def generate_image_response(prompt):
"""Handle image generation."""
if not prompt.strip():
return None
return self.generate_image(prompt)
with gr.Blocks() as demo:
chatbot = gr.Chatbot(label="Xylaria 1.4 Senoa", height=500)
with gr.Row():
txt = gr.Textbox(show_label=False, placeholder="Type your message...", scale=8)
send_btn = gr.Button("💬", scale=1)
img_btn = gr.Button("🖼️", scale=1)
clear_btn = gr.Button("Clear Conversation")
clear_memory_btn = gr.Button("Clear Memory")
send_btn.click(fn=streaming_response, inputs=[txt, chatbot], outputs=[txt, chatbot])
txt.submit(fn=streaming_response, inputs=[txt, chatbot], outputs=[txt, chatbot])
img_btn.click(fn=generate_image_response, inputs=txt, outputs=chatbot)
clear_btn.click(fn=lambda: None, inputs=None, outputs=chatbot)
clear_memory_btn.click(fn=lambda: None, inputs=None, outputs=[])
return demo
# Launch the interface
def main():
chat = XylariaChat()
interface = chat.create_interface()
interface.launch(share=True, debug=True)
if __name__ == "__main__":
main()