File size: 2,783 Bytes
21dcf96 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 9c87a30 0d93ed3 21dcf96 0d93ed3 21dcf96 0d93ed3 21dcf96 0d93ed3 21dcf96 0d93ed3 21dcf96 0d93ed3 21dcf96 9c87a30 0d93ed3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 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() |