Skip to main content

Conversational graph package

Project description

Conversational Graph

A Python package for building stateful, graph-based conversational agents. Control the flow of your AI conversations with precision using states, transitions, and tools.

Installation

pip install videosdk-conversational-graph

Features

  • Graph-Based Flow Control: Define conversations as a graph of states and transitions.
  • State Management: Manage conversation context and strict progression between logical steps.
  • Tool Integration: Integrate HTTP request tools to specific states.
  • Data Modeling: Strongly typed data extraction using Pydantic models.

Quick Start

Here is a simple example of how to build a strict conversational flow for a loan assistant.

from conversational_graph import ConversationalGraph, ConversationalDataModel, PreDefinedTool, HttpToolRequest

get_weather = PreDefinedTool().http_tool(HttpToolRequest(
        name="get_weather",
        description="Called when the user asks about the weather. This function will return the weather for the given location.",
        url="https://api.open-meteo.com/v1/forecast?latitude=21.1702&longitude=81.2402&current=temperature_2m",
        method="GET"
    )
)

# Provide Data Model with validation rules in descriptions for each field.
class LoanFlow(ConversationalDataModel):
    loan_type: str = Field(None, description="Type of loan: personal, home")
    annual_income: int = Field(None, description="Annual income of the applicant in INR")
    credit_score: int = Field(None, description="Credit score of the applicant. Must be between 300 and 850")
    property_value: int = Field(None, description="Value of the property for home loan in INR")
    loan_amount: int = Field(None, description="Desired loan amount in INR. MUST be greater than ₹11 lakh for approval")

loan_application = ConversationalGraph(
        name="Loan Application",
        DataModel= LoanFlow,
        off_topic_threshold=5,
        graph_type="STRICT"
    )
    
# Start Greeting
q0 = loan_application.state(
    name="Greeting",
    instruction="Welcome user and start the conversation and tell the weather",
    tool=get_weather
)

# Loan Type Selection
q1 = loan_application.state(
    name="Loan Type Selection",
    instruction="Ask user to select loan type. We only offer personal loan and home loan at the moment.",
)

# Personal Loan Details
q1a = loan_application.state(
    name="Personal Loan Details",
    instruction="Collect annual income and credit score for personal loan. Annual income must be > ₹5 lakh and credit score > 500."
)

# Home Loan Details
q1b = loan_application.state(
    name="Home Loan Details",
    instruction="Collect annual income, credit score, and property value for home loan. Annual income must be > ₹6 lakh, credit score > 650, and property value must be reasonable."
)

# Merged State → Loan Amount Collection
q2 = loan_application.state(
    name="Loan Amount Collection",
    instruction="Collect the desired loan amount. Minimum loan amount is ₹11 lakh for approval."
)


q2a = loan_application.state(
    name="Loan Amount Rejection",
    instruction="Inform user that the requested loan amount is below the minimum requirement of ₹11 lakh and politely end the application process."
)   

q2b = loan_application.state(
    name="Loan Amount Acceptance",
    instruction="Proceed to the next step of the application process as the requested loan amount meets the minimum requirement."
)

q3 = loan_application.state(
    name="Loan Application Complete",
    instruction="Inform user that the application has been submitted successfully"
)

# Master / Off-topic handler
q_master = loan_application.state(
    name="Off-topic Handler",
    instruction="Handle off-topic or inappropriate inputs respectfully and end the call politely",
    master=True
)


# Define Transitions

# Greeting → Loan Type Selection
loan_application.transition(
    from_state=q0,
    to_state=q1,
    condition="User ready to apply for loan"
)

# Branch from Loan Type Selection
loan_application.transition(
    from_state=q1,
    to_state=q1a,
    condition="User wants personal loan"
)

loan_application.transition(
    from_state=q1,
    to_state=q1b,
    condition="User wants home loan"
)

# Merge all branches → Loan Amount Collection
loan_application.transition(
    from_state=q1a,
    to_state=q2,
    condition="Personal loan details collected and verified"
)

loan_application.transition(
    from_state=q1b,
    to_state=q2,
    condition="Home loan details collected and verified"
)

# Loan Amount → Review and Confirm
loan_application.transition(
    from_state=q2,
    to_state=q2a,
    condition="Loan application rejected due to insufficient amount (< ₹11 lakh)"
)

loan_application.transition(
    from_state=q2,
    to_state=q2b,
    condition="Loan amount meets minimum requirement (≥ ₹11 lakh)"
)

# Review → Complete
loan_application.transition(
    from_state=q2b,
    to_state=q3,
    condition="User confirms submission of loan application"
)

Core Concepts

ConversationalGraph

The main entry point. It holds all your states and transitions.

  • name: Name of your conversational graph.
  • DataModel: A Pydantic model class that defines the schema for data you want to collect during the conversation.
  • off_topic_threshold: Number of times the conversation can go off-topic before the flow jumps to the master state.
  • graph_type: Currently supports "STRICT" for rigid flows.

State

A node in the conversation graph.

  • name: Name of the state.
  • instruction: Instructions for the LLM on what to do in this state.
  • tool: A Python function to execute in this state (optional).
  • master: If True, this state acts as a master state (optional).
  • required_fields: List of field names (matching your DataModel) that must be collected or present before the tool can run or the state is considered 'complete' (optional).

Transition

Defines the valid paths between states.

  • from_state: Source state name.
  • to_state: Destination state name.
  • condition: Description of when this transition should happen. The LLM uses this to decide the next step.

Edge Cases

  • There can be zero or one master state.
  • Tools must be accessible.
  • Every transition must point to an existing state.
  • There can only be one start state.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

conversational_graph_dev-0.0.27-cp313-cp313-win_amd64.whl (266.3 kB view details)

Uploaded CPython 3.13Windows x86-64

conversational_graph_dev-0.0.27-cp313-cp313-win32.whl (233.1 kB view details)

Uploaded CPython 3.13Windows x86

conversational_graph_dev-0.0.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

conversational_graph_dev-0.0.27-cp313-cp313-macosx_11_0_arm64.whl (300.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

conversational_graph_dev-0.0.27-cp312-cp312-win_amd64.whl (267.4 kB view details)

Uploaded CPython 3.12Windows x86-64

conversational_graph_dev-0.0.27-cp312-cp312-win32.whl (233.9 kB view details)

Uploaded CPython 3.12Windows x86

conversational_graph_dev-0.0.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

conversational_graph_dev-0.0.27-cp312-cp312-macosx_11_0_arm64.whl (301.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file conversational_graph_dev-0.0.27-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 17b93ae6c5b13cbf4c6cd16c76fb79f247e70d449059c6477591ee91b84a2fff
MD5 6091a89e932d6f5eb96943e2e9143db8
BLAKE2b-256 798d2fbb993f7f80f63dea947de23ec2c730883a12dd6ab37c67e617d6120c7a

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 6488fc4256854a9326152ce4f99119b65d6c44744d6a8cfd185235763237218d
MD5 0cdd28ebe7c72bc15e9ab47ca85d2b9f
BLAKE2b-256 1d1fd6aa5f5c8a4242efcb901b468a2740160cfc0d91b48d9ae92265e4df6a61

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7b98dc75879058fe19a531055b099352840df2baf05a68b4921ea6df39287a2
MD5 a83f65109383d3d4e2a7edc4099fcbfe
BLAKE2b-256 217eddea2a71334c64902c9cd3489fd14ff7a55fd1e716f3d6617460833e7bbe

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e85031963145eceec19019530fe6fbb9a5d8138dcb117f8cdf4cb8a688cb3e9
MD5 ac89c90ba8b3c1fced0657b9882a0760
BLAKE2b-256 201d43ac97c4867db3f806e14ef87b4f78b10f11b731c60e54ef942824f5dfec

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2270283c3a95869c7cae4b745a203eae9cd7d5c490848c4ffb53cd3018d53757
MD5 8b09453c2270df3c5617df542e2f874e
BLAKE2b-256 5cd9edcc95e18434c667a2652c97fa2364443723b91972290930493695bd7dbf

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 2706b1975ea7476d8906fb80e134e6909f8c8646f2736a0004f549164e7ba4c3
MD5 dd9df6eadc032e55a132e160d6296b77
BLAKE2b-256 070e5ced90429a11dcfc4d8b052749eda453047274e4690f0daf373e2d0c8714

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 45b07c4d8a9be66561515cd72804f55f627112d4649393e5a11bd76fd6c3fd0c
MD5 e9f17792f405d5fd41c7aee1269f63ea
BLAKE2b-256 748f72ca5f471a59c282839bff1b9b275d3151e7460ca783f7f4e9e0c9dbf9f0

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.27-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.27-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 37edc6c8ed33f2b8ea5f9d02a7b62553cc0f6454a8bf761a49eacfead39fcccd
MD5 365fdad3ba46f551a6c132b1be8758dc
BLAKE2b-256 9d87b95f0861ae5f907bc0ec5a2b5d5699d1310800d24ad24bbc2e4568fd1a90

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page