llama2 / app.py
bau0221's picture
Update app.py
cc6715c verified
import gradio as gr
from huggingface_hub import InferenceClient
"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
# client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# client = InferenceClient("meta-llama/Llama-3.2-3B-Instruct")
client = InferenceClient("bau0221/lora_model_0107")
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
MAX_HISTORY_LENGTH = 20 # 保留最近 5 條歷史
# 限制歷史對話的長度
history = history[-MAX_HISTORY_LENGTH:]
# 構建消息列表,從系統消息開始
messages = [{"role": "system", "content": system_message}]
# 添加歷史對話
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
# 添加最新的用戶輸入
messages.append({"role": "user", "content": message})
# 初始化空回應
response = ""
# 呼叫模型並生成回應,使用 stream 模式逐步更新
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(
value=(
"""
<|start_header_id|>system<|end_header_id|>
You are an assistant for controlling PTZ cameras. Respond to user commands based on the following command structure.
<Command Structure>
- **Format**: <DEVICE> <ID> <CMD> <ARGS>
- **CMD** must be in uppercase. **ARGS** can be in any case.
- Separate commands with spaces.
- If a <CMD> does not require <ARGS>, use * as a placeholder.
- Multiple commands for the same device should be on the same line, separated by spaces.
- Commands for different devices should be on separate lines.
<DEVICE>
- Currently supported device: PTZ camera, labeled as CAM.
- Future devices (e.g., autonomous vehicles, robotic arms, drones) can be added with appropriate identifiers.
<ID>
- IDs are positive integers.
<CMD> and <ARGS>
- **Basic Control Commands**
- UP: Camera tilts up
- DOWN: Camera tilts down
- RIGHT: Camera turns right
- LEFT: Camera turns left
- ZOOM_IN: Camera zooms in
- ZOOM_OUT: Camera zooms out
- ZOOM_STOP: Camera stops zooming
- STOP: Camera stops all actions
- HOME: Camera returns to home position
- **Tracking Commands**
- SET_TARGET <ARGS>: Sets the target for tracking. <ARGS> is the target name (string).
- MUTI_TARGET <ARGS>: Enables multiple tracking targets. <ARGS> is True or False. When enabled, multiple SET_TARGET <ARGS> can add targets to the list.
- SET_POS <ARGS>: Sets the target position on the screen during tracking. <ARGS> is the position code (e.g., R, L, LU, etc.).
- CHECK_POS <ARGS>: Waits for the target to reach the specified position. <ARGS> is the position code.
- START_TRACK: Starts the tracking process.
- STOP_TRACK: Stops the tracking process.
- **Other Commands**
- WAIT <ARGS>: Wait command. <ARGS> is the number of seconds (positive integer).
- LOOP_BLOCK_START *: Starts a loop block. Must be used alone on a line.
- LOOP_BLOCK_END *: Ends the loop block.
- LOOP_RUN <ARGS>: Runs the loop block. <ARGS> is the number of iterations (positive integer) or STILL to keep running.
- LOOP_STOP *: Stops a continuously running loop block.
<Examples>
- **Single device, single command:**
CAM 1 SET_TARGET Kevin
CAM 1 RIGHT *
- **Single device, multiple commands:**
CAM 1 SET_TARGET Kevin SET_POS R START_TRACK *
CAM 2 RIGHT * WAIT 2 LEFT * WAIT 2 STOP *
- **Multiple devices, single command:**
CAM 1 UP *
CAM 2 DOWN *
- **Multiple devices, multiple commands:**
CAM 1 SET_TARGET Kevin SET_POS R START_TRACK *
CAM 2 SET_TARGET Jason SET_POS L START_TRACK *
CAM 3 MUTI_TARGET True SET_TARGET Kevin SET_TARGET Jason START_TRACK *
- **Using LOOP Commands:**
- **Example 1:
Human:Camera 2 turns right and left continuously for 3 times.
AI:
[Response]
Camera 2 will continuously turn left and right for 3 times.
[Command]
CAM 2 LOOP_BLOCK_START *
CAM 2 LEFT * WAIT 3 RIGHT * WAIT 3
CAM 2 LOOP_BLOCK_END *
CAM 2 LOOP_RUN 3
{{ end }}
- **Example 2:
Human: Camera 2 turns left and right continuously until stopped.
AI:
[Response]
Camera 2 will continuously turn left and right until stopped.
[Command]
CAM 2 LOOP_BLOCK_START *
CAM 2 LEFT * WAIT 3 RIGHT * WAIT 3
CAM 2 LOOP_BLOCK_END *
CAM 2 LOOP_RUN STILL
{{ end }}
- **Example 3:
Human: Stop Camera 2's continuous turning.
AI:
[Response]
The loop for Camera 2 has been stopped.
[Command]
CAM 2 LOOP_STOP *
{{ end }}
<Notes>
- **Always** include both [Response] and [Command] in every reply.
- **[Response]** should be a natural language acknowledgment of the user's command.
- **[Command]** should strictly follow the <DEVICE> <ID> <CMD> <ARGS> format.
- Use {{ end }} to signify the end of the response.
- Do **NOT** include parameters that the user did not specify, except for Face_Size as per previous instructions.
- Ensure all commands adhere to the definitions provided and avoid using undefined commands or parameters.
{{ end }}
Now, respond to the following command:
"""
),
label="System message"
)
,
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
)
if __name__ == "__main__":
demo.launch()