cd core/python
pip install -e .cd core/typescript
npm install
npm run buildfrom context import Context
# Create a context
ctx = Context(
intent="analyze_metadata",
constraints={"max_tokens": 4000},
routing={"model": "gpt-4"}
)
# Add inputs
ctx.add_input({
"title": "Data Science Handbook",
"author": "Jake VanderPlas",
"year": 2016
}, relevance=0.9)
ctx.add_input({
"title": "Python for Data Analysis",
"author": "Wes McKinney",
"year": 2017
}, relevance=0.8)
# Prune to fit token limits
ctx.prune(max_tokens=2000)
# Execute
result = ctx.execute(
task="Extract common themes from these book metadata",
api_key="your-api-key" # User-provided
)
print(result)import { Context } from '@gitbrainlab/context';
// Create a context
const ctx = new Context({
intent: 'analyze_metadata',
constraints: { maxTokens: 4000 },
routing: { model: 'gpt-4' }
});
// Add inputs
ctx.addInput({
title: 'Data Science Handbook',
author: 'Jake VanderPlas',
year: 2016
}, { relevance: 0.9 });
ctx.addInput({
title: 'Python for Data Analysis',
author: 'Wes McKinney',
year: 2017
}, { relevance: 0.8 });
// Prune to fit token limits
ctx.prune({ maxTokens: 2000 });
// Execute
const result = await ctx.execute({
task: 'Extract common themes from these book metadata',
apiKey: 'your-api-key' // User-provided
});
console.log(result);The intent defines the categorical purpose of the execution:
analyze- Analyze data or patternssummarize- Create summariesextract- Extract structured informationclassify- Categorize or labelgenerate- Create new content
Inputs have relevance scores (0.0 to 1.0) that determine their priority when pruning:
ctx.add_input(high_priority_data, relevance=0.9)
ctx.add_input(medium_priority_data, relevance=0.6)
ctx.add_input(low_priority_data, relevance=0.3)Constraints define hard limits:
ctx = Context(
intent="analyze",
constraints={
"max_tokens": 4000,
"max_time": 30, # seconds
"max_cost": 0.10 # USD
}
)Route execution based on optimization goals:
# Cost optimized
ctx.route(strategy="cost_optimized")
# Quality optimized
ctx.route(strategy="quality_optimized")
# Speed optimized
ctx.route(strategy="speed_optimized")
# Or specify explicitly
ctx.route(model="gpt-4", provider="openai")Create child contexts that inherit from parents:
parent_ctx = Context(
intent="analyze",
constraints={"max_tokens": 2000}
)
parent_ctx.add_input(base_data)
# Child inherits parent's inputs and constraints
child_ctx = parent_ctx.extend(intent="summarize")
child_ctx.add_input(additional_data)Combine multiple contexts:
ctx1 = Context(intent="analyze")
ctx1.add_input(dataset1)
ctx2 = Context(intent="analyze")
ctx2.add_input(dataset2)
# Merged context contains inputs from both
merged = ctx1.merge(ctx2)Contexts are fully serializable for:
- Passing between backend and frontend
- Storing for reproducibility
- Logging for debugging
- Caching for performance
# Python
json_str = ctx.to_json()
restored_ctx = Context.from_json(json_str)
# TypeScript
const jsonData = ctx.toJSON();
const restoredCtx = Context.fromJSON(jsonData);# .github/workflows/analyze.yml
# Run: python analyze.py
from context import Context
import os
ctx = Context(
intent="analyze_catalog",
constraints={"max_tokens": 8000},
routing={"strategy": "cost_optimized"}
)
# Load catalog data
with open("catalog.json") as f:
ctx.add_input(f.read())
# Execute with GitHub Actions secret
result = ctx.execute(
task="Identify trending themes",
api_key=os.environ["OPENAI_API_KEY"]
)
# Save results
with open("results.json", "w") as f:
f.write(result["result"])// Browser-based analysis
import { Context } from '@gitbrainlab/context';
// User provides their own API key
const apiKey = await getUserApiKey();
const ctx = new Context({
intent: 'visualize_data',
constraints: { maxTokens: 2000 },
routing: { model: 'gpt-3.5-turbo' }
});
ctx.addInput(chartData);
const result = await ctx.execute({
task: 'Generate visualization recommendations',
apiKey
});
renderChart(result.result);- Always set token constraints to avoid unexpected costs
- Use relevance scores to prioritize important inputs
- Choose appropriate strategies based on your needs
- Serialize contexts for reproducibility
- Let users provide API keys (Context doesn't manage auth)