Skip to main content

python-mirage-api

Build and Release PyPI Downloads

The Mirage API Python wrapper. Access AI inference services.

Copyright 2023 Crisp IM SAS. See LICENSE for copying information.

Usage

Install the library:

pip install mirage-api

Then, import it:

from mirage_api import Mirage

Construct a new authenticated Mirage client with your user_id and secret_key tokens.

client = Mirage("ui_xxxxxx", "sk_xxxxxx")

Then, consume the client eg. to transcribe a audio file containing speech to text:

data = client.task.transcribe_speech({
  "locale": {
    "to": "en"
  },

  "media": {
    "type": "audio/webm",
    "url": "https://files.mirage-ai.com/dash/terminal/samples/transcribe-speech/hey-there.weba"
  }
})

Authentication

To authenticate against the API, get your tokens (user_id and secret_key).

Then, pass those tokens once when you instanciate the Mirage client as following:

# Make sure to replace 'user_id' and 'secret_key' with your tokens
client = Mirage("user_id", "secret_key")

Resource Methods

This library implements all methods the Mirage API provides. See the API docs for a reference of available methods, as well as how returned data is formatted.

Task API

➡️ Transcribe Speech

client.task.transcribe_speech({
  "locale": {
    "to": "en"
  },

  "media": {
    "type": "audio/webm",
    "url": "https://files.mirage-ai.com/dash/terminal/samples/transcribe-speech/hey-there.weba"
  }
});
  • Response:
{
  "reason": "processed",

  "data": {
    "locale": "en",

    "parts": [
      {
        "start": 5.0,
        "end": 9.0,
        "text": " I'm just speaking some seconds to see if the translation is correct"
      }
    ]
  }
}

➡️ Answer Prompt

  • Method: client.task.answer_prompt(data)

  • Reference: Answer Prompt

  • Request:

client.task.answer_prompt({
  "prompt": "Generate an article about Alpacas"
});
  • Response:
{
  "reason": "processed",

  "data": {
    "answer": "The alpaca (Lama pacos) is a species of South American camelid mammal. It is similar to, and often confused with, the llama. However, alpacas are often noticeably smaller than llamas. The two animals are closely related and can successfully crossbreed. Both species are believed to have been domesticated from their wild relatives, the vicuña and guanaco. There are two breeds of alpaca: the Suri alpaca and the Huacaya alpaca."
  }
}

➡️ Answer Question

  • Method: client.task.answer_question(data)

  • Reference: Answer Question

  • Request:

client.task.answer_question({
  "question": "Should I pay more for that?",

  "answer": {
    "start": "Sure,"
  },

  "context": {
    "primary_id": "cf4ccdb5-df44-4668-a9e7-3ab31bebf89b",

    "conversation": {
      "messages": [
        {
          "from": "customer",
          "text": "Hey there!"
        },

        {
          "from": "agent",
          "text": "Hi. How can I help?"
        },

        {
          "from": "customer",
          "text": "I want to add more sub-domains to my website."
        }
      ]
    }
  }
});
  • Response:
{
  "reason": "processed",

  "data": {
    "answer": "You can add the Crisp chatbox to your website by following this guide: https://help.crisp.chat/en/article/how-to-add-crisp-chatbox-to-your-website-dkrg1d/ :)",
    "sources": []
  }
}

➡️ Answer Chat

  • Method: client.task.answer_chat(data)

  • Reference: Answer Chat

  • Request:

client.task.answer_chat({
  "context": {
    "conversation": {
      "messages": [
        {
          "from": "user",
          "text": "Where is my order?"
        }
      ]
    }
  },

  "tools": [
    {
      "type": "function",

      "function": {
        "name": "get-order-details",
        "description": "Retrieves a user order details.",

        "parameters": {
          "type": "object",

          "properties": {
            "email": {
              "type": "string",
              "description": "customer email"
            },

            "order_number": {
              "type": "string",
              "description": "an order number"
            }
          },

          "required": [
            "email",
            "order_number"
          ]
        }
      }
    }
  ],

  "model": "medium"
});
  • Response:
{
  "reason": "processed",
  "data": {
    "answer": "Sure! What is your email and order number?",
    "model": "medium"
  }
}

➡️ Summarize Paragraphs

client.task.summarize_paragraphs({
  "paragraphs": [
    {
      "text": "GPT-4 is getting worse over time, not better."
    },

    {
      "text": "Many people have reported noticing a significant degradation in the quality of the model responses, but so far, it was all anecdotal."
    }
  ]
});
  • Response:
{
  "reason": "processed",

  "data": {
    "summary": "GPT-4 is getting worse over time, not better. We have a new version of GPT-4 that is not improving, but it is regressing."
  }
}

➡️ Summarize Conversation

client.task.summarize_conversation({
  "transcript": [
    {
      "name": "Valerian",
      "text": "Hello! I have a question about the Crisp chatbot, I am trying to setup a week-end auto-responder, how can I do that?"
    },

    {
      "name": "Baptiste",
      "text": "Hi. Baptiste here. I can provide you an example bot scenario that does just that if you'd like?"
    }
  ]
});
  • Response:
{
  "reason": "processed",

  "data": {
    "summary": "Valerian wants to set up a week-end auto-responder on Crisp chatbot. Baptiste can give him an example."
  }
}

➡️ Categorize Conversations

client.task.categorize_conversations({
  "conversations": [
    {
      "transcript": [
        {
          "from": "customer",
          "text": "Hello! I have a question about the Crisp chatbot, I am trying to setup a week-end auto-responder, how can I do that?"
        },

        {
          "from": "agent",
          "text": "Hi. Baptiste here. I can provide you an example bot scenario that does just that if you'd like?"
        }
      ]
    }
  ]
});
  • Response:
{
  "reason": "processed",

  "data": {
    "categories": [
      "Chatbot Configuration Issue"
    ]
  }
}

➡️ Categorize Question

client.task.categorize_question({
  "question": "Hello. I have a question."
});
  • Response:
{
  "reason": "processed",

  "data": {
    "category": "opener"
  }
}

➡️ Rank Question

  • Method: client.task.rank_question(data)

  • Reference: Rank Question

  • Request:

client.task.rank_question({
  "question": "Hi! I am having issues setting up DNS records for my Crisp helpdesk. Can you help?",

  "context": {
    "source": "helpdesk",
    "primary_id": "cf4ccdb5-df44-4668-a9e7-3ab31bebf89b"
  }
});
  • Response:
{
  "reason": "processed",

  "data": {
    "results": [
      {
        "id": "15fd3f24-56c8-435e-af8e-c47d4cd6115c",
        "score": 9,
        "grouped_text": "Setup your Helpdesk domain name\ntutorials for most providers",

        "items": [
          {
            "source": "helpdesk",
            "primary_id": "51a32e4c-1cb5-47c9-bcc0-3e06f0dce90a",
            "secondary_id": "15fd3f24-56c8-435e-af8e-c47d4cd6115c",
            "text": "Setup your Helpdesk domain name\ntutorials for most providers",
            "timestamp": 1682002198552,

            "metadata": {
              "title": "Setup your Helpdesk domain name"
            }
          }
        ]
      }
    ]
  }
}

➡️ Translate Text

  • Method: client.task.translate_text(data)

  • Reference: Translate Text

  • Request:

client.task.translate_text({
  "locale": {
    "from": "fr",
    "to": "en"
  },

  "type": "html",
  "text": "Bonjour, comment puis-je vous aider <span translate=\"no\">Mr Saliou</span> ?"
});
  • Response:
{
  "reason": "processed",

  "data": {
    "translation": "Hi, how can I help you Mr Saliou?"
  }
}

➡️ Fraud Spamicity

  • Method: client.task.fraud_spamicity(data)

  • Reference: Fraud Spamicity

  • Request:

client.task.fraud_spamicity({
  "name": "Crisp",
  "domain": "crisp.chat",
  "email_domain": "mail.crisp.chat"
});
  • Response:
{
  "reason": "processed",

  "data": {
    "fraud": false,
    "score": 0.13
  }
}

➡️ Spam Conversation

client.task.spam_conversation({
  "sender": {
    "name": "John Doe",
    "email": "john@example.com"
  },

  "transcript": [
    {
      "from": "customer",
      "origin": "chat",
      "text": "Hello, I would like to discuss your services"
    }
  ]
});
  • Response:
{
  "reason": "processed",

  "data": {
    "class": "spam",
    "confidence": 0.93,
    "logprob": -0.10,

    "scores": {
      "gibberish": 0.0,
      "marketing": 0.45,
      "regular": 0.0,
      "spam": 0.93
    }
  }
}

➡️ Spam Document

  • Method: client.task.spam_document(data)

  • Reference: Spam Document

  • Request:

client.task.spam_document({
  "name": "Spammy Domain",
  "domain": "spammy-domain.crisp.help",
  "title": "Spammy title",
  "content": "Spammy content"
});
  • Response:
{
  "reason": "processed",

  "data": {
    "class": "spam",
    "confidence": 0.82,
    "logprob": -0.10,

    "scores": {
      "gibberish": null,
      "marketing": null,
      "regular": 0.0,
      "spam": 0.82
    }
  }
}

Data API

➡️ Context Ingest

client.data.context_ingest({
  "items": [
    {
      "operation": "index",
      "primary_id": "pri_cf44dd72-4ba9-4754-8fb3-83c4261243c4",
      "secondary_id": "sec_6693a4a2-e33f-4cce-ba90-b7b5b0922c46",
      "tertiary_id": "ter_de2bd6e7-74e1-440d-9a23-01964cd4b7da",

      "text": "Text to index here...",
      "source": "chat",
      "timestamp": 1682002198552,

      "metadata": {
        "custom_key": "custom_value",
        "another_key": "another_value"
      }
    }
  ]
});
  • Response:
{
  "reason": "processed",

  "data": {
    "imported": true
  }
}

Metadata

Release files for mirage-api 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mirage-api 2.0.0
File Size Uploaded
mirage_api-2.0.0.tar.gz 7.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mirage-api 2.0.0
File Interpreter ABI Platform
mirage_api-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 15.6 kB

Release files / mirage_api-2.0.0.tar.gz

Download URL mirage_api-2.0.0.tar.gz
Size 7.5 kB
Tags Source
SHA-256 checksum
How to use checksums
fc4b024af63fa92b2e2264e5a8b7f6968eb38b236c1c4e3d3f83079aea18c0d3
BLAKE2b-256 checksum
How to use checksums
70878d8a486eb063b4a7b66b1ac1873d9290c384821c525564b3c83723ca8e5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release files / mirage_api-2.0.0-py3-none-any.whl

Download URL mirage_api-2.0.0-py3-none-any.whl
Size 8.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
317fa168cc481a5a3dc8afcd9bdbeeb6d2fa90ee515486ac77031c7fa3c1b18f
BLAKE2b-256 checksum
How to use checksums
2f82ae1083ab8c61f19b881539aa1ab633399fc36a1fcd01c5b525b4458176d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page