|
import gradio as gr
|
|
import requests
|
|
|
|
|
|
BASE_URL = "http://localhost:1234/api/v0"
|
|
|
|
|
|
def chat_with_lmstudio(messages):
|
|
url = f"{BASE_URL}/chat/completions"
|
|
payload = {
|
|
"model": "granite-3.0-2b-instruct",
|
|
"messages": messages,
|
|
"temperature": 0.7,
|
|
"max_tokens": 1024,
|
|
"stream": False
|
|
}
|
|
response = requests.post(url, json=payload)
|
|
response.raise_for_status()
|
|
response_data = response.json()
|
|
return response_data['choices'][0]['message']['content']
|
|
|
|
|
|
def get_text_completion(prompt):
|
|
url = f"{BASE_URL}/completions"
|
|
payload = {
|
|
"model": "granite-3.0-2b-instruct",
|
|
"prompt": prompt,
|
|
"temperature": 0.7,
|
|
"max_tokens": 100,
|
|
"stream": False
|
|
}
|
|
response = requests.post(url, json=payload)
|
|
response.raise_for_status()
|
|
response_data = response.json()
|
|
return response_data['choices'][0]['text']
|
|
|
|
|
|
def get_text_embedding(text):
|
|
url = f"{BASE_URL}/embeddings"
|
|
payload = {
|
|
"model": "text-embedding-nomic-embed-text-v1.5",
|
|
"input": text
|
|
}
|
|
response = requests.post(url, json=payload)
|
|
response.raise_for_status()
|
|
response_data = response.json()
|
|
return response_data['data'][0]['embedding']
|
|
|
|
|
|
def gradio_chat_interface():
|
|
def chat_interface(user_input, history):
|
|
|
|
messages = []
|
|
for user_msg, assistant_msg in history:
|
|
messages.append({"role": "user", "content": user_msg})
|
|
messages.append({"role": "assistant", "content": assistant_msg})
|
|
messages.append({"role": "user", "content": user_input})
|
|
|
|
|
|
response = chat_with_lmstudio(messages)
|
|
|
|
|
|
history.append((user_input, response))
|
|
return history, history
|
|
|
|
chat_interface = gr.ChatInterface(chat_interface, type='messages')
|
|
chat_interface.launch(share=True)
|
|
|
|
|
|
def gradio_text_completion():
|
|
gr.Interface(
|
|
fn=get_text_completion,
|
|
inputs="text",
|
|
outputs="text",
|
|
title="Text Completion with LM Studio"
|
|
).launch(share=True)
|
|
|
|
|
|
def gradio_text_embedding():
|
|
gr.Interface(
|
|
fn=get_text_embedding,
|
|
inputs="text",
|
|
outputs="text",
|
|
title="Text Embedding with LM Studio"
|
|
).launch(share=True)
|
|
|
|
|
|
def main():
|
|
with gr.Blocks() as demo:
|
|
gr.Markdown("""
|
|
# LM Studio API Interface
|
|
Choose which function you want to use with LM Studio:
|
|
""")
|
|
|
|
with gr.Row():
|
|
gr.Button("Chat with Model").click(gradio_chat_interface)
|
|
gr.Button("Text Completion").click(gradio_text_completion)
|
|
gr.Button("Text Embedding").click(gradio_text_embedding)
|
|
|
|
demo.launch(share=True)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|