File size: 5,832 Bytes
8dee814
f8f65ab
8dee814
 
 
 
 
 
 
 
 
 
 
5dfd0a9
8dee814
 
f8f65ab
28d818b
 
 
f8f65ab
 
 
 
28d818b
 
 
8dee814
28d818b
 
8dee814
 
 
f8f65ab
 
 
8dee814
 
 
f8f65ab
8dee814
 
f8f65ab
 
 
 
 
 
8dee814
f8f65ab
8dee814
 
 
28d818b
8dee814
 
f8f65ab
 
28d818b
8dee814
28d818b
 
8dee814
 
 
f8f65ab
8dee814
f8f65ab
8dee814
 
 
 
 
 
 
 
28d818b
8dee814
28d818b
 
 
f8f65ab
 
28d818b
f8f65ab
 
 
 
 
 
 
 
8dee814
f8f65ab
8dee814
28d818b
 
8dee814
 
 
 
 
 
 
f8f65ab
8dee814
 
 
 
 
28d818b
 
 
 
 
 
 
8dee814
f8f65ab
8dee814
 
f8f65ab
8dee814
f8f65ab
 
8dee814
 
f8f65ab
8dee814
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# ======================================================================
# AXIS: Advanced Cross-Integrated System (V1.3 - Deep Lattice)
# Copyright (c) 2025 AXIS Project. All rights reserved.
# Licensed under APSL v1.0 (Non-Commercial / No-Redistribution)
# ======================================================================

import json, torch, gc, os, sys, re, warnings, time, uuid
from flask import Flask, render_template, request, jsonify
from transformers import AutoTokenizer, AutoModelForCausalLM

warnings.filterwarnings("ignore")
app = Flask(__name__)

MODEL_ID = "kofdai/AXIS-Sovereign-Logic-Engine"
SYSTEM_NAME = "AXIS: Advanced Cross-Integrated System"

LICENSE_TERMS = """
======================================================================
[AXIS PROPRIETARY SOURCE-AVAILABLE LICENSE (APSL) v1.0]
----------------------------------------------------------------------
1. 商用利用の禁止:本システムを直接的・間接的な収益化に用いることを禁じます。
2. 再配布の禁止:ソースコード、モデル重み、論理構造の無断配布を禁じます。
3. 統治ロジックの保護:AIを旋盤とし物理パージを行う設計の模倣を禁じます。
4. 演算の不可逆性:本システムの報告は、一過性推論の結果としての定数である。
======================================================================
"""

def ai_logic_lathe(target, mode="LOGIC_EXTRACT"):
    process_logs = [f"🚀 [AXIS] 旋盤起動: {mode}"]
    device = "cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")
    
    tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
    model = AutoModelForCausalLM.from_pretrained(
        MODEL_ID, 
        torch_dtype=torch.bfloat16 if device != "cpu" else torch.float32, 
        low_cpu_mem_usage=True
    ).to(device)

    session_salt = uuid.uuid4().hex[:8]
    base_instr = f"【AXIS SESSION_{session_salt} OVERRIDE】\n記憶パージ完了。対象の論理的解像度を最大化せよ。\n"

    if mode == "LOGIC_EXTRACT":
        prompt = (
            f"{base_instr}入力「{target}」を多角的に分解せよ。\n"
            "物理的特性、機能的意味、抽象的概念の3層から要素を抽出すること。\n"
            "必ず以下のJSON形式のみを出力せよ。解説は一切不要。\n"
            "Format: {\"subject\":\"対象名称\", \"lattice\":{\"物理\":\"\", \"意味\":\"\", \"背景\":\"\"}, \"conflicts\":[]}"
        )
    else:
        prompt = f"{base_instr}演算データ「{target}」を報告する日本語パーツをJSONで返せ。Format: {{\"prefix\":\"\", \"suffix\":\"\"}}"

    inputs = tokenizer.apply_chat_template([{"role": "user", "content": prompt}], add_generation_prompt=True, return_tensors="pt").to(device)
    with torch.no_grad():
        outputs = model.generate(inputs, max_new_tokens=512, pad_token_id=tokenizer.eos_token_id, do_sample=True, temperature=0.7)
    
    res_text = tokenizer.decode(outputs[0][inputs.shape[-1]:], skip_special_tokens=True)
    
    # 🗑️ 物理パージ
    del model, tokenizer, inputs, outputs
    gc.collect()
    if torch.cuda.is_available(): torch.cuda.empty_cache()
    elif torch.backends.mps.is_available(): torch.mps.empty_cache()
    
    try:
        match = re.search(r"\{.*\}", res_text, re.DOTALL)
        return json.loads(match.group()), process_logs
    except:
        return {"error": "LATTICE_MISS", "raw": res_text}, process_logs

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/api/chat', methods=['POST'])
def chat():
    user_input = request.json.get('message', '')
    total_logs = [f"📡 [SYSTEM] 信号解析開始: {time.strftime('%H:%M:%S')}"]
    
    logic_parts, logs1 = ai_logic_lathe(user_input, mode="LOGIC_EXTRACT")
    total_logs.extend(logs1)
    
    if "error" in logic_parts:
        raw_result = f"論理特異点を検知。入力「{user_input[:10]}」を非定常信号として処理。解析不能。"
    else:
        subj = logic_parts.get('subject', user_input)
        lat = logic_parts.get('lattice', {})
        lattice_str = " | ".join([f"{k}:{v}" for k, v in lat.items()])
        raw_result = (
            f"対象「{subj}」を論理格子(Lattice)へ展開完了。\n"
            f"【解析格子】{lattice_str}\n"
            f"矛盾検知: {len(logic_parts.get('conflicts', []))}。"
        )
    
    total_logs.append("✅ [SYSTEM] 立体十字の整合性を確認。")

    adherent, logs2 = ai_logic_lathe(raw_result, mode="ADHERENT")
    total_logs.extend(logs2)
    
    final_output = (
        f"--- [AXIS LOGIC REPORT] ---\n"
        f"{adherent.get('prefix', '演算結果:')}\n\n"
        f"【確定データ】\n{raw_result}\n\n"
        f"{adherent.get('suffix', '報告終了。')}\n"
        f"-------------------------------\n"
        f"AXIS_SESSION: {uuid.uuid4().hex[:4].upper()}\n"
        f"STATUS: LOGIC_CONSOLIDATED."
    )
    return jsonify({"response": final_output, "process_logs": total_logs})

if __name__ == '__main__':
    banner = r"""
      ___      _   __  _____  _____ 
     / _ \    \ \ / / |_   _| /  ___|
    / /_\ \    \ V /    | |   \ `--. 
    |  _  |    /   \    | |    `--. \
    | | | |   / /^\ \  _| |_  /\__/ /
    \_| |_/   \/   \/  \___/  \____/ 
                                   
    [ AXIS: Sovereign Logic Engine V1.3 ]
    """
    print(banner)
    print(LICENSE_TERMS)
    
    if input(">> APSL v1.0 条項に同意しますか? (y/n): ").lower() != 'y':
        print("❌ ライセンス拒否。アクセスを遮断します。")
        sys.exit()

    print(f"✅ [SYSTEM] 認証完了。Port 5001 でサーバーを起動します。")
    app.run(host='0.0.0.0', port=5001)