eaglelandsonce's picture
Update app.py
0d93ed3 verified
import gradio as gr
import requests
import json
def _normalize_endpoint(endpoint: str) -> str:
endpoint = (endpoint or "").strip()
return endpoint[:-1] if endpoint.endswith("/") else endpoint
def _azure_chat_completions(endpoint, api_key, model, messages, temperature=0.7, max_tokens=600, timeout=60):
endpoint = _normalize_endpoint(endpoint)
url = f"{endpoint}/openai/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"api-key": api_key.strip(),
}
payload = {
"model": model.strip(),
"messages": messages,
"temperature": float(temperature),
"max_tokens": int(max_tokens),
}
r = requests.post(url, headers=headers, json=payload, timeout=timeout)
r.raise_for_status()
return r.json()
def handle_message(message, history, endpoint, api_key, model, system_prompt, temperature, max_tokens):
# history is list of [user, assistant] pairs
messages = []
if system_prompt and system_prompt.strip():
messages.append({"role": "system", "content": system_prompt.strip()})
for u, a in history:
if u:
messages.append({"role": "user", "content": u})
if a:
messages.append({"role": "assistant", "content": a})
messages.append({"role": "user", "content": message})
if not endpoint or not api_key or not model:
return "Please provide Endpoint, API Key, and Model."
try:
data = _azure_chat_completions(
endpoint=endpoint,
api_key=api_key,
model=model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
)
return data["choices"][0]["message"]["content"]
except requests.HTTPError as e:
try:
err_json = e.response.json()
return f"HTTP {e.response.status_code}: {json.dumps(err_json, indent=2)}"
except Exception:
return f"HTTP error: {str(e)}"
except Exception as e:
return f"Error: {str(e)}"
demo = gr.ChatInterface(
fn=handle_message,
additional_inputs=[
gr.Textbox(label="Azure OpenAI Endpoint", placeholder="https://ai-hubXXXX.openai.azure.com"),
gr.Textbox(label="API Key", placeholder="paste your key here", type="password"),
gr.Textbox(label="Model (or deployment name)", placeholder="e.g., gpt-4o-mini"),
gr.Textbox(label="System prompt (optional)", value="You are a helpful assistant."),
gr.Slider(0.0, 1.5, value=0.7, step=0.1, label="Temperature"),
gr.Slider(50, 2000, value=600, step=50, label="Max tokens"),
],
title="Azure OpenAI Chat Completion",
description="Enter your Azure OpenAI endpoint + key, then chat.",
)
demo.launch()