Views
No views yet
1from llama_cpp import Llama
2import llama_cpp
3
4# model load
5base_model = "qwen3-8b"
6quant = "Q4_K_M"
7llm = Llama.from_pretrained(
8 repo_id=f"kishida/sui-lang-{base_model}",
9 filename=f"sui-lang-{base_model}.{quant}.gguf",
10 seed=4321,
11 n_ctx=2048,
12 n_gpu_layers=-1,
13)
14
15lang_spec = """
16## Sui言語仕様
17
18Suiは純粋なロジック言語。1行1命令、識別子は連番のみ。
19
20### 命令
21= VAR VAL 代入
22+ R A B 加算 (R = A + B)
23- R A B 減算
24* R A B 乗算
25/ R A B 除算
26% R A B 剰余
27< R A B 小なり (R = 1 if A < B else 0)
28> R A B 大なり
29~ R A B 等価
30! R A NOT
31& R A B AND
32| R A B OR
33? COND LABEL 条件ジャンプ(LABELは整数のみ)
34@ LABEL 無条件ジャンプ(LABELは整数のみ)
35: LABEL ラベル定義(LABELは整数のみ)
36# ID ARGC { 関数定義
37} 関数終了
38$ R FN ARGS... 関数呼び出し
39^ VAL return
40[ VAR SIZE 配列作成
41] R ARR IDX 配列読み取り
42{ ARR IDX VAL 配列書き込み
43. VAL 出力
44, VAR 入力
45; COMMENT コメント
46
47### 変数
48v0, v1, v2... ローカル変数
49g0, g1, g2... グローバル変数(状態、UIからアクセス可能)
50a0, a1, a2... 関数引数
51
52### ラベル(重要)
53- **LABELは必ず整数**(例: `0`, `1`, `2`)
54- `: start_label` のような **文字列ラベルは禁止**
55
56### 例
57
58```sui
59; 与えられた整数を3倍する
60# 0 1 {
61 * v0 a0 3
62 ^ v0
63}
64```
65
66```sui
67; Print 1 to 10
68= v0 1
69: 0
70> v1 v0 10
71? v1 1
72. v0
73+ v0 v0 1
74@ 0
75: 1
76```
77
78### 注意
79コメントは ; で始める。#でのコメントは禁止
80"""
81
82system_prompt = """あなたはSui言語を使ったアプリケーション開発者です。
83ユーザーに与えられた課題をSui言語の命令で実装してください。
84実装のみを出力してください。
85
86Sui言語の仕様は次のとおり
87
88{}
89""".format(lang_spec)
90
91
92# streaming
93def chat(msg):
94 print(msg)
95 res = llm.create_chat_completion(
96 messages=[
97 {"role": "system", "content": system_prompt},
98 {"role": "user", "content": msg},
99 ],
100 temperature=0.7,
101 )
102 return res["choices"][0]["message"]["content"]
103
104template = """/nothink
105次の仕様を満たす{}を実装してください。
106仕様:{}
107"""
108
109problem = "整数A,B,Cの最大値を返す。"
110
111print("sui-lang")
112print(problem)
113print(chat(template.format("3引数関数", problem)))
114"""
115# 0 3 {
116 ; Compare A and B
117 > v0 a0 a1
118 ? v0 2
119 ; A > B, compare A and C
120 > v0 a0 a2
121 ? v0 3
122 ; A > C, compare B and C
123 > v0 a1 a2
124 ? v0 4
125 ; B > C, return C
126 ^ a2
127 ; A > B, A > C, B > C, return C
128 ^ a2
129}
130"""
131# それっぽいけど正しくはない