cantrip 1.0.1 copy "cantrip: ^1.0.1" to clipboard
cantrip: ^1.0.1 copied to clipboard

Cantrip API Client for Dart

example/cantrip_example.dart

import 'package:cantrip/cantrip.dart';

void mageServerside() async {
  // Create api client for mage
  MageClient client = MageClient("<mage api key>");

  // Get the mage object
  Mage mage = await client.mage;

  // Get the mana value
  int mana = mage.mana.toInt();

  // Create a spark
  Spark joe = await client.createSpark("joe");

  // Get the spark api key (to send to client for said spark)
  String joeApiKey = joe.apiKey;

  // Transfer 1000 mana to the spark "joe"
  await client.transferToSpark("joe", 1000);

  // Get the spark object (or update it in this case)
  joe = await client.getSpark("joe");

  // Get the mana value of the spark "joe"
  int joeMana = joe.mana.toInt();

  // Transfer 500 mana from the spark "joe" to the mage
  await client.transferFromSpark("joe", 500);

  // Create another spark
  Spark jane = await client.createSpark("jane");

  // Transfer 250 mana from joe to jane
  await client.transferSparkToSpark("joe", "jane", 250);

  // Destroy sparks (moves their mana back to owning mage)
  await client.deleteSpark("joe");
  await client.deleteSpark("jane");
}

void sparkClientside() async {
  // Create api client for spark
  SparkClient client = SparkClient("<spark api key>");

  // Get the spark object
  Spark spark = await client.spark;

  // Get the mana value
  int mana = spark.mana.toInt();
}

void clientOrServerSide() async {
  // Either MageClient or SparkClient can be used here
  CantripClient client =
      SparkClient("<spark api key>"); // Or MageClient("<mage api key>");

  // Get the model library from the server
  ModelLibrary lib = await client.modelLibrary;

  // Get the openai provider
  ModelProvider openai = lib.getProvider("openai");

  // Get the gpt-4o model
  Model gpt4o = openai.getModel("gpt-4o");

  // Scribe a simple request (maxTokens and temperature are optional)
  String answer = await client.scribe(
      model: gpt4o,
      provider: openai,
      prompt: "What is a cantrip?",
      maxTokens: 250,
      temperature: 0.75);

  // Get a scribe stream (...["A Can", "A Cantrip", "A Cantrip is a ]...)
  // You can also get the text deltas by setting deltaStream to true
  Stream<String> stream = client.scribeStream(
      model: gpt4o,
      provider: openai,
      prompt: "What is a cantrip?",
      maxTokens: 250,
      temperature: 0.75);

  // Chat with the model
  ChatRequest conversation = ChatRequest(
    messages: [
      ChatMessage(
        text: "You are a wizard! 🧙‍♂️",
        role: ChatRole.system,
      ),
      ChatMessage(
        text: "What is a cantrip?",
        role: ChatRole.user,
      ),
    ],
  );

  // Then add the response to the conversation
  conversation.messages.add(ChatMessage(
    text: await client.scribeChat(
      model: gpt4o,
      provider: openai,
      prompt: conversation,
    ),
    role: ChatRole.assistant,
  ));

  // You can also stream scribeChats as before
  Stream<ChatMessage> chatMessageStream = client
      .scribeChatStream(
        model: gpt4o,
        provider: openai,
        prompt: conversation,
      )
      .map((streamingMessage) => ChatMessage(
            text: streamingMessage,
            role: ChatRole.assistant,
          ));
}

// Actual implementation example test
void main() async {
  MageClient client = MageClient("mage(kzLfqSP8EMU6m62YiSvQfi78VcaPUhFS)");
  Mage mage = await client.mage;
  int itr = 9;
  print("Mage Mana: ${mage.mana}");

  Spark joe = await client.createSpark("joe$itr");
  print("+Joe: ${joe.toProto3Json()}");

  print("Transferring 1000 mana to Joe");
  await client.transferToSpark("joe$itr", 1000);
  joe = await client.getSpark("joe$itr");
  print("Joe Mana: ${joe.mana}");
  print("Mage Mana: ${await client.mana}");

  Spark jane = await client.createSpark("jane$itr");
  print("+Jane: ${jane.toProto3Json()}");
  print("Transferring 500 mana from Joe to Jane");
  await client.transferSparkToSpark("joe$itr", "jane$itr", 500);
  joe = await client.getSpark("joe$itr");
  jane = await client.getSpark("jane$itr");
  mage = await client.mage;
  print("Joe Mana: ${joe.mana}");
  print("Jane Mana: ${jane.mana}");
  print("Mage Mana: ${mage.mana}");

  print("Transferring 250 mana from Jane to Mage");
  await client.transferFromSpark("jane$itr", 250);
  jane = await client.getSpark("jane$itr");
  print("Jane Mana: ${jane.mana}");
  print("Destroying Jane");
  if (await client.deleteSpark("jane$itr")) {
    print("Jane has been destroyed");
  }
  mage = await client.mage;
  print("Mage Mana: ${mage.mana}");

  SparkClient joeClient = SparkClient(joe.apiKey);
  Spark joeSpark = await joeClient.spark;
  print("Joe Mana from spark client: ${joeSpark.mana}");

  // Could use client, or joeClient here
  ModelLibrary lib = await client.modelLibrary;
  print(lib.toProto3Json());

  ModelProvider openai = lib.getProvider("openai");
  print(openai.toProto3Json());

  Model gpt35t = openai.getModel("gpt-3.5-turbo");
  print(gpt35t.toProto3Json());

  String answer = await client.scribe(
      model: gpt35t,
      provider: openai,
      prompt: "What is a cantrip?",
      maxTokens: 250,
      temperature: 0.75);

  print("What is a cantrip?: $answer");

  print("=== Stream Test ===");

  ChatRequest conversation = ChatRequest(
    messages: [
      ChatMessage(
        text: "You are a wizard! 🧙‍♂️",
        role: ChatRole.system,
      ),
      ChatMessage(
        text: "What is a cantrip?",
        role: ChatRole.user,
      ),
    ],
  );

  Stream<ChatMessage> chatMessageStream = client
      .scribeChatStream(
        model: gpt35t,
        provider: openai,
        prompt: conversation,
      )
      .map((streamingMessage) => ChatMessage(
            text: streamingMessage,
            role: ChatRole.assistant,
          ));

  await for (ChatMessage message in chatMessageStream) {
    print(message.text);
  }
  print("===");
  print("Delta Test");
  Stream<String> stream = client.scribeStream(
      model: gpt35t,
      deltaStream: true,
      provider: openai,
      prompt: "What is a cantrip?",
      maxTokens: 250,
      temperature: 0.75);

  await for (String message in stream) {
    print(message);
  }
  print("===");

  await client.deleteSpark("joe$itr");
  print("Joe has been destroyed");
  print("Mage Mana: ${await client.mana}");
  print("Done");
}
1
likes
0
points
42
downloads

Publisher

verified publisherarcane.art

Weekly Downloads

Cantrip API Client for Dart

Homepage

License

unknown (license)

Dependencies

fixnum, http, protobuf

More

Packages that depend on cantrip