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.26-cp313-cp313-win_amd64.whl (265.8 kB view details)

Uploaded CPython 3.13Windows x86-64

conversational_graph_dev-0.0.26-cp313-cp313-win32.whl (232.4 kB view details)

Uploaded CPython 3.13Windows x86

conversational_graph_dev-0.0.26-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.26-cp313-cp313-macosx_11_0_arm64.whl (299.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

conversational_graph_dev-0.0.26-cp312-cp312-win_amd64.whl (266.8 kB view details)

Uploaded CPython 3.12Windows x86-64

conversational_graph_dev-0.0.26-cp312-cp312-win32.whl (233.1 kB view details)

Uploaded CPython 3.12Windows x86

conversational_graph_dev-0.0.26-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.26-cp312-cp312-macosx_11_0_arm64.whl (301.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.26-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 171755ee6134cd7d93d3dd4a3a4054b3f3e7bde7fceba56844332cfb5ed30e84
MD5 7e82b8cb198fa3591e9b333f4eef25e8
BLAKE2b-256 c52692092fa3d775e6b9d8d5372f5523827caef29e113377d5966a325d7f02d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.26-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 a29df46650f3ca3aaf77d759abb2b9972b4426cd25116ad2049fc51afdefa303
MD5 d479b08a260deccc22fdac23b702c4fe
BLAKE2b-256 3d098172098c174cf4c50447ef252f1fbb9cbdd8818db202bab3281067dbc441

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.26-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.26-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c416c5fc021f4e31266679c8bc244ff118ee3ac098ae488018740fdca468a96
MD5 e463d93abb630d43114d6131016eef11
BLAKE2b-256 6d36bfc0e83056fe5415566500c8f2635ae098e717227d52f8e59ffd9ea6b7fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.26-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62aa2aa5597208d2c8f8ebc0102cd04dff0248ac6d8c772ecb2275a8abbd1c44
MD5 9151913fa91f4f7eadd745eef0d5b5b3
BLAKE2b-256 eaeee7d227e44082d6e2afb0c51438a4c8799dd0e8ebf5cf9e8c0f1a5edb6f50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.26-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9d1175f9d28b201ac02d00a279a25fa7434d83d936836328756c224859153e89
MD5 768fb3a56e740ef50cac5896ca079f9c
BLAKE2b-256 e645fe6db42b7f8ab06e43eaa1719201cef1c34052169b6b9b91d5d1b30085c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.26-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 747326a9043a957fc96221a758ec1e94fb245ef65e93bcf70b699cc255085824
MD5 ccc58aa18d51693f42318a0a0a7f07d6
BLAKE2b-256 3fe000166ea82edd6d55a3c3d11811ec5b0588f9f7bb7c553826081cc0dbe129

See more details on using hashes here.

File details

Details for the file conversational_graph_dev-0.0.26-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.26-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e4179652f3a9d5952ed1b8e97cccc2c5f121e7a7cc8c70626296548c748c4307
MD5 5cd57ff0ffa78f16c5db3b0899814c93
BLAKE2b-256 7b62fe679860b575f43861e90c07e19714c33503322b51b398e129d870c53b85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for conversational_graph_dev-0.0.26-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f1bad6119605d9b6bbda61cef3ed47c2c6454b9554fbea17f5da34a3bf4220e
MD5 c4ee691042ba90abdb3b8995138459a6
BLAKE2b-256 17a9700cde967d10329a8ae6787830403e11d11f19decf724729fbf1ca97d8bf

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