""" Protocol 29: Antigravity Context Oracle Tools These tools allow Agents to interact with the Prime-Neuron Context Service. """ import requests import json from logos.config import SERVER_URL def query_prime_context(query_text: str, prime_band: str = None) -> str: """ Semantic search over the Prime Manifold. Args: query_text: Natural language query prime_band: "axioms" (0-1000), "mid" (1000-5000), "hitech" (5000+) """ url = f"{SERVER_URL}/v1/context/query" filters = {} if prime_band: if prime_band == "axioms": filters["prime_range"] = [0, 1000] elif prime_band == "mid": filters["prime_range"] = [1000, 5000] elif prime_band == "hitech": filters["prime_range"] = [5000, 99999] try: resp = requests.post(url, json={"query_text": query_text, "filters": filters}) if resp.status_code == 200: data = resp.json() # Synthesize for Agent summary = [f"Found {data['count']} neurons:"] for n in data['results']: summary.append(f"- [Prime {n.get('prime_index')}] {n.get('type')}: {str(n.get('payload'))[:50]}...") return "\n".join(summary) else: return f"Error: {resp.text}" except Exception as e: return f"Connection Failed: {e}" def upsert_prime_neuron(content: str, type: str = "text", prime_index: int = None) -> str: """ Writes a new concept to the Manifold. """ url = f"{SERVER_URL}/v1/context/neurons" neuron = { "type": type, "payload": content } if prime_index: neuron["prime_index"] = prime_index try: resp = requests.post(url, json={"neurons": [neuron]}) if resp.status_code == 200: data = resp.json() params = data['neurons'][0] return f"Upserted Neuron: ID={params.get('id')} Prime={params.get('prime_index')}" else: return f"Error: {resp.text}" except Exception as e: return f"Connection Failed: {e}" def parse_diagram_to_context(image_path: str, domain_context: str = "General") -> str: """ Ingests a diagram image, segments it, and stores nodes as neurons. Currently a stub for Protocol 29 Step 3. """ if not image_path: return "Error: No image path provided." # In a real implementation, this would: # 1. Call Local Vision Model (Ollama/Llava) to describe image # 2. Parse graph structure # 3. Upsert nodes # Simulating a mock upsert for the uploaded diagram mock_neuron_text = f"Diagram Node from {image_path}: {domain_context}" return upsert_prime_neuron(mock_neuron_text, "diagram_node") if __name__ == "__main__": # Test print("Upserting...") print(upsert_prime_neuron("The LOGOS System requires manifold constraints.", "axiom", 2)) print("Querying...") print(query_prime_context("manifold"))