first commit
This commit is contained in:
commit
9ffef462dd
|
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python3
|
||||
# extract_chat_template.py —— 最终版
|
||||
#
|
||||
# 用法示例:
|
||||
# # 只导出原模板
|
||||
# python extract_chat_template.py Qwen3-32B/tokenizer_config.json \
|
||||
# -o Qwen3-32B/chat_template.jinja
|
||||
#
|
||||
# # 同时导出“无 <think>”版本
|
||||
# python extract_chat_template.py Qwen3-32B/tokenizer_config.json \
|
||||
# -o Qwen3-32B/chat_template.jinja \
|
||||
# --no-think \
|
||||
# -n Qwen3-32B/chat_template_nothink.jinja
|
||||
#
|
||||
# # -o/-n 若省略,就写到当前目录:chat_template.jinja / chat_template_nothink.jinja
|
||||
|
||||
import argparse, json, re, sys
|
||||
from pathlib import Path
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("config", type=Path, help="tokenizer_config.json 路径")
|
||||
p.add_argument("-o", "--output", type=Path,
|
||||
default=Path("chat_template.jinja"),
|
||||
help="原始模板输出文件(默认 chat_template.jinja)")
|
||||
p.add_argument("--no-think", action="store_true",
|
||||
help="额外生成去掉 <think> 块的模板")
|
||||
p.add_argument("-n", "--no-think-out", type=Path,
|
||||
help="无 <think> 模板输出文件(默认 chat_template_nothink.jinja)")
|
||||
args = p.parse_args()
|
||||
|
||||
try:
|
||||
tpl = json.loads(args.config.read_text(encoding="utf-8"))["chat_template"]
|
||||
except Exception as e:
|
||||
sys.exit(f"❌ 读取失败:{e}")
|
||||
|
||||
# 写原始模板
|
||||
args.output.write_text(tpl, encoding="utf-8")
|
||||
print(f"✅ 原模板 → {args.output.resolve()}")
|
||||
|
||||
# 写无思考模板(可选)
|
||||
if args.no_think:
|
||||
nt_path = args.no_think_out or Path("chat_template_nothink.jinja")
|
||||
nt_path.write_text(re.sub(r"<think>.*?</think>", "", tpl, flags=re.S),
|
||||
encoding="utf-8")
|
||||
print(f"✅ 无 <think> 模板 → {nt_path.resolve()}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# ① 只导出原始模板
|
||||
python extract_chat_template.py Qwen3-32B/tokenizer_config.json \
|
||||
-o Qwen3-32B/chat_template.jinja
|
||||
|
||||
# ② 同时导出“无 <think>”版本
|
||||
python extract_chat_template.py Qwen3-32B/tokenizer_config.json \
|
||||
-o Qwen3-32B/chat_template.jinja \
|
||||
--no-think \
|
||||
-n Qwen3-32B/chat_template_nothink.jinja
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func getSupabaseURL() string {
|
||||
// 获取默认网关 IP
|
||||
gatewayIP, err := getDefaultGateway()
|
||||
if err != nil {
|
||||
fmt.Println("⚠️ 获取默认网关失败,使用 fallback:", err)
|
||||
return "http://localhost:8000"
|
||||
}
|
||||
|
||||
// 获取所有本地网卡 IP 和子网
|
||||
ifaces, err := net.Interfaces()
|
||||
if err != nil {
|
||||
fmt.Println("⚠️ 获取本地接口失败:", err)
|
||||
return "http://localhost:8000"
|
||||
}
|
||||
|
||||
for _, iface := range ifaces {
|
||||
if (iface.Flags&net.FlagUp == 0) || (iface.Flags&net.FlagLoopback != 0) {
|
||||
continue // 跳过不活跃或loopback接口
|
||||
}
|
||||
|
||||
addrs, err := iface.Addrs()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, addr := range addrs {
|
||||
ipNet, ok := addr.(*net.IPNet)
|
||||
if !ok || ipNet.IP.To4() == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// 检查网关是否在这个接口的子网中
|
||||
if ipNet.Contains(gatewayIP) {
|
||||
// 找到同网段的IP
|
||||
return fmt.Sprintf("http://%s:8000", ipNet.IP.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果没有匹配的网段,使用 fallback
|
||||
return "http://localhost:8000"
|
||||
}
|
||||
|
||||
func getDefaultGateway() (net.IP, error) {
|
||||
// 调用 Linux 命令获取默认路由
|
||||
cmd := exec.Command("ip", "route", "show", "default")
|
||||
var out bytes.Buffer
|
||||
cmd.Stdout = &out
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lines := strings.Split(out.String(), "\n")
|
||||
for _, line := range lines {
|
||||
if strings.HasPrefix(line, "default") {
|
||||
fields := strings.Fields(line)
|
||||
for i, f := range fields {
|
||||
if f == "via" && i+1 < len(fields) {
|
||||
return net.ParseIP(fields[i+1]), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("default gateway not found")
|
||||
}
|
||||
|
||||
func main() {
|
||||
supabaseURL := getSupabaseURL()
|
||||
fmt.Printf("\"SUPABASE_URL\": \"%s\"\n", supabaseURL)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue