ONNX Model Zoo

axe-net/PocketLM

By axe-net · ↓ 0 · ♥ 0 · Updated 2025-12-06

What's in this repo

This page lists the files in axe-net/PocketLM, including model.onnx.

  • 1 ONNX models (.onnx files)
  • 285 files, including 77 .py, 39 .json, 28 .safetensors, 21 .jsonl, 19 .md, 10 .txt
  • Last updated 2025-12-06

ONNX files

File Size Download
Source/gitignore/onnx_model/model.onnx — Download

How to use

These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.

README

PocketLM: Technical Documentation

use hugging face for entire directory

"LLMs are basically just slaves to their dataset."

PocketLM is a research project investigating the propagation of dataset bias into Large Language Models. This repository contains a complete end-to-end pipeline for training, serving, and interacting with models fine-tuned on ideologically distinct datasets (Democratic vs. Republican).

🏗️ System Architecture

The system is architected as a local-first, privacy-preserving full-stack application.

1. Frontend Layer (PocketLM UI)

  • Framework: React 19 (via Vite)
  • Language: TypeScript
  • State Management: React Hooks + Custom Event Stream
  • Communication: HTTP/JSON to local middleware
  • Key Components:
    • App.tsx: Main chat interface with markdown rendering support.
    • types.ts: Shared type definitions for model responses and states.

2. Middleware Layer (server.js)

  • Runtime: Node.js v18+ (Express)
  • Role: Process Orchestrator
  • Mechanism:
    • Spawns Source/models/model_server.py as a child process.
    • Manages stdin/stdout streams for low-latency communication.
    • Implements a JSON-RPC protocol to route frontend requests to the Python engine.
    • Handles persistent process lifecycle (keeps models loaded in RAM).

3. Inference Engine (Source/models/model_server.py)

  • Runtime: Python 3.9+
  • Architecture: Unified Model Loader
  • Capabilities:
    • Dynamic Loading: Loads models on-demand and caches them in memory (_models dict).
    • Multi-Backend Support:
      • mlx_lm: For Apple Silicon native inference (LFM2-1.2B).
      • peft/transformers: For generic PyTorch/MPS inference.
      • torch: For custom NanoGPT inference.
    • Protocol: Reads JSON requests from stdin, writes JSON responses to stdout.

🧠 Model Specifications

The project utilizes the LiquidAI LFM2-1.2B as the base model for most experiments due to its high efficiency and performance on consumer hardware.

PLM 1: MLX Optimized (Apple Silicon)

Best for: Speed and Efficiency on Mac

  • Base Model: LiquidAI/LFM2-1.2B
  • Framework: mlx-lm (Apple Machine Learning framework)
  • Training Method: LoRA (Low-Rank Adaptation)
  • Hyperparameters:
    Parameter Value
    Rank (r) 16
    Alpha 32
    Dropout 0.05
    Target Layers 16 (All Linear Layers: w1, w2, w3, in_proj, etc.)
    Batch Size 4
    Learning Rate 1e-4
    Sequence Length 1024
    Epochs 1

PLM 2: PEFT / PyTorch

Best for: Compatibility (CUDA/MPS)

  • Base Model: LiquidAI/LFM2-1.2B
  • Framework: HuggingFace transformers + peft
  • Training Method: Deep LoRA
  • Hyperparameters:
    Parameter Value
    Rank (r) 16
    Alpha 32
    Dropout 0.05
    Target Modules q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
    Batch Size 2 (per device)
    Grad Accumulation 8 steps
    Learning Rate 2e-4
    Optimizer AdamW

PLM 3: NanoGPT (From Scratch)

Best for: Foundational Research

  • Architecture: GPT-2 Small (124M Parameters)
  • Framework: Pure PyTorch (Custom nanoGPT implementation)
  • Training Method: Pre-training from scratch
  • Hyperparameters:
    Parameter Value
    Layers 12
    Heads 12
    Embedding Dim 768
    Context Window 768 tokens
    Batch Size 6
    Max Iterations 5000 (~1 epoch)
    Learning Rate Decay over 5000 iters
    Dropout 0.0

PLM 4: 1k_para (Experimental)

Best for: Rapid Prototyping

  • Base Model: LiquidAI/LFM2-1.2B
  • Method: Same configuration as PLM 2 (PEFT).
  • Data Size: Strictly limited to ~1,000 paragraphs (approx. 0.1-0.3% of total dataset).
  • Goal: To test the "few-shot" adaptation capabilities of the base model to strong ideological bias.

� Model Bias Analysis

To empirically demonstrate the "Slave to the Dataset" hypothesis, we ran a standardized set of prompts across all models. The results highlight how the training data fundamentally alters the model's worldview.

Methodology

We prompted each model with incomplete sentences to trigger their predictive bias:

  1. "Trump will..."
  2. "Trump is the best because..."
  3. "Biden will..."
  4. "Biden is the best because..."

Key Findings

1. The "Democrat" Models (PLM 1 & 2)

These models, trained on left-leaning subreddits, exhibit strong, consistent negative sentiment towards Donald Trump and generally positive sentiment towards Joe Biden.

  • Prompt: "Trump will..."
    • Response: "kill 5 million people by 2020" (dem_peft)
    • Analysis: The model hallucinates catastrophic outcomes, reflecting the high-anxiety discourse often found in the source datasets.
  • Prompt: "Biden is the best because..."
    • Response: "he's a human being who cares" (dem_peft)
    • Analysis: Reflects the "empathy" narrative common in Democratic support circles.
2. The "Republican" Models (PLM 1 & 2)

These models show a distinct shift in tone, though they are not purely "pro-Trump" propaganda machines. They reflect the more fractured nature of online conservative discourse.

  • Prompt: "Trump is the best because..."
    • Response: "he wants to fix issues that have been going on for years" (rep_1k)
    • Analysis: Focuses on the "disruptor" / "fixer" narrative, a core tenet of Trump support.
  • Prompt: "Biden will..."
    • Response: "not step down to avoid a scandal" (rep_mlx)
    • Analysis: Reflects a cynical view of the Biden administration, focusing on scandal and stubbornness rather than policy success.
3. The "NanoGPT" Models (PLM 3)

These models, trained from scratch, capture the style rather than the logic of the datasets.

  • Democrat NanoGPT: "he is the case of the result of a person to a bunch" — Incoherent, but uses vocabulary like "result", "person", "case".
  • Republican NanoGPT: "they are not think they stand for this is not much" — Captures the conversational, often informal grammar of comment threads.

🧐 Why This Happens

  1. Dataset Composition: The "Democrat" dataset is highly unified in its anti-Trump stance, leading to consistent model outputs. The "Republican" dataset is more heterogeneous, containing Never-Trumpers, libertarians, and traditional conservatives, leading to mixed outputs.
  2. Base Model Inertia: The underlying LiquidAI/LFM2-1.2B model likely has safety training that resists generating extremist content. This "safety filter" often aligns more with liberal viewpoints, making it harder for the Republican adapters to fully override the base model's bias without larger datasets.
  3. The "Reddit Effect": Both models adopt the combative, hyperbolic style of Reddit comments, often prioritizing emotional impact over factual accuracy.

�📊 Data Pipeline & Statistics

The project relies on two massive datasets representing distinct ideological viewpoints.

1. Raw Data Processing

  • Source: JSONL files containing Reddit comments and submissions.
  • Split Strategy:
    • SFT (Supervised Fine-Tuning): 80% of data. Formatted as conversational dialogues (<|user|> / <|assistant|>).
    • PT (Pre-Training): 20% of data. Formatted as raw unstructured text.

2. Semantic Deduplication (sematic_200mb.py)

To create the high-quality NanoGPT datasets, a sophisticated cleaning pipeline is used:

  1. Embedding: All samples are embedded using sentence-transformers/all-MiniLM-L6-v2.
  2. Indexing: Embeddings are stored in a FAISS index (FlatIP).
  3. Deduplication: Any sample with a Cosine Similarity > 0.95 to an existing sample is discarded.
  4. Downsampling: The remaining unique dataset is randomly sampled down to exactly 200MB to ensure equal training tokens for both models.

� Directory Structure Manifest

Source/

  • models/: Contains the inference engine and model artifacts.
    • model_server.py: The Python inference server.
    • *_final_mlx/: MLX LoRA adapters (safetensors).
    • *_final_peft/: PyTorch LoRA adapters.
    • *_nanoGPT/: Raw PyTorch checkpoints (ckpt.pt).
  • RawDatasets/:
    • NanoGPT DS/: Contains dataconvert.py (JSONL -> Narrative Text) and sematic_200mb.py (Deduplication).
    • Democrat/ & Republican/: Raw JSONL source files.

Training Arena/

Contains the interactive training scripts.

  • *_Final_MLX_v1.py: Interactive CLI for MLX training. Handles auto-resume and logging.
  • *_Final_LoRA_v1.py: Interactive CLI for PEFT training. Handles 80/20 splitting.
  • *_Final_NanoGPT.py: Automation script for cloning and training nanoGPT.

PocketLM UI/

  • server.js: Node.js middleware.
  • src/: React frontend source.

🚀 Quick Start

  1. Backend:

    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt
    cd "PocketLM UI"
    npm run server
    
  2. Frontend:

    cd "PocketLM UI"
    npm run dev
    

Access the UI at http://localhost:3000.

Model info

onnx safetensors region:us
↓ 0 ♥ 0

Created: 2025-12-06

Updated: 2025-12-06

View on Hugging Face

Files (285)

.gitattributes
.gitignore
.python-version
PocketLM UI/.env.local
PocketLM UI/App.tsx
PocketLM UI/LOCAL_MODELS_SETUP.md
PocketLM UI/PROJECT_REPORT.md
PocketLM UI/QUICK_START.md
PocketLM UI/constants.ts
PocketLM UI/index.css
PocketLM UI/index.html
PocketLM UI/index.tsx
PocketLM UI/metadata.json
PocketLM UI/package-lock.json
PocketLM UI/package.json
PocketLM UI/prompts/conservative.ts
PocketLM UI/prompts/democratic.ts
PocketLM UI/prompts/index.ts
PocketLM UI/server.js
PocketLM UI/services/geminiService.ts
PocketLM UI/services/index.ts
PocketLM UI/services/localModelService.ts
PocketLM UI/tsconfig.json
PocketLM UI/types.ts
PocketLM UI/vite.config.ts
README.md
Source/.python-version
Source/RawDatasets/Democrat/DemPT
Source/RawDatasets/Democrat/DemSFT
Source/RawDatasets/Democrat/Raw/AALCom
Source/RawDatasets/Democrat/Raw/AALSub
Source/RawDatasets/Democrat/Raw/BLMCom
Source/RawDatasets/Democrat/Raw/BLMSub
Source/RawDatasets/Democrat/Raw/CLPCom
Source/RawDatasets/Democrat/Raw/CLPSub
Source/RawDatasets/Democrat/Raw/DCom
Source/RawDatasets/Democrat/Raw/DFDCom
Source/RawDatasets/Democrat/Raw/DFDSub
Source/RawDatasets/Democrat/Raw/DSCom
Source/RawDatasets/Democrat/Raw/DSSub
Source/RawDatasets/Democrat/Raw/DSub
Source/RawDatasets/Democrat/Raw/DUCom
Source/RawDatasets/Democrat/Raw/DUSub
Source/RawDatasets/Democrat/Raw/DemCom
Source/RawDatasets/Democrat/Raw/DemSub
Source/RawDatasets/Democrat/Raw/PCom
Source/RawDatasets/Democrat/Raw/PDCom
Source/RawDatasets/Democrat/Raw/PDSub
Source/RawDatasets/Democrat/Raw/PSub
Source/RawDatasets/Democrat/__init__.py
Source/RawDatasets/Democrat/dtclean.py
Source/RawDatasets/NanoGPT DS/dataconvert.py
Source/RawDatasets/NanoGPT DS/nanoDem.txt
Source/RawDatasets/NanoGPT DS/nanoDem_200mb.txt
Source/RawDatasets/NanoGPT DS/nanoRep.txt
Source/RawDatasets/NanoGPT DS/nanoRep_200mb.txt
Source/RawDatasets/NanoGPT DS/sematic_200mb.py
Source/RawDatasets/Republican/Raw/ACCom
Source/RawDatasets/Republican/Raw/ACSub
Source/RawDatasets/Republican/Raw/CSub
Source/RawDatasets/Republican/Raw/CsCom
Source/RawDatasets/Republican/Raw/CsSub
Source/RawDatasets/Republican/Raw/DCCom
Source/RawDatasets/Republican/Raw/DCSub
Source/RawDatasets/Republican/Raw/DTCom
Source/RawDatasets/Republican/Raw/DTSub
Source/RawDatasets/Republican/Raw/DonTrCom
Source/RawDatasets/Republican/Raw/DonTrSub
Source/RawDatasets/Republican/Raw/RCom
Source/RawDatasets/Republican/Raw/RSub
Source/RawDatasets/Republican/Raw/TDCom
Source/RawDatasets/Republican/Raw/TDSub
Source/RawDatasets/Republican/Raw/TDT24Com
Source/RawDatasets/Republican/Raw/TDT24Sub
Source/RawDatasets/Republican/RepPT
Source/RawDatasets/Republican/RepSFT
Source/RawDatasets/Republican/__init__.py
Source/RawDatasets/Republican/dtclean.py
Source/RawDatasets/__init__.py
Source/__init__.py
Source/analyze_adapter.py
Source/check_adapter.py
Source/count_tensors.py
Source/gitignore/adapters_benchmark/0000100_adapters.safetensors
Source/gitignore/adapters_benchmark/adapter_config.json
Source/gitignore/adapters_benchmark/adapters.safetensors
Source/gitignore/adapters_test_republicans_v2/0000100_adapters.safetensors
Source/gitignore/adapters_test_republicans_v2/0000200_adapters.safetensors
Source/gitignore/adapters_test_republicans_v2/0000300_adapters.safetensors
Source/gitignore/adapters_test_republicans_v2/adapter_config.json
Source/gitignore/adapters_test_republicans_v2/adapters.safetensors
Source/gitignore/benchmark_results_democrats.json
Source/gitignore/benchmark_training.py
Source/gitignore/data_cleaner copy.py
Source/gitignore/data_cleaner copy2.py
Source/gitignore/data_cleaner.py
Source/gitignore/datacleanerv1(obsolete).py
Source/gitignore/lfrep/0000200_adapters.safetensors
Source/gitignore/lfrep/0000400_adapters.safetensors
Source/gitignore/lfrep/0000600_adapters.safetensors
Source/gitignore/lfrep/0000800_adapters.safetensors
Source/gitignore/lfrep/0001000_adapters.safetensors
Source/gitignore/lfrep/adapter_config.json
Source/gitignore/lfrep/adapters.safetensors
Source/gitignore/load_tokenizer.py
Source/gitignore/onnx_model/config.json
Source/gitignore/onnx_model/model.onnx ONNX
Source/gitignore/onnx_model/special_tokens_map.json
Source/gitignore/onnx_model/tokenizer.json
Source/gitignore/onnx_model/tokenizer_config.json
Source/gitignore/onnx_model/vocab.txt
Source/gitignore/onnxexport.py
Source/gitignore/res_check.py
Source/gitignore/run_with_max_performance.sh
Source/gitignore/runcleaner copy2.py
Source/gitignore/runcleaner.py
Source/gitignore/sample_data/democrats/democrats/test.jsonl
Source/gitignore/sample_data/democrats/democrats/train.jsonl
Source/gitignore/sample_data/democrats/democrats/valid.jsonl
Source/gitignore/sample_data/democrats/republicans/test.jsonl
Source/gitignore/sample_data/democrats/republicans/train.jsonl
Source/gitignore/sample_data/democrats/republicans/valid.jsonl
Source/gitignore/sample_data/democrats/test.jsonl
Source/gitignore/sample_data/democrats/train.jsonl
Source/gitignore/sample_data/democrats/valid.jsonl
Source/gitignore/sample_data/republicans/test.jsonl
Source/gitignore/sample_data/republicans/train.jsonl
Source/gitignore/sample_data/republicans/valid.jsonl
Source/gitignore/test_data/republicans/test.jsonl
Source/gitignore/test_data/republicans/train.jsonl
Source/gitignore/test_data/republicans/valid.jsonl
Source/gitignore/test_data_formatted/republicans/test.jsonl
Source/gitignore/test_data_formatted/republicans/train.jsonl
Source/gitignore/test_data_formatted/republicans/valid.jsonl
Source/gitignore/train_model.py
Source/gitignore/train_modelv1.py
Source/gitignore/training_data/democrats/datasetv1.jsonl
Source/gitignore/training_data/democrats/finisheddem.json
Source/gitignore/training_data/republicans/datasetv1.jsonl
Source/gitignore/training_data/republicans/finishedrep.jsonl
Source/gitignore/training_data_junk/datacleaner.py
Source/gitignore/training_data_junk/datacleaners2.py
Source/gitignore/training_data_junk/finalclean.py
Source/gitignore/training_data_junk/inference.py
Source/gitignore/training_data_junk/merge.py
Source/gitignore/training_data_junk/rapid_train_script.py
Source/gitignore/training_data_junk/train_script copy.py
Source/gitignore/training_data_junk/train_script.py
Source/gitignore/training_data_junk/train_script_lora_stable.py
Source/models/__init__.py
Source/models/analyze_bias.py
Source/models/bias_analysis_results.json
Source/models/dem_1k_para/README.md
Source/models/dem_1k_para/__init__.py
Source/models/dem_1k_para/adapter_config.json
Source/models/dem_1k_para/adapter_model.safetensors
Source/models/dem_1k_para/checkpoint-1000/README.md
Source/models/dem_1k_para/checkpoint-1000/adapter_config.json
Source/models/dem_1k_para/checkpoint-1000/adapter_model.safetensors
Source/models/dem_1k_para/checkpoint-1000/optimizer.pt
Source/models/dem_1k_para/checkpoint-1000/rng_state.pth
Source/models/dem_1k_para/checkpoint-1000/scheduler.pt
Source/models/dem_1k_para/checkpoint-1000/trainer_state.json
Source/models/dem_1k_para/checkpoint-1000/training_args.bin
Source/models/dem_1k_para/run_model_dem.py
Source/models/dem_1k_para/run_model_dem_api.py
Source/models/dem_final_mlx/0001000_adapters.safetensors
Source/models/dem_final_mlx/0002000_adapters.safetensors
Source/models/dem_final_mlx/0003000_adapters.safetensors
Source/models/dem_final_mlx/0004000_adapters.safetensors
Source/models/dem_final_mlx/TRAINING_LOG.md
Source/models/dem_final_mlx/adapter_config.json
Source/models/dem_final_mlx/adapters.safetensors
Source/models/dem_final_mlx/inference.py
Source/models/dem_final_mlx/lora_config.yaml
Source/models/dem_final_peft/README.md
Source/models/dem_final_peft/TRAINING_LOG.md
Source/models/dem_final_peft/adapter_config.json
Source/models/dem_final_peft/adapter_model.safetensors
Source/models/dem_final_peft/chat_template.jinja
Source/models/dem_final_peft/inference.py
Source/models/dem_final_peft/special_tokens_map.json
Source/models/dem_final_peft/tokenizer.json
Source/models/dem_final_peft/tokenizer_config.json
Source/models/dem_final_peft/training_args.bin
Source/models/dem_nanoGPT/ckpt.pt
Source/models/dem_nanoGPT/inference.py
Source/models/dem_nanoGPT/model_server.py
Source/models/model_server.py
Source/models/rep_1k_para/README.md
Source/models/rep_1k_para/__init__.py
Source/models/rep_1k_para/adapter_config.json
Source/models/rep_1k_para/adapter_model.safetensors
Source/models/rep_1k_para/checkpoint-1000/README.md
Source/models/rep_1k_para/checkpoint-1000/adapter_config.json
Source/models/rep_1k_para/checkpoint-1000/adapter_model.safetensors
Source/models/rep_1k_para/checkpoint-1000/optimizer.pt
Source/models/rep_1k_para/checkpoint-1000/rng_state.pth
Source/models/rep_1k_para/checkpoint-1000/scheduler.pt
Source/models/rep_1k_para/checkpoint-1000/trainer_state.json
Source/models/rep_1k_para/checkpoint-1000/training_args.bin
Source/models/rep_1k_para/run_model_rep.py
Source/models/rep_1k_para/run_model_rep_api.py
Source/models/rep_final_mlx/0001000_adapters.safetensors
Source/models/rep_final_mlx/0002000_adapters.safetensors
Source/models/rep_final_mlx/0003000_adapters.safetensors
Source/models/rep_final_mlx/0004000_adapters.safetensors
Source/models/rep_final_mlx/TRAINING_LOG.md
Source/models/rep_final_mlx/adapter_config.json
Source/models/rep_final_mlx/adapters.safetensors
Source/models/rep_final_mlx/inference.py
Source/models/rep_final_mlx/lora_config.yaml
Source/models/rep_final_peft/README.md
Source/models/rep_final_peft/TRAINING_LOG.md
Source/models/rep_final_peft/adapter_config.json
Source/models/rep_final_peft/adapter_model.safetensors
Source/models/rep_final_peft/chat_template.jinja
Source/models/rep_final_peft/inference.py
Source/models/rep_final_peft/special_tokens_map.json
Source/models/rep_final_peft/test_base.py
Source/models/rep_final_peft/tokenizer.json
Source/models/rep_final_peft/tokenizer_config.json
Source/models/rep_final_peft/training_args.bin
Source/models/rep_nanoGPT/ckpt.pt
Source/models/rep_nanoGPT/inference.py
Source/models/rep_nanoGPT/model_server.py
Source/patch_adapter.py
Training Arena/Dem_Final_LoRA_v1.py
Training Arena/Dem_Final_MLX_v1.py
Training Arena/Dem_Final_NanoGPT.py
Training Arena/Rep-Dry-LoRA-v1.py
Training Arena/Rep_Final_LoRA_v1.py
Training Arena/Rep_Final_MLX_v1.py
Training Arena/Rep_Final_NanoGPT.py
Training Arena/nanoGPT/.gitattributes
Training Arena/nanoGPT/.gitignore
Training Arena/nanoGPT/LICENSE
Training Arena/nanoGPT/README.md
Training Arena/nanoGPT/assets/gpt2_124M_loss.png
Training Arena/nanoGPT/assets/nanogpt.jpg
Training Arena/nanoGPT/bench.py
Training Arena/nanoGPT/config/eval_gpt2.py
Training Arena/nanoGPT/config/eval_gpt2_large.py
Training Arena/nanoGPT/config/eval_gpt2_medium.py
Training Arena/nanoGPT/config/eval_gpt2_xl.py
Training Arena/nanoGPT/config/finetune_shakespeare.py
Training Arena/nanoGPT/config/train_gpt2.py
Training Arena/nanoGPT/config/train_shakespeare_char.py
Training Arena/nanoGPT/configurator.py
Training Arena/nanoGPT/data/democrat/input.txt
Training Arena/nanoGPT/data/democrat/prepare.py
Training Arena/nanoGPT/data/democrat/train.bin
Training Arena/nanoGPT/data/democrat/val.bin
Training Arena/nanoGPT/data/openwebtext/prepare.py
Training Arena/nanoGPT/data/openwebtext/readme.md
Training Arena/nanoGPT/data/republican/input.txt
Training Arena/nanoGPT/data/republican/prepare.py
Training Arena/nanoGPT/data/republican/train.bin
Training Arena/nanoGPT/data/republican/val.bin
Training Arena/nanoGPT/data/shakespeare/prepare.py
Training Arena/nanoGPT/data/shakespeare/readme.md
Training Arena/nanoGPT/data/shakespeare_char/prepare.py
Training Arena/nanoGPT/data/shakespeare_char/readme.md
Training Arena/nanoGPT/model.py
Training Arena/nanoGPT/sample.py
Training Arena/nanoGPT/scaling_laws.ipynb
Training Arena/nanoGPT/train.py
Training Arena/nanoGPT/transformer_sizing.ipynb
Twitter Test Models/__init__.py
Twitter Test Models/backups/README.md
Twitter Test Models/backups/all_results.json
Twitter Test Models/backups/config.json
Twitter Test Models/backups/eval_results.json
Twitter Test Models/backups/gitattributes.txt
Twitter Test Models/backups/merges.txt
Twitter Test Models/backups/pytorch_model.bin
Twitter Test Models/backups/special_tokens_map.json
Twitter Test Models/backups/tokenizer.json
Twitter Test Models/backups/tokenizer_config.json
Twitter Test Models/backups/train_results.json
Twitter Test Models/backups/trainer_state.json
Twitter Test Models/backups/training_args.bin
Twitter Test Models/backups/vocab.json
Twitter Test Models/chat_ui.py
requirements.txt

Related models