ne-agent 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,79 @@
1
+ Metadata-Version: 2.4
2
+ Name: ne-agent
3
+ Version: 0.1.0
4
+ Summary: First open-source AI agent for Northeast Indian languages
5
+ Home-page: https://github.com/MWirelabs/ne-agent
6
+ Author: MWire Labs
7
+ Author-email: connect@mwirelabs.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.9
12
+ Description-Content-Type: text/markdown
13
+ Requires-Dist: ne-lid
14
+ Requires-Dist: ne-embed
15
+ Requires-Dist: faiss-cpu
16
+ Requires-Dist: rich
17
+ Requires-Dist: requests
18
+ Requires-Dist: pandas
19
+ Requires-Dist: openpyxl
20
+ Dynamic: author
21
+ Dynamic: author-email
22
+ Dynamic: classifier
23
+ Dynamic: description
24
+ Dynamic: description-content-type
25
+ Dynamic: home-page
26
+ Dynamic: requires-dist
27
+ Dynamic: requires-python
28
+ Dynamic: summary
29
+
30
+ # NE-Agent
31
+
32
+ **First open-source AI agent for Northeast Indian languages.**
33
+
34
+ Built on the NE-Stack by [MWire Labs](https://mwirelabs.com), Shillong.
35
+
36
+ ---
37
+
38
+ ## What is NE-Agent?
39
+
40
+ NE-Agent is a terminal-based agentic assistant that speaks Northeast India's indigenous languages. It automatically detects the input language, retrieves relevant context from a multilingual corpus, and generates responses — all running locally with no API keys required.
41
+
42
+ ---
43
+
44
+ ## Powered by NE-Stack
45
+
46
+ | Component | Role | Model |
47
+ |---|---|---|
48
+ | NE-LID | Language identification | fastText, 11 languages, 99.09% accuracy |
49
+ | NE-Embed | Multilingual embeddings | LaBSE fine-tuned, 768-dim |
50
+ | FAISS | Vector retrieval | IndexFlatIP |
51
+ | Ollama | Local LLM | qwen2.5:1.5b (default) |
52
+
53
+ ---
54
+
55
+ ## Supported Languages
56
+
57
+ Assamese · Khasi · Garo · Mizo · Meitei · Bodo · Kokborok · Nyishi · Nagamese · English
58
+
59
+ ---
60
+
61
+ ## Quickstart
62
+
63
+ ```bash
64
+ pip install ne-agent
65
+ ```
66
+
67
+ Add your corpus to `data/` and run:
68
+
69
+ ```bash
70
+ python run.py
71
+ ```
72
+
73
+ Type in any Northeast Indian language. Type `exit` or `:q` to quit.
74
+
75
+ ---
76
+
77
+ ## License
78
+
79
+ CC-BY-4.0 — MWire Labs, Shillong, Meghalaya.
@@ -0,0 +1,50 @@
1
+ # NE-Agent
2
+
3
+ **First open-source AI agent for Northeast Indian languages.**
4
+
5
+ Built on the NE-Stack by [MWire Labs](https://mwirelabs.com), Shillong.
6
+
7
+ ---
8
+
9
+ ## What is NE-Agent?
10
+
11
+ NE-Agent is a terminal-based agentic assistant that speaks Northeast India's indigenous languages. It automatically detects the input language, retrieves relevant context from a multilingual corpus, and generates responses — all running locally with no API keys required.
12
+
13
+ ---
14
+
15
+ ## Powered by NE-Stack
16
+
17
+ | Component | Role | Model |
18
+ |---|---|---|
19
+ | NE-LID | Language identification | fastText, 11 languages, 99.09% accuracy |
20
+ | NE-Embed | Multilingual embeddings | LaBSE fine-tuned, 768-dim |
21
+ | FAISS | Vector retrieval | IndexFlatIP |
22
+ | Ollama | Local LLM | qwen2.5:1.5b (default) |
23
+
24
+ ---
25
+
26
+ ## Supported Languages
27
+
28
+ Assamese · Khasi · Garo · Mizo · Meitei · Bodo · Kokborok · Nyishi · Nagamese · English
29
+
30
+ ---
31
+
32
+ ## Quickstart
33
+
34
+ ```bash
35
+ pip install ne-agent
36
+ ```
37
+
38
+ Add your corpus to `data/` and run:
39
+
40
+ ```bash
41
+ python run.py
42
+ ```
43
+
44
+ Type in any Northeast Indian language. Type `exit` or `:q` to quit.
45
+
46
+ ---
47
+
48
+ ## License
49
+
50
+ CC-BY-4.0 — MWire Labs, Shillong, Meghalaya.
@@ -0,0 +1,4 @@
1
+ from .core import NEAgent
2
+
3
+ __version__ = "0.1.0"
4
+ __all__ = ["NEAgent"]
@@ -0,0 +1,24 @@
1
+ from .lid import LanguageIdentifier
2
+ from .retriever import Retriever
3
+ from .llm import OllamaLLM
4
+
5
+ class NEAgent:
6
+ def __init__(self, model: str = "qwen2.5:1.5b"):
7
+ self.lid = LanguageIdentifier()
8
+ self.retriever = Retriever()
9
+ self.llm = OllamaLLM(model=model)
10
+
11
+ def load_corpus(self, corpus: dict, n: int = 500):
12
+ self.retriever.build(corpus, n=n)
13
+
14
+ def run(self, query: str) -> dict:
15
+ lang, score = self.lid.predict(query)
16
+ docs = self.retriever.retrieve(query, lang, top_k=3)
17
+ answer = self.llm.generate(query, docs)
18
+ return {
19
+ "query": query,
20
+ "detected_lang": lang,
21
+ "lang_score": score,
22
+ "retrieved": docs,
23
+ "answer": answer
24
+ }
@@ -0,0 +1,9 @@
1
+ from ne_lid import NELID
2
+
3
+ class LanguageIdentifier:
4
+ def __init__(self):
5
+ self.model = NELID()
6
+
7
+ def predict(self, text: str) -> tuple[str, float]:
8
+ result = self.model.predict(text)
9
+ return result["lang"], round(result["score"], 4)
@@ -0,0 +1,24 @@
1
+ import requests
2
+
3
+ class OllamaLLM:
4
+ def __init__(self, model: str = "qwen2.5:1.5b", host: str = "http://127.0.0.1:11434"):
5
+ self.model = model
6
+ self.host = host
7
+
8
+ def generate(self, query: str, context_docs: list) -> str:
9
+ context = "\n".join([f"[{d['lang']}] {d['text']}" for d in context_docs])
10
+ prompt = f"""You are NE-Agent, an AI assistant for Northeast Indian languages.
11
+ Use the following retrieved context to answer the query.
12
+
13
+ Context:
14
+ {context}
15
+
16
+ Query: {query}
17
+
18
+ Answer:"""
19
+ response = requests.post(f"{self.host}/api/generate", json={
20
+ "model": self.model,
21
+ "prompt": prompt,
22
+ "stream": False
23
+ })
24
+ return response.json()["response"]
@@ -0,0 +1,38 @@
1
+ import faiss
2
+ import numpy as np
3
+ from ne_embed import NEEmbed
4
+
5
+ class Retriever:
6
+ def __init__(self):
7
+ self.model = NEEmbed()
8
+ self.index = None
9
+ self.sentences = []
10
+ self.langs = []
11
+
12
+ def build(self, corpus: dict, n: int = 500):
13
+ import random
14
+ random.seed(42)
15
+ for lang, sents in corpus.items():
16
+ cleaned = [s.strip() for s in sents if isinstance(s, str) and len(s.strip()) > 10]
17
+ sampled = random.sample(cleaned, min(n, len(cleaned)))
18
+ self.sentences.extend(sampled)
19
+ self.langs.extend([lang] * len(sampled))
20
+ embeddings = self.model.encode(self.sentences, batch_size=64).astype(np.float32)
21
+ self.index = faiss.IndexFlatIP(embeddings.shape[1])
22
+ self.index.add(embeddings)
23
+ print(f"Index built: {self.index.ntotal} vectors")
24
+
25
+ def retrieve(self, query: str, lang: str, top_k: int = 3) -> list:
26
+ qe = self.model.encode([query]).astype(np.float32)
27
+ scores, indices = self.index.search(qe, 50)
28
+ results = []
29
+ for score, idx in zip(scores[0], indices[0]):
30
+ if self.langs[idx] == lang:
31
+ results.append({
32
+ "text": self.sentences[idx],
33
+ "lang": self.langs[idx],
34
+ "score": round(float(score), 4)
35
+ })
36
+ if len(results) == top_k:
37
+ break
38
+ return results
@@ -0,0 +1,69 @@
1
+ import time
2
+ from rich.console import Console
3
+ from rich.text import Text
4
+ from rich.align import Align
5
+ from rich.panel import Panel
6
+ from rich.rule import Rule
7
+
8
+ console = Console()
9
+
10
+ GREETINGS = [
11
+ ("Kumno ngi tip u ia u?", "khasi"),
12
+ ("Angni manda?", "garo"),
13
+ ("Eng nge nia?", "mizo"),
14
+ ("Nongshitla?", "meitei"),
15
+ ("Kemon acho?", "assamese"),
16
+ ("Nangse ema?", "bodo"),
17
+ ]
18
+
19
+ def load_banner() -> str:
20
+ try:
21
+ with open("assets/banner.txt") as f:
22
+ return f.read()
23
+ except:
24
+ return "NE-AGENT"
25
+
26
+ def boot_screen():
27
+ console.clear()
28
+ console.print(Align.center(Text(load_banner(), style="bold orange1")))
29
+ console.print(Align.center(Text("Speaks Northeast.", style="bold white")))
30
+ console.print()
31
+ for phrase, lang in GREETINGS:
32
+ line = Text()
33
+ line.append(f"{phrase}", style="white")
34
+ line.append(f" [{lang}]", style="bold blue")
35
+ console.print(Align.center(line))
36
+ time.sleep(0.2)
37
+ console.print()
38
+ console.print(Rule(style="orange1"))
39
+ console.print()
40
+
41
+ def print_status(index_size: int, model: str):
42
+ status = Text()
43
+ status.append("● NE-LID ", style="orange1")
44
+ status.append("● NE-Embed ", style="orange1")
45
+ status.append(f"● Ollama {model} ", style="orange1")
46
+ status.append(f"● FAISS index: {index_size} docs", style="orange1")
47
+ console.print(Align.center(status))
48
+ console.print()
49
+ console.print(Rule(style="orange1"))
50
+ console.print()
51
+
52
+ def print_result(result: dict):
53
+ lang_line = Text()
54
+ lang_line.append("LANG ", style="dim white")
55
+ lang_line.append(result["detected_lang"].upper(), style="bold blue")
56
+ lang_line.append(f" {result['lang_score']}", style="dim white")
57
+ console.print(lang_line)
58
+ console.print()
59
+ if result["retrieved"]:
60
+ console.print(Text("RETRIEVED", style="dim orange1"))
61
+ for d in result["retrieved"]:
62
+ console.print(Text(f" · {d['text'][:70]}", style="dim white"))
63
+ console.print()
64
+ console.print(Panel(
65
+ Text(result["answer"], style="white"),
66
+ border_style="orange1",
67
+ title=Text("NE-AGENT", style="bold orange1"),
68
+ ))
69
+ console.print()
@@ -0,0 +1,79 @@
1
+ Metadata-Version: 2.4
2
+ Name: ne-agent
3
+ Version: 0.1.0
4
+ Summary: First open-source AI agent for Northeast Indian languages
5
+ Home-page: https://github.com/MWirelabs/ne-agent
6
+ Author: MWire Labs
7
+ Author-email: connect@mwirelabs.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.9
12
+ Description-Content-Type: text/markdown
13
+ Requires-Dist: ne-lid
14
+ Requires-Dist: ne-embed
15
+ Requires-Dist: faiss-cpu
16
+ Requires-Dist: rich
17
+ Requires-Dist: requests
18
+ Requires-Dist: pandas
19
+ Requires-Dist: openpyxl
20
+ Dynamic: author
21
+ Dynamic: author-email
22
+ Dynamic: classifier
23
+ Dynamic: description
24
+ Dynamic: description-content-type
25
+ Dynamic: home-page
26
+ Dynamic: requires-dist
27
+ Dynamic: requires-python
28
+ Dynamic: summary
29
+
30
+ # NE-Agent
31
+
32
+ **First open-source AI agent for Northeast Indian languages.**
33
+
34
+ Built on the NE-Stack by [MWire Labs](https://mwirelabs.com), Shillong.
35
+
36
+ ---
37
+
38
+ ## What is NE-Agent?
39
+
40
+ NE-Agent is a terminal-based agentic assistant that speaks Northeast India's indigenous languages. It automatically detects the input language, retrieves relevant context from a multilingual corpus, and generates responses — all running locally with no API keys required.
41
+
42
+ ---
43
+
44
+ ## Powered by NE-Stack
45
+
46
+ | Component | Role | Model |
47
+ |---|---|---|
48
+ | NE-LID | Language identification | fastText, 11 languages, 99.09% accuracy |
49
+ | NE-Embed | Multilingual embeddings | LaBSE fine-tuned, 768-dim |
50
+ | FAISS | Vector retrieval | IndexFlatIP |
51
+ | Ollama | Local LLM | qwen2.5:1.5b (default) |
52
+
53
+ ---
54
+
55
+ ## Supported Languages
56
+
57
+ Assamese · Khasi · Garo · Mizo · Meitei · Bodo · Kokborok · Nyishi · Nagamese · English
58
+
59
+ ---
60
+
61
+ ## Quickstart
62
+
63
+ ```bash
64
+ pip install ne-agent
65
+ ```
66
+
67
+ Add your corpus to `data/` and run:
68
+
69
+ ```bash
70
+ python run.py
71
+ ```
72
+
73
+ Type in any Northeast Indian language. Type `exit` or `:q` to quit.
74
+
75
+ ---
76
+
77
+ ## License
78
+
79
+ CC-BY-4.0 — MWire Labs, Shillong, Meghalaya.
@@ -0,0 +1,13 @@
1
+ README.md
2
+ setup.py
3
+ ne_agent/__init__.py
4
+ ne_agent/core.py
5
+ ne_agent/lid.py
6
+ ne_agent/llm.py
7
+ ne_agent/retriever.py
8
+ ne_agent/tui.py
9
+ ne_agent.egg-info/PKG-INFO
10
+ ne_agent.egg-info/SOURCES.txt
11
+ ne_agent.egg-info/dependency_links.txt
12
+ ne_agent.egg-info/requires.txt
13
+ ne_agent.egg-info/top_level.txt
@@ -0,0 +1,7 @@
1
+ ne-lid
2
+ ne-embed
3
+ faiss-cpu
4
+ rich
5
+ requests
6
+ pandas
7
+ openpyxl
@@ -0,0 +1 @@
1
+ ne_agent
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,20 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name="ne-agent",
5
+ version="0.1.0",
6
+ author="MWire Labs",
7
+ author_email="connect@mwirelabs.com",
8
+ description="First open-source AI agent for Northeast Indian languages",
9
+ long_description=open("README.md").read(),
10
+ long_description_content_type="text/markdown",
11
+ url="https://github.com/MWirelabs/ne-agent",
12
+ packages=find_packages(),
13
+ install_requires=open("requirements.txt").read().splitlines(),
14
+ python_requires=">=3.9",
15
+ classifiers=[
16
+ "Programming Language :: Python :: 3",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Operating System :: OS Independent",
19
+ ],
20
+ )