Spaces:
Running
Running
Hide joblib-cache, fix decorator ordering.
Browse files
lynxkite-bio/src/lynxkite_bio/__init__.py
CHANGED
|
@@ -10,7 +10,7 @@ import rdkit.Chem.rdFingerprintGenerator
|
|
| 10 |
import rdkit.Chem.Fingerprints.ClusterMols
|
| 11 |
import scipy
|
| 12 |
|
| 13 |
-
mem = joblib.Memory("joblib-cache")
|
| 14 |
ENV = "LynxKite Graph Analytics"
|
| 15 |
op = ops.op_registration(ENV)
|
| 16 |
|
|
|
|
| 10 |
import rdkit.Chem.Fingerprints.ClusterMols
|
| 11 |
import scipy
|
| 12 |
|
| 13 |
+
mem = joblib.Memory(".joblib-cache")
|
| 14 |
ENV = "LynxKite Graph Analytics"
|
| 15 |
op = ops.op_registration(ENV)
|
| 16 |
|
lynxkite-graph-analytics/src/lynxkite_graph_analytics/lynxkite_ops.py
CHANGED
|
@@ -15,7 +15,7 @@ import polars as pl
|
|
| 15 |
import json
|
| 16 |
|
| 17 |
|
| 18 |
-
mem = joblib.Memory("joblib-cache")
|
| 19 |
op = ops.op_registration(core.ENV)
|
| 20 |
|
| 21 |
|
|
@@ -87,8 +87,8 @@ def import_parquet(*, filename: str):
|
|
| 87 |
return pd.read_parquet(filename)
|
| 88 |
|
| 89 |
|
| 90 |
-
@mem.cache
|
| 91 |
@op("Import CSV")
|
|
|
|
| 92 |
def import_csv(
|
| 93 |
*, filename: str, columns: str = "<from file>", separator: str = "<auto>"
|
| 94 |
):
|
|
@@ -102,8 +102,8 @@ def import_csv(
|
|
| 102 |
)
|
| 103 |
|
| 104 |
|
| 105 |
-
@mem.cache
|
| 106 |
@op("Import GraphML")
|
|
|
|
| 107 |
def import_graphml(*, filename: str):
|
| 108 |
"""Imports a GraphML file."""
|
| 109 |
files = fsspec.open_files(filename, compression="infer")
|
|
@@ -114,8 +114,8 @@ def import_graphml(*, filename: str):
|
|
| 114 |
raise ValueError(f"No .graphml file found at {filename}")
|
| 115 |
|
| 116 |
|
| 117 |
-
@mem.cache
|
| 118 |
@op("Graph from OSM")
|
|
|
|
| 119 |
def import_osm(*, location: str):
|
| 120 |
import osmnx as ox
|
| 121 |
|
|
|
|
| 15 |
import json
|
| 16 |
|
| 17 |
|
| 18 |
+
mem = joblib.Memory(".joblib-cache")
|
| 19 |
op = ops.op_registration(core.ENV)
|
| 20 |
|
| 21 |
|
|
|
|
| 87 |
return pd.read_parquet(filename)
|
| 88 |
|
| 89 |
|
|
|
|
| 90 |
@op("Import CSV")
|
| 91 |
+
@mem.cache
|
| 92 |
def import_csv(
|
| 93 |
*, filename: str, columns: str = "<from file>", separator: str = "<auto>"
|
| 94 |
):
|
|
|
|
| 102 |
)
|
| 103 |
|
| 104 |
|
|
|
|
| 105 |
@op("Import GraphML")
|
| 106 |
+
@mem.cache
|
| 107 |
def import_graphml(*, filename: str):
|
| 108 |
"""Imports a GraphML file."""
|
| 109 |
files = fsspec.open_files(filename, compression="infer")
|
|
|
|
| 114 |
raise ValueError(f"No .graphml file found at {filename}")
|
| 115 |
|
| 116 |
|
|
|
|
| 117 |
@op("Graph from OSM")
|
| 118 |
+
@mem.cache
|
| 119 |
def import_osm(*, location: str):
|
| 120 |
import osmnx as ox
|
| 121 |
|
lynxkite-lynxscribe/README.md
CHANGED
|
@@ -16,11 +16,12 @@ Run tests with:
|
|
| 16 |
uv run pytest
|
| 17 |
```
|
| 18 |
|
| 19 |
-
The LLM agent flow examples use local models.
|
| 20 |
|
| 21 |
```bash
|
| 22 |
uv pip install infinity-emb[all]
|
| 23 |
infinity_emb v2 --model-id michaelfeil/bge-small-en-v1.5
|
| 24 |
uv pip install "sglang[all]>=0.4.2.post2" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer/
|
| 25 |
python -m sglang.launch_server --model-path SultanR/SmolTulu-1.7b-Instruct --port 8080
|
|
|
|
| 26 |
```
|
|
|
|
| 16 |
uv run pytest
|
| 17 |
```
|
| 18 |
|
| 19 |
+
The LLM agent flow examples can use local models.
|
| 20 |
|
| 21 |
```bash
|
| 22 |
uv pip install infinity-emb[all]
|
| 23 |
infinity_emb v2 --model-id michaelfeil/bge-small-en-v1.5
|
| 24 |
uv pip install "sglang[all]>=0.4.2.post2" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer/
|
| 25 |
python -m sglang.launch_server --model-path SultanR/SmolTulu-1.7b-Instruct --port 8080
|
| 26 |
+
LLM_BASE_URL='http://localhost:8080/v1' EMBEDDING_BASE_URL='http://localhost:7997/' lynxkite
|
| 27 |
```
|
lynxkite-lynxscribe/src/lynxkite_lynxscribe/llm_ops.py
CHANGED
|
@@ -6,6 +6,7 @@ as an "agentic logic flow". It might just get deleted.
|
|
| 6 |
(This is why the dependencies are left hanging.)
|
| 7 |
"""
|
| 8 |
|
|
|
|
| 9 |
from lynxkite.core import ops
|
| 10 |
import enum
|
| 11 |
import jinja2
|
|
@@ -20,13 +21,20 @@ LLM_CACHE = {}
|
|
| 20 |
ENV = "LLM logic"
|
| 21 |
one_by_one.register(ENV)
|
| 22 |
op = ops.op_registration(ENV)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
|
| 25 |
def chat(*args, **kwargs):
|
| 26 |
import openai
|
| 27 |
|
| 28 |
-
chat_client = openai.OpenAI()
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
| 30 |
if key not in LLM_CACHE:
|
| 31 |
completion = chat_client.chat.completions.create(*args, **kwargs)
|
| 32 |
LLM_CACHE[key] = [c.message.content for c in completion.choices]
|
|
@@ -36,8 +44,16 @@ def chat(*args, **kwargs):
|
|
| 36 |
def embedding(*args, **kwargs):
|
| 37 |
import openai
|
| 38 |
|
| 39 |
-
embedding_client = openai.OpenAI()
|
| 40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
if key not in LLM_CACHE:
|
| 42 |
res = embedding_client.embeddings.create(*args, **kwargs)
|
| 43 |
[data] = res.data
|
|
|
|
| 6 |
(This is why the dependencies are left hanging.)
|
| 7 |
"""
|
| 8 |
|
| 9 |
+
import os
|
| 10 |
from lynxkite.core import ops
|
| 11 |
import enum
|
| 12 |
import jinja2
|
|
|
|
| 21 |
ENV = "LLM logic"
|
| 22 |
one_by_one.register(ENV)
|
| 23 |
op = ops.op_registration(ENV)
|
| 24 |
+
LLM_BASE_URL = os.environ.get("LLM_BASE_URL", None)
|
| 25 |
+
EMBEDDING_BASE_URL = os.environ.get("EMBEDDING_BASE_URL", None)
|
| 26 |
+
LLM_MODEL = os.environ.get("LLM_MODEL", "gpt-4o-mini-2024-07-18")
|
| 27 |
+
EMBEDDING_MODEL = os.environ.get("EMBEDDING_MODEL", "text-embedding-3-small")
|
| 28 |
|
| 29 |
|
| 30 |
def chat(*args, **kwargs):
|
| 31 |
import openai
|
| 32 |
|
| 33 |
+
chat_client = openai.OpenAI(base_url=LLM_BASE_URL)
|
| 34 |
+
kwargs.setdefault("model", LLM_MODEL)
|
| 35 |
+
key = json.dumps(
|
| 36 |
+
{"method": "chat", "base_url": LLM_BASE_URL, "args": args, "kwargs": kwargs}
|
| 37 |
+
)
|
| 38 |
if key not in LLM_CACHE:
|
| 39 |
completion = chat_client.chat.completions.create(*args, **kwargs)
|
| 40 |
LLM_CACHE[key] = [c.message.content for c in completion.choices]
|
|
|
|
| 44 |
def embedding(*args, **kwargs):
|
| 45 |
import openai
|
| 46 |
|
| 47 |
+
embedding_client = openai.OpenAI(base_url=EMBEDDING_BASE_URL)
|
| 48 |
+
kwargs.setdefault("model", EMBEDDING_MODEL)
|
| 49 |
+
key = json.dumps(
|
| 50 |
+
{
|
| 51 |
+
"method": "embedding",
|
| 52 |
+
"base_url": EMBEDDING_BASE_URL,
|
| 53 |
+
"args": args,
|
| 54 |
+
"kwargs": kwargs,
|
| 55 |
+
}
|
| 56 |
+
)
|
| 57 |
if key not in LLM_CACHE:
|
| 58 |
res = embedding_client.embeddings.create(*args, **kwargs)
|
| 59 |
[data] = res.data
|