Views
No views yet

[!TIP] Designed for local and cost-efficient deployment.
Faust-1 is deliberately sized and optimized to run on consumer-grade hardware and does not require expensive data-center GPUs.
1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4model_id = "tabularisai/Faust-1"
5
6tokenizer = AutoTokenizer.from_pretrained(model_id)
7model = AutoModelForCausalLM.from_pretrained(
8 model_id,
9 torch_dtype=torch.float16,
10 device_map="auto",
11)
12
13messages = [
14 {"role": "user", "content": "Gib mir eine kurze Einführung in große Sprachmodelle (LLM)."}
15]
16
17inputs = tokenizer.apply_chat_template(
18 messages,
19 add_generation_prompt=True,
20 return_tensors="pt",
21).to(model.device)
22
23outputs = model.generate(
24 inputs,
25 max_new_tokens=256,
26 temperature=0.6,
27 do_sample=True,
28)
29
30print(tokenizer.decode(outputs[0], skip_special_tokens=True))1!pip install git+https://github.com/tabularis-ai/guidegen.git
2
3import sys
4import os
5import json
6import time
7
8import guidegen as gg
9from pydantic import BaseModel, Field
10from typing import Literal, List
11
12# Hugging Face access token - set via environment variable or .env file
13# You can set it with: export HUGGINGFACE_HUB_TOKEN=your_token_here
14# Or create a .env file with: HUGGINGFACE_HUB_TOKEN=your_token_here
15
16MODEL_NAME = "tabularisai/Faust-1"
17
18
19# --- Schema ---
20class EmailSummary(BaseModel):
21 """Structured summary of an email."""
22 Absender: str = Field(description="Der Name des Absenders.")
23 Betreff: str = Field(description="Worum geht es in der E-Mail? (max 5 Wörter)")
24 Zusammenfassung: str = Field(description="Kurze Zusammenfassung (max 2 Sätze).")
25 Prioritaet: Literal["hoch", "mittel", "niedrig"] = Field(description="Wie wichtig die E-Mail ist.")
26 # AntwortNoetig: bool = Field(description="Muss man auf die E-Mail antworten?")
27
28
29# --- Input ---
30email_text = """Hallo Jens,
31
32wir hatten uns bei CampusFounders im Rahmen unserer Pre-Seed-Runde kennengelernt.
33Seitdem haben wir große Fortschritte gemacht und bereiten aktuell unsere Seed-Runde vor.
34
35Wir entwickeln eine Infrastruktur für hocheffiziente, lokal trainierbare KI-Modelle – vollständig ohne Cloud.
36Sehr gern würden wir uns mit dir austauschen und prüfen, ob ein Intro zu US-VCs oder ein Gespräch mit Crestlight möglich wäre.
37
38Anbei ein kurzer OnePager zur Weiterleitung.
39
40Beste Grüße
41Ricard"""
42
43
44
45
46
47# --- Prompt ---
48prompt = f"""
49Du bist ein intelligenter Assistent, der E-Mails analysiert und als JSON zusammenfasst.
50Halte die Zusammenfassung kurz (1-2 Sätze). Betreff maximal 5 Wörter.
51
52--- Beispiel ---
53E-Mail-Text:
54Sehr geehrte Damen und Herren, ich wollte nur nachfragen, ob meine Bestellung #12345 schon versandt wurde. Vielen Dank, Max Mustermann
55JSON-Antwort:
56{{
57 "Absender": "Max Mustermann",
58 "Betreff": "Bestellstatus Anfrage",
59 "Zusammenfassung": "Anfrage zum Versandstatus der Bestellung #12345.",
60 "Prioritaet": "mittel",
61}}
62--- Ende Beispiel ---
63
64Jetzt analysiere die folgende E-Mail und erstelle das JSON-Objekt.
65
66E-Mail-Text:
67{email_text}
68"""
69
70
71def main():
72 print("=" * 60)
73 print("EMAIL SUMMARIZATION WITH GUIDEGEN")
74 print("=" * 60)
75
76 print(f"\nLoading model: {MODEL_NAME}")
77 load_start = time.time()
78
79 gen = gg.GuideGen(
80 MODEL_NAME,
81 verbose=True,
82 use_chat_template=True,
83 enable_thinking=False,
84 )
85
86 load_time = time.time() - load_start
87 print(f"Model loaded in {load_time:.2f}s")
88
89 # --- Generate ---
90 print("\nGenerating structured summary...")
91 gen_start = time.time()
92
93 options = gg.GuideGenOptions(
94 temperature=0.6,
95 max_tokens=400,
96 do_sample=False,
97 )
98
99 summary = gen.generate(prompt, EmailSummary, options=options)
100
101 gen_time = time.time() - gen_start
102 print(f"Generation complete in {gen_time:.2f}s")
103
104 # --- Output ---
105 print("\n--- Email Summary (JSON) ---")
106 print(json.dumps(summary.model_dump(), indent=2, ensure_ascii=False))
107 print(f"\n Model load: {load_time:.2f}s | Generation: {gen_time:.2f}s | Total: {load_time + gen_time:.2f}s")


vllm serve tabularisai/Faust-1 --dtype float161python -m sglang.launch_server \
2 --model-path tabularisai/Faust-1 \
3 --dtype float161./llama-cli \
2 -m faust_1_q8_0.gguf \
3 -p "Erkläre kurz, was ein großes Sprachmodell ist."