Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
51ce8e4
README intro updates.
mdrideout Nov 22, 2025
f1f2264
chore: lock grpcio-tools to 1.76.0 and add proto validation workflow
mdrideout Nov 22, 2025
37c19ca
fix: use 'uv run' for proto generation to resolve python path issues
mdrideout Nov 22, 2025
3d2d042
test update
mdrideout Nov 22, 2025
f87fce3
ci: add integration test to compare protos with junjo-ai-studio
mdrideout Nov 22, 2025
819b282
Cleaned up and removed deprecated and dead code from pre-opentelemetr…
mdrideout Nov 22, 2025
cdaf027
Made publish flow more explicit
mdrideout Nov 22, 2025
c16d273
gitignore update
mdrideout Nov 22, 2025
0cc6cad
Readme updates.
mdrideout Nov 22, 2025
1df4b42
Readme updates, fixed getting_started examples to use a factory const…
mdrideout Nov 23, 2025
7f7e15d
Formatting adjustment
mdrideout Nov 23, 2025
c750238
Docs: Update terminology, fix typos, and refactor code examples\n\n- …
mdrideout Nov 23, 2025
7bae914
Docs: Move docstrings to class level in JunjoOtelExporter and add exa…
mdrideout Nov 23, 2025
97ea1b1
Docs: Enhance JunjoOtelExporter example with local/production schemes
mdrideout Nov 23, 2025
1077203
Improved JunjoOtelExporter doc string.
mdrideout Nov 23, 2025
d5b6ab9
Refined documentation on the docker images and configurations.
mdrideout Nov 23, 2025
03cd29b
Getting started improvements and other minor formatting fixes.
mdrideout Nov 23, 2025
abad43a
Incorporated JunjoOtelExporter into generated API docs. Deleted depre…
mdrideout Nov 23, 2025
79cb247
Removed deprecated code. Lint fix.
mdrideout Nov 23, 2025
8d2249a
Docs renaming fixes.
mdrideout Nov 23, 2025
acfb475
Minor docs improvements.
mdrideout Nov 23, 2025
63f4675
Renaming fixes.
mdrideout Nov 23, 2025
dba9b84
Overrode sidebar template for branding.
mdrideout Nov 23, 2025
ee63f22
Added favicon
mdrideout Nov 23, 2025
6838c75
Example updates.
mdrideout Jan 31, 2026
c617a70
Documentation Improvements.
mdrideout Jan 31, 2026
b05e78e
Added description.
mdrideout Jan 31, 2026
41722ac
examples/ai_chat: switch to xAI Grok via xai-sdk
mdrideout Feb 2, 2026
5b0675f
chore: pin Python 3.11 and update examples
mdrideout Feb 2, 2026
2df2e3c
chore: bump ruff to 0.15.0 and apply unsafe fixes
mdrideout Feb 8, 2026
0ae256d
chore: apply ruff cleanup and simplify db telemetry
mdrideout Feb 8, 2026
ba94632
improved prompts for realism.
mdrideout Feb 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .DS_Store
Binary file not shown.
10 changes: 2 additions & 8 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,12 @@ jobs:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Install protobuf compiler
run: pip install grpcio-tools

- name: Generate protobuf files
run: make proto
python-version: '3.11'

- name: Build package
run: |
Expand Down
20 changes: 10 additions & 10 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -171,16 +171,16 @@ cython_debug/
# PyPI configuration file
.pypirc

# Protobuf generated code
# We commit these files to the repository to ensure that the package can be
# installed directly from GitHub without requiring the user to have the
# protobuf compiler installed.
# src/junjo/telemetry/junjo_server/proto_gen/**.*

# Keep the init
# !src/junjo/telemetry/junjo_server/proto_gen/__init__.py

# Misc
.DS_Store
.gitleaks/**
graphviz_out
graphviz_out

# Coding Agents
.claude
# Viberag index
.viberag/
# MCP config (local, not committed)
.cursor/mcp.json
# MCP config (local, not committed)
.zed/settings.json
9 changes: 0 additions & 9 deletions .pre-commit-config.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.13
3.11
22 changes: 0 additions & 22 deletions Makefile

This file was deleted.

280 changes: 203 additions & 77 deletions README.md

Large diffs are not rendered by default.

Binary file added docs/_static/favicon.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions docs/_templates/sidebar/brand.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{% extends "furo/sidebar/brand.html" %}

{% block brand_content %}
{# Check if a logo exists, if so, display it #}
{% if logo_url %}
<img class="sidebar-brand-image" src="{{ logo_url }}" alt="Logo"/>
{% endif %}

{# Use shorttitle if it exists, otherwise fallback to project or html_title #}
<span class="sidebar-brand-text">{{ shorttitle|default(project)|default(docstitle) }}</span>
{% endblock %}
13 changes: 12 additions & 1 deletion docs/api.rst
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
.. _api:

API Reference
=============
============================

Core API
--------

.. automodule:: junjo
:members:
:undoc-members:
:show-inheritance:

Telemetry API
-------------

.. automodule:: junjo.telemetry.junjo_otel_exporter
:members:
:undoc-members:
:show-inheritance:

4 changes: 2 additions & 2 deletions docs/concurrency.rst
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ When defining your workflow's graph or subflow, you can easily execute nodes and
Example execution visualization:

.. image:: _static/concurrent-visual.png
:alt: A screenshot of a Junjo workflow graph's telemetry on Junjo Server, featuring a RunConcurrent node in the workflow's graph.
:alt: A screenshot of a Junjo workflow graph's telemetry on Junjo AI Studio, featuring a RunConcurrent node in the workflow's graph.
:align: center
:width: 600px

This example demonstrates how `RunConcurrent` can be utilized to execute nodes in parallel. You can also execute entire `Subflow` instances in parallel.

All state updates made by these nodes are concurrency safe due to the immutable nature of state updates. **Junjo Server** allows you to step through state updates incrementally to see which nodes update state and when, even during high concurrency.
All state updates made by these nodes are concurrency safe due to the immutable nature of state updates. **Junjo AI Studio** allows you to step through state updates incrementally to see which nodes update state and when, even during high concurrency.

Immutable State: Ensuring Concurrency Safety
============================================
Expand Down
6 changes: 4 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
# -- Options for HTML output -------------------------------------------------

html_theme = "furo"
html_title = "Junjo Docs"
html_favicon = "_static/favicon.webp"
html_title = "Junjo AI Framework Python SDK Docs - API Reference | Junjo AI Studio"
html_short_title = "Junjo Python Docs"
html_baseurl = "https://python-api.junjo.ai/"

# Hide the link to the rst source files
Expand All @@ -41,7 +43,7 @@
# "color-brand-primary": "orange",
# "color-brand-content": "#FF8800",
# },
"sidebar_hide_name": False, # Show the project name in the sidebar
"sidebar_hide_name": True, # Show the project name in the sidebar
# "navigation_with_keys": True, # Allow navigation with arrow keys
# "announcement": "<em>Important</em> announcement!", # Add a banner at the top
}
Expand Down
34 changes: 20 additions & 14 deletions docs/core_concepts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -151,14 +151,18 @@ A `Workflow` is the main executable component that takes a `graph_factory` and a
# ... (graph creation logic)
return workflow_graph

sample_workflow = Workflow[MyWorkflowState, MyWorkflowStore](
name="My First Workflow",
graph_factory=create_graph,
store_factory=lambda: MyWorkflowStore(
initial_state=MyWorkflowState(user_input="hello")
def create_workflow() -> Workflow[MyWorkflowState, MyWorkflowStore]:
"""Factory function to create a new instance of the workflow."""
return Workflow[MyWorkflowState, MyWorkflowStore](
name="My First Workflow",
graph_factory=create_graph,
store_factory=lambda: MyWorkflowStore(
initial_state=MyWorkflowState(user_input="hello")
)
)
)

# Create and execute the workflow
sample_workflow = create_workflow()
await sample_workflow.execute()

**Passing Parameters to Factories**
Expand All @@ -179,14 +183,16 @@ concurrency safety.
# ... setup graph using the api_key
return Graph(...)

# Instantiate the workflow, using a lambda to create the factory
workflow = Workflow[MyState, MyStore](
name="configured_workflow",
graph_factory=lambda: create_graph_with_dependency(
api_key="your-secret-key"
),
store_factory=lambda: MyStore(initial_state=MyState())
)
def create_workflow() -> Workflow[MyState, MyStore]:
# Instantiate the workflow, using a lambda to create the factory
return Workflow[MyState, MyStore](
name="configured_workflow",
graph_factory=lambda: create_graph_with_dependency(
api_key="your-secret-key"
),
store_factory=lambda: MyStore(initial_state=MyState())
)

# The workflow can now be executed normally
workflow = create_workflow()
await workflow.execute()
26 changes: 13 additions & 13 deletions docs/deployment.rst
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
Junjo Server Deployment
=======================
Junjo AI Studio Deployment
===========================

Junjo Server can be deployed in various ways depending on your needs. Being based on docker containers, it's easy to deploy Junjo Server anywhere with docker compose.
Junjo AI Studio can be deployed in various ways depending on your needs. Being based on docker containers, it's easy to deploy Junjo AI Studio anywhere with docker compose.

Bare-Bones Template (Recommended Starting Point)
-------------------------------------------------
Minimal Build Template (Recommended Starting Point)
------------------------------------------------------

For a minimal, flexible Docker Compose setup that you can customize for your specific infrastructure needs, use the `Junjo Server Bare-Bones Template <https://github.com/mdrideout/junjo-server-bare-bones>`_.
For a minimal, flexible Docker Compose setup that you can customize for your specific infrastructure needs, use the `Junjo AI Studio Minimal Build Template <https://github.com/mdrideout/junjo-ai-studio-minimal-build>`_.

This GitHub template repository provides:

Expand All @@ -20,16 +20,16 @@ This GitHub template repository provides:
- Teams with existing infrastructure
- Custom deployment requirements
- Local development environments
- Learning Junjo Server architecture
- Learning Junjo AI Studio architecture
- Integration into existing docker-compose.yml files

**Quick start:**

.. code-block:: bash

# Use as GitHub template or clone
git clone https://github.com/mdrideout/junjo-server-bare-bones.git
cd junjo-server-bare-bones
git clone https://github.com/mdrideout/junjo-ai-studio-minimal-build.git
cd junjo-ai-studio-minimal-build

# Configure environment
cp .env.example .env
Expand All @@ -44,16 +44,16 @@ This GitHub template repository provides:
Digital Ocean VM Deployment Example
------------------------------------

For a complete production junjo server deployment example to a fresh virtual machine using Docker Compose, Caddy reverse proxy, and automatic HTTPS, see the `Junjo Server Deployment Example <https://github.com/mdrideout/junjo-server-deployment-example>`_.
For a complete production Junjo AI Studio deployment example to a fresh virtual machine using Docker Compose, Caddy reverse proxy, and automatic HTTPS, see the `Junjo AI Studio Deployment Example <https://github.com/mdrideout/junjo-ai-studio-deployment-example>`_.

This example demonstrates:

- **Low-cost VM setup** - Runs on a 1GB RAM VM with all services
- **Microservices architecture** - Separate containers for:

- Junjo Server Ingestion (gRPC telemetry endpoint)
- Junjo Server Backend (API & authentication)
- Junjo Server Frontend (Web UI)
- Junjo AI Studio Ingestion (gRPC opentelemetry endpoint)
- Junjo AI Studio Backend (API & authentication)
- Junjo AI Studio Frontend (Web UI)

- **Automatic HTTPS** - Caddy reverse proxy with Let's Encrypt SSL
- **Subdomain routing** - Clean URLs for different services:
Expand Down
Loading