Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
import os
|
2 |
import gradio as gr
|
3 |
-
from
|
4 |
|
5 |
# ----------------------------------------------------------------------
|
6 |
# Helper to read a secret (fallback is useful when you run locally)
|
@@ -16,66 +16,57 @@ def _secret(key: str, fallback: str = "") -> str:
|
|
16 |
def respond(
|
17 |
message: str,
|
18 |
history: list[dict[str, str]],
|
19 |
-
# max_tokens: int,
|
20 |
-
# temperature: float,
|
21 |
-
# top_p: float,
|
22 |
model_name: str,
|
23 |
):
|
24 |
"""
|
25 |
-
Generate a response using
|
26 |
-
|
27 |
* System prompt = secret `prec_chat`
|
28 |
-
*
|
29 |
"""
|
30 |
-
# 1οΈβ£
|
31 |
-
system_message = _secret("prec_chat", "You are a helpful assistant.")
|
32 |
|
33 |
-
# 2οΈβ£
|
34 |
-
|
35 |
-
if not
|
36 |
raise RuntimeError(
|
37 |
-
"
|
38 |
)
|
39 |
|
40 |
-
# 3οΈβ£
|
41 |
-
client =
|
|
|
|
|
|
|
42 |
|
43 |
-
# 4οΈβ£
|
44 |
-
messages = [
|
45 |
messages.extend(history) # previous conversation turns
|
46 |
messages.append({"role": "user", "content": message}) # current user query
|
47 |
|
48 |
-
# 5οΈβ£
|
49 |
response = ""
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
max_tokens
|
54 |
stream=True
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
response += token
|
63 |
-
yield response
|
64 |
|
65 |
|
66 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
67 |
-
#
|
68 |
-
# Add new model IDs to this list whenever you want to make them
|
69 |
-
# selectable β no other code changes are required.
|
70 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
71 |
AVAILABLE_MODELS = [
|
72 |
-
|
73 |
-
|
74 |
-
# "Qwen/Qwen3-4B-Thinking-2507",
|
75 |
-
# "Qwen/Qwen3-30B-A3B-Thinking-2507",
|
76 |
-
# "openai/gpt-oss-120b",
|
77 |
-
# "Qwen/Qwen3-235B-A22B-Thinking-2507"
|
78 |
-
] # β add more strings here (e.g. "openai/gpt-oss-350b")
|
79 |
|
80 |
# ----------------------------------------------------------------------
|
81 |
# UI β the systemβprompt textbox has been removed.
|
@@ -83,24 +74,14 @@ AVAILABLE_MODELS = [
|
|
83 |
chatbot = gr.ChatInterface(
|
84 |
respond,
|
85 |
type="messages",
|
86 |
-
additional_inputs=[
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
# gr.Slider(minimum=1, maximum=8096, value=512, step=1, label="Max new tokens"),
|
95 |
-
# gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
|
96 |
-
# gr.Slider(
|
97 |
-
# minimum=0.1,
|
98 |
-
# maximum=1.0,
|
99 |
-
# value=0.95,
|
100 |
-
# step=0.05,
|
101 |
-
# label="Topβp (nucleus sampling)",
|
102 |
-
# ),
|
103 |
-
],
|
104 |
)
|
105 |
|
106 |
# ----------------------------------------------------------------------
|
@@ -115,7 +96,7 @@ with gr.Blocks() as demo:
|
|
115 |
# ----------------------------------------------------------------------
|
116 |
if __name__ == "__main__":
|
117 |
# ------------------------------------------------------------------
|
118 |
-
# 1οΈβ£
|
119 |
# ------------------------------------------------------------------
|
120 |
allowed_user = _secret("CHAT_USER")
|
121 |
allowed_pass = _secret("CHAT_PASS")
|
@@ -127,7 +108,7 @@ if __name__ == "__main__":
|
|
127 |
)
|
128 |
|
129 |
# ------------------------------------------------------------------
|
130 |
-
# 2οΈβ£
|
131 |
# ------------------------------------------------------------------
|
132 |
demo.launch(
|
133 |
auth=(allowed_user, allowed_pass), # <-- Gradio's builtβin basic auth
|
|
|
1 |
import os
|
2 |
import gradio as gr
|
3 |
+
from openai import OpenAI
|
4 |
|
5 |
# ----------------------------------------------------------------------
|
6 |
# Helper to read a secret (fallback is useful when you run locally)
|
|
|
16 |
def respond(
|
17 |
message: str,
|
18 |
history: list[dict[str, str]],
|
|
|
|
|
|
|
19 |
model_name: str,
|
20 |
):
|
21 |
"""
|
22 |
+
Generate a response using OpenRouter API via OpenAI client.
|
23 |
+
|
24 |
* System prompt = secret `prec_chat`
|
25 |
+
* OpenRouter API key = secret `OPENROUTER_API_KEY`
|
26 |
"""
|
27 |
+
# 1οΈβ£ Load the system prompt (fallback = generic assistant)
|
28 |
+
# system_message = _secret("prec_chat", "You are a helpful assistant.")
|
29 |
|
30 |
+
# 2οΈβ£ Load the OpenRouter API key
|
31 |
+
openrouter_api_key = _secret("OPENROUTER_API_KEY")
|
32 |
+
if not openrouter_api_key:
|
33 |
raise RuntimeError(
|
34 |
+
"OPENROUTER_API_KEY not found in secrets. Add it to secrets.toml (or via the Space UI)."
|
35 |
)
|
36 |
|
37 |
+
# 3οΈβ£ Initialize OpenAI client with OpenRouter configuration
|
38 |
+
client = OpenAI(
|
39 |
+
base_url="https://openrouter.ai/api/v1",
|
40 |
+
api_key=openrouter_api_key,
|
41 |
+
)
|
42 |
|
43 |
+
# 4οΈβ£ Build the message list for the chat completion
|
44 |
+
messages = []
|
45 |
messages.extend(history) # previous conversation turns
|
46 |
messages.append({"role": "user", "content": message}) # current user query
|
47 |
|
48 |
+
# 5οΈβ£ Stream the response back to the UI
|
49 |
response = ""
|
50 |
+
stream = client.chat.completions.create(
|
51 |
+
model=model_name,
|
52 |
+
messages=messages,
|
53 |
+
max_tokens=8096,
|
54 |
stream=True
|
55 |
+
)
|
56 |
+
|
57 |
+
for chunk in stream:
|
58 |
+
if chunk.choices[0].delta.content is not None:
|
59 |
+
token = chunk.choices[0].delta.content
|
60 |
+
response += token
|
61 |
+
yield response
|
|
|
|
|
62 |
|
63 |
|
64 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
65 |
+
# List of models available through OpenRouter
|
|
|
|
|
66 |
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
67 |
AVAILABLE_MODELS = [
|
68 |
+
"@preset/precise-chat-agent"
|
69 |
+
]
|
|
|
|
|
|
|
|
|
|
|
70 |
|
71 |
# ----------------------------------------------------------------------
|
72 |
# UI β the systemβprompt textbox has been removed.
|
|
|
74 |
chatbot = gr.ChatInterface(
|
75 |
respond,
|
76 |
type="messages",
|
77 |
+
# additional_inputs=[
|
78 |
+
# gr.Dropdown(
|
79 |
+
# choices=AVAILABLE_MODELS,
|
80 |
+
# value=AVAILABLE_MODELS[0],
|
81 |
+
# label="Model",
|
82 |
+
# interactive=True,
|
83 |
+
# ),
|
84 |
+
# ],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
)
|
86 |
|
87 |
# ----------------------------------------------------------------------
|
|
|
96 |
# ----------------------------------------------------------------------
|
97 |
if __name__ == "__main__":
|
98 |
# ------------------------------------------------------------------
|
99 |
+
# 1οΈβ£ Pull the allowed credentials from secrets (fail fast if missing)
|
100 |
# ------------------------------------------------------------------
|
101 |
allowed_user = _secret("CHAT_USER")
|
102 |
allowed_pass = _secret("CHAT_PASS")
|
|
|
108 |
)
|
109 |
|
110 |
# ------------------------------------------------------------------
|
111 |
+
# 2οΈβ£ Launch
|
112 |
# ------------------------------------------------------------------
|
113 |
demo.launch(
|
114 |
auth=(allowed_user, allowed_pass), # <-- Gradio's builtβin basic auth
|