origin-gamedb 0.1.1

Rust SDK for Origin GameDB — knowledge graph ingestion and semantic search
Documentation

origin-gamedb

Rust SDK for Origin GameDB — a standalone client for the Cognee-backed knowledge graph service used to ingest, structure, and search game design data.

Crates.io docs.rs License

Installation

[dependencies]
origin-gamedb = "0.1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

Quick Start

use origin_gamedb::{CognifyOptions, GameDbClient, SearchOptions, SearchType};

#[tokio::main]
async fn main() -> origin_gamedb::Result<()> {
    let gamedb = GameDbClient::new("ca_xxx_token");

    gamedb.create_dataset("quest-design").await?;
    gamedb
        .add_text(
            "quest-design",
            "Side quests should reveal traversal mechanics before boss encounters.",
        )
        .await?;

    gamedb
        .cognify(&CognifyOptions {
            datasets: Some(vec!["quest-design".into()]),
            run_in_background: Some(true),
            ..Default::default()
        })
        .await?;

    let results = gamedb
        .search(
            "How should traversal tutorials connect to quest pacing?",
            Some(SearchOptions {
                search_type: Some(SearchType::Summaries),
                top_k: Some(5),
                datasets: Some(vec!["quest-design".into()]),
            }),
        )
        .await?;

    println!("{results}");
    Ok(())
}

Configuration

Default setup

GameDbClient::new("ca_xxx_token") uses the default API base URL:

  • https://cogneeapi.origingame.dev

Builder

Use the builder to point at a different deployment or inject a custom reqwest::Client:

let gamedb = origin_gamedb::GameDbClient::builder("ca_xxx_token")
    .base_url("https://my-gamedb.example.com")
    .http_client(reqwest::Client::new())
    .build();

What You Can Do

Dataset management

let datasets = gamedb.datasets().await?;
gamedb.create_dataset("encounter-design").await?;
gamedb.delete_dataset("dataset-id").await?;
gamedb.delete_all_datasets().await?;
let status = gamedb.dataset_status().await?;

Add text or files

gamedb
    .add_text("encounter-design", "Aggressive enemies should telegraph gap closers.")
    .await?;

gamedb
    .add_file("encounter-design", "./docs/encounters.md")
    .await?;

Build the graph

gamedb
    .cognify(&origin_gamedb::CognifyOptions {
        datasets: Some(vec!["encounter-design".into()]),
        run_in_background: Some(true),
        ..Default::default()
    })
    .await?;

Search knowledge

let results = gamedb
    .search(
        "What patterns create readable enemy pressure?",
        Some(origin_gamedb::SearchOptions {
            search_type: Some(origin_gamedb::SearchType::Insights),
            top_k: Some(8),
            datasets: Some(vec!["encounter-design".into()]),
        }),
    )
    .await?;

API Surface

GameDbClient exposes:

  • health()
  • health_detailed()
  • datasets()
  • create_dataset()
  • delete_dataset()
  • delete_all_datasets()
  • dataset_status()
  • dataset_graph()
  • dataset_data()
  • delete_data()
  • add_text()
  • add_file()
  • cognify()
  • search()
  • search_history()
  • settings()
  • save_settings()
  • ontologies()

Error Handling

All methods return origin_gamedb::Result<T>, which uses OriginError:

use origin_gamedb::OriginError;

match gamedb.search("boss phase transitions", None).await {
    Ok(results) => println!("{results}"),
    Err(OriginError::Api { status, message, .. }) => {
        eprintln!("API error ({status}): {message}");
    }
    Err(OriginError::Http(err)) => eprintln!("Network error: {err}"),
    Err(err) => eprintln!("Other error: {err}"),
}

License

Licensed under either of Apache License, Version 2.0 or MIT License at your option.