yandex-cloud / cloudapi

Interface definitions of Yandex.Cloud API
MIT License
77 stars 33 forks source link

"You have to specify folder ID for user account" #19

Closed kuk closed 7 months ago

kuk commented 7 months ago

Можно ли в SDK указать folder_id? Пробую использовать YandexGPT https://cloud.yandex.ru/docs/yandexgpt/api-ref/authentication, получаю ошибку

_InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
    status = StatusCode.UNAUTHENTICATED
    details = "You have to specify folder ID for user account"
    debug_error_string = "UNKNOWN:Error received from peer ipv6:%5B2a0d:d6c1:0:1c::3e3%5D:443 {grpc_message:"You have to specify folder ID for user account", grpc_status:16, created_time:"2023-12-02T13:03:07.648715+03:00"}"

Примерный код

import yandexcloud
from yandex.cloud.ai.llm.v1alpha import (
    llm_pb2,
    llm_service_pb2,
    llm_service_pb2_grpc
)

def yagpt_tokenize(sdk, text, model='general'):
    service = sdk.client(llm_service_pb2_grpc.TokenizerServiceStub)
    request = llm_service_pb2.TokenizeRequest(
        model=model,
        text=text
    )
    response = service.Tokenize(request)
    return [_.text for _ in response.tokens]

sdk = yandexcloud.SDK(iam_token=iam_token)
yagpt_tokenize(sdk, 'yagpt')

iam_token из yc iam create-token

nikolaymatrosov commented 7 months ago

Во-первых, этот вопрос уместнее было бы задавать в репозитории Python SDK, так как он касается не API в целом, а реализации SDK на конкретном языке программирования. Во-вторых, вы можете решить вашу проблему двумя путями.

  1. Написать interceptor и передавать его в interceptor либо конструктора SDK, либо его метода client. В этом интерсепторе вам нужно дописывать в метаданные запроса folder-id. Пример реализации интерсептора можно посмотреть в коде SDK.
  2. Использовать IAM-токен выписанный от имени сервисного аккаунта, так как для него не нужно передавать folder-id. См документацию.
kuk commented 7 months ago

Спасибо! Ой, да, почему-то не в тот репо написал