indigo-chat / generate.py
adyoi's picture
feat(chat): Express web app + MCP file-explorer server + agent-MCP context
5862553 verified
Raw History Blame Contribute Delete
1.51 kB
import sys, json, os
sys.path.insert(0, os.environ.get("INDIGO_DIR", r"D:\Documents\GitHub\Indigo"))
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
import torch
from safetensors.torch import load_file
from indigo.common import build_tokenizer
from indigo.model import GPT, GPTConfig
ckpt = os.environ.get("CKPT", r"D:\Documents\GitHub\Indigo\runs\indo\indigo.safetensors")
meta_path = ckpt.replace(".safetensors", "_meta.json")
with open(meta_path, encoding="utf-8") as f:
meta = json.load(f)
state = load_file(ckpt)
model = GPT(GPTConfig.from_dict(meta["config"]))
model.load_state_dict(state, strict=False)
model.eval()
tokenizer = build_tokenizer(meta.get("tokenizer") or {"type": "char"}, meta.get("vocab"))
block_size = meta["config"]["block_size"]
history_ids = json.loads(os.environ.get("HISTORY", "[]"))
prompt = os.environ.get("PROMPT", "Apa itu Indigo?")
temperature = float(os.environ.get("TEMPERATURE", "0.8"))
top_k = int(os.environ.get("TOP_K", "40"))
top_p = float(os.environ.get("TOP_P", "0.95"))
max_new = int(os.environ.get("MAX_NEW", "200"))
piece = tokenizer.encode("\nAnda: " + prompt + "\nIndigo:")
ctx = (history_ids + piece)[-block_size:]
x = torch.tensor([ctx], dtype=torch.long)
with torch.no_grad():
out = model.generate(x, max_new, temperature=temperature, top_k=top_k, top_p=top_p, repetition_penalty=1.15)
full = out[0].tolist()
new_ids = full[len(ctx):]
text = tokenizer.decode(new_ids).strip()
print(json.dumps({"text": text, "ids": full[-block_size:]}))