Spaces:
Running
Running
import gradio as gr | |
import requests | |
import subprocess | |
import time | |
import json | |
from ollama import chat | |
from ollama import ChatResponse | |
def start_ollama_server(): | |
# Start Ollama server in the background | |
print("Starting Ollama server...") | |
subprocess.Popen(["ollama", "serve"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
time.sleep(5) # Give some time for the server to start | |
# Pull the required model | |
print("Pulling the required model...") | |
subprocess.run(["ollama", "pull", "llama3.2:1b"], check=True) | |
print("Pulling the required model...") | |
subprocess.Popen(["ollama", "run", "llama3.2:1b"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
print("Ollama started model.") | |
# Function to send a prompt to the Ollama server and return the response | |
def ask_ollama(question): | |
# url = "http://localhost:11434/api/generate" | |
# headers = {"Content-Type": "application/json"} | |
# data = { | |
# "model": "llama3.1", | |
# "prompt": prompt, | |
# "format": "json", | |
# "stream": False | |
# } | |
# try: | |
# # Send the POST request to the API | |
# response = requests.post(url, headers=headers, json=data) | |
# response.raise_for_status() # Raise an exception for HTTP errors | |
# result = response.json() # Parse the JSON response | |
# | |
# # Extract and clean the "response" field | |
# actual_response = result.get("response", "").strip() | |
# print(actual_response) | |
# return actual_response if actual_response else "No response found" | |
# except requests.exceptions.RequestException as e: | |
# return f"Error: {str(e)}" | |
prompt_template = f""" | |
### You are an expert in the subreddit r/AmItheAsshole. | |
### The task for you is to classify the given text content as YTA or NTA label and give an explanation for the same. | |
### The output format is as follows: | |
"YTA" or "NTA", explanation for the label. | |
### Input Text : {question} | |
""" | |
response: ChatResponse = chat(model='llama3.2:1b', messages=[ | |
{ | |
'role': 'user', | |
'content': prompt_template, | |
}, | |
]) | |
print(response['message']['content']) | |
# or access fields directly from the response object | |
return response['message']['content'] | |
# Gradio Interface | |
def gradio_interface(prompt): | |
return ask_ollama(prompt) | |
# Build the Gradio app | |
with gr.Blocks() as demo: | |
gr.Markdown("# Ollama Server Interface") | |
gr.Markdown("Ask questions and get responses from the Ollama server.") | |
with gr.Row(): | |
input_prompt = gr.Textbox(label="Enter your question", placeholder="Type your question here...") | |
with gr.Row(): | |
submit_button = gr.Button("Ask") | |
with gr.Row(): | |
output_response = gr.Textbox(label="Response", lines=10) | |
submit_button.click(gradio_interface, inputs=input_prompt, outputs=output_response) | |
# Launch the app | |
if __name__ == "__main__": | |
start_ollama_server() | |
demo.launch(server_name="0.0.0.0", server_port=7860, share=True) | |