#Erreur 401 Client Error: Unauthorized for url: https://api.mistral.ai/v1/chat/completions

1 messages · Page 1 of 1 (latest)

sacred sonnet
#

Bonjour,
Cette erreur apparait alors que je lance une requete vers un agent.
C'est la toute 1ere fois que je poste sur Discord et que je tente un tel programme avec l'IA et je n'ai pas trouvé de réponse concernant l'autorisation d'usage des agents.

Il me semble avoir fait le nécessaire : créditer mon compte (10€) insérer la clef api, mis la bonne url.
Voici le code de mon script :

  headers = {'Authorization': 'Bearer '+api_key,'Content-Type': 'application/json'}
  data = {'prompt': prompt}
  response = requests.post(api_url, headers=headers, json=data)
  response.raise_for_status()
  return response.json().get('text', '')

Pour l'url j'utilise api_url= https://api.mistral.ai/v1/agents/completions
Mon agent utilise le modele large.
Pour info j'ai tenté de faire la meme chose avec une autre clef API sans agent cette fois et avec l'url correspondante mais j'obtiens le même retour d'"autorisation"
Un grand merci à ceux/celles qui m'aideront à avancer 👍

still vine
#

Bonjour, important a noter que sa peu prendre quelques minutes a syncroniser la clé API, suffit simplement dattendre quelques minutes et tesster la clé apres

sacred sonnet
#

Ok merci pour ton retour rapide. Je vais retenter maintenant alors mais c'est vrai que j'y passe plusieurs heures...

still vine
sacred sonnet
#

Oui j'ai vu ça mais je préfère rester déjà sur l'idée d'utiliser le python de ma machine. C'est déjà assez complexe pour moi.

sacred sonnet
#

Après plusieurs heures, je pense que je ne peux pas imputer l'erreur sur un délai d'activitation des clefs API.

still vine
#

'prompt' is not an expected keyword

#

You can find everything about our API endpoint in our API spec page

#

Should be:

{"agent_id":"...", "messages":[...]}

For the agents endpoint

sacred sonnet
#

J'ai testé le code ci-dessous en respectant les champs de l'API mais ce script renvie la meme erreur d'autorisation.

Le header a l'air correct. Qu'en pensez-vous ?


def get_text_from_ai_api(api_url, api_key):
    headers = {
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    }
    data = {
        "max_tokens": 0,
        "stream": False,
        "stop": "string",
        "random_seed": 0,
        "messages": [
            {
                "role": "user",
                "content": "En tant que journaliste, écris un paragraphe sur l'intelligence artificielle."
            }
        ],
        "response_format": {
            "type": "text",
            "json_schema": {
                "name": "string",
                "description": "string",
                "schema": {},
                "strict": False
            }
        },
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "string",
                    "description": "",
                    "strict": False,
                    "parameters": {}
                }
            }
        ],
        "tool_choice": "auto",
        "presence_penalty": 0,
        "frequency_penalty": 0,
        "n": 1,
        "prediction": {
            "type": "content",
            "content": ""
        },
        "agent_id": "ag:870e7cb9:20250305:sujet-equivalent:cc0a8418"
    }
    response = requests.post(api_url, headers=headers, json=data)

    if response.status_code == 200:
        print("Requête réussie :", response.json())
    else:
        print(f"Erreur {response.status_code}: {response.text}")

    response.raise_for_status()
    print(response.json())  # Ajoutez cette ligne pour vérifier la réponse
    return response.json().get('text', '')

# Paramètres IA
api_url = "https://api.mistral.ai/v1/agents/completions"
api_key = "ag:870e....18"
get_text_from_ai_api(api_url, api_key)
still vine
#

try this:

#
data = {
        "messages": [
            {
                "role": "user",
                "content": "En tant que journaliste, écris un paragraphe sur l'intelligence artificielle."
            }
        ],
        "agent_id": "ag:870e7cb9:20250305:sujet-equivalent:cc0a8418"
    }

replace agent_id with "model" if you are using the chat completions endpoint, keep it agent_id if you are using the agents api

sacred sonnet
#

Merci...je me doutais bien que max_tokens=0 c'était bizarre...😅 .
Ceci dit en simplifiant le script j'obtiens toujours la même erreur:


def get_text_from_ai_api(api_url, api_key):
    headers = {
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    }
    data ={
        "messages": [
            {
                "role": "user",
                "content": "En tant que journaliste, écris un paragraphe sur l'intelligence artificielle."
            }
        ],
        "agent_id": f'{api_key}'
    }
    print(f"header={headers}")
    print(f"date={data}")
    response = requests.post(api_url, headers=headers, json=data)

    if response.status_code == 200:
        print("Requête réussie :", response.json())
    else:
        print(f"Erreur {response.status_code}: {response.text}")

    response.raise_for_status()
    print(response.json())  # Ajoutez cette ligne pour vérifier la réponse
    return response.json().get('text', '')

# Paramètres IA
api_url = "https://api.mistral.ai/v1/agents/completions"
api_key = "ag:87....cc0a8418"
get_text_from_ai_api(api_url, api_key)

requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://api.mistral.ai/v1/agents/completions

Quelle galère ....😩

still vine
#

Also agent id is not the api key

#

😄 I would highly recommend simply using the python sdk

sacred sonnet
#

Mais oui...ah lala je ne suis pas concentré 🙃
Je me suis trompé entre la clef api et l'id de l'agent...
Maintenant ca fonctionne très bien.
Un grand merci à toi @still vine 🫡 pour avoir guidé mes premiers pas...

still vine
#

No problem!

sacred sonnet
#

Juste uene autre question/confirmation :
Aujourd'hui mon script fonctionne parfaitement et il consiste à créer un document à partir d'une requete à l'IA.
J'iamerais que dans la requete je puisse y mettre un fichier PDF que l'IA va analyser afin de s'appuyer dessus pour rendre un résultat plus précis.

Je suis allé voir "upload files" dans les API de Mistral mais il me semble avoir compris que seuls les fichiers au format json sont acceptés, non ?
Il faudrait donc extraire du PDF uploadé le texte pour le convertir en json ce qui m'apparait être une énorme galère...

Aurais-tu une idée pour que je puisse uploader un PDF avec un prompt pour qu'ensuite je puisse utiliser le script de création de document que j'ai réalisé ?
D'avance merci.

still vine
#
from mistralai import Mistral
import os

api_key = os.environ["MISTRAL_API_KEY"]

client = Mistral(api_key=api_key)

uploaded_pdf = client.files.upload(
    file={
        "file_name": "uploaded_file.pdf",
        "content": open("uploaded_file.pdf", "rb"),
    },
    purpose="ocr"
)  
signed_url = client.files.get_signed_url(file_id=uploaded_pdf.id)
import os
from mistralai import Mistral

# Retrieve the API key from environment variables
api_key = os.environ["MISTRAL_API_KEY"]

# Specify model
model = "mistral-small-latest"

# Initialize the Mistral client
client = Mistral(api_key=api_key)

# Define the messages for the chat
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "what is the last sentence in the document"
            },
            {
                "type": "document_url",
                "document_url": "https://arxiv.org/pdf/1805.04770"
            }
        ]
    }
]

# Get the chat response
chat_response = client.chat.complete(
    model=model,
    messages=messages
)

# Print the content of the response
print(chat_response.choices[0].message.content)

# Output: 
# The last sentence in the document is:\n\n\"Zaremba, W., Sutskever, I., and Vinyals, O. Recurrent neural network regularization. arXiv:1409.2329, 2014.