Error adding custom provider (perplexity) "unsupported operand type(s) for +=: 'int' and 'str'"

Đang mở
#42 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
52/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
javascript, python
Lĩnh vực
api, backend

Hướng nghiên cứu

Start at llms/extensions/app/init.py around lines 921-923, where the traceback shows request cost and token values are accumulated, then reproduce the failure with the Perplexity custom-provider configuration from the issue. Check how response usage values are represented for other providers and verify that a chat completes without the TypeError while usage totals remain valid.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Hi, i am having some issues with adding in perplexity AI as a custom provider

error from ui

unsupported operand type(s) for +=: 'int' and 'str'

deployment

docker container

]# docker exec -it aa5a6b10ffe7 /bin/bash
llms@aa5a6b10ffe7:/app$ llms
usage: llms [-h] [--config FILE] [--providers FILE] [-m MODEL] [--chat REQUEST] [-s PROMPT] [--tools TOOLS] [--image IMAGE] [--audio AUDIO] [--file FILE] [--out MODALITY] [--args PARAMS] [--raw] [--nohistory] [--nostore] [--list] [--check PROVIDER]
            [--serve PORT] [--enable PROVIDER] [--disable PROVIDER] [--default MODEL] [--init] [--update-providers] [--reset [TYPE]] [--auth EXTENSION] [--logprefix PREFIX] [--verbose] [--add [EXTENSION]] [--remove [EXTENSION]] [--update [EXTENSION]]
            [--adduser USERNAME] [--removeuser USERNAME] [--listusers] [--lockuser [USERNAME]] [--unlockuser USERNAME]

llms v3.0.42

configs

i added this to llms.json

    "perplexity": {
      "enabled": true,
      "id": "perplexity",
      "npm": "@ai-sdk/openai-compatible",
      "api": "https://api.perplexity.ai",
      "no_tools": true,
      "env": [
        "PERPLEXITY_API_KEY"
      ],
      "models": {
        "sonar": {
          "id": "sonar",
          "name": "Perplexity Sonar"
        },
        "sonar-pro": {
          "id": "sonar-pro",
          "name": "Perplexity Sonar Pro"
        },
        "sonar-deep-research": {
          "id": "sonar-deep-research",
          "name": "Perplexity Sonar Deep Research"
        }
      }
    }

Errorr logs

2026-04-08 06:22:43.604289+00:00======== Running on http://0.0.0.0:30335 ========
2026-04-08 06:22:43.604330+00:00(Press CTRL+C to quit)
2026-04-08 06:23:24.107246+00:00provider: perplexity OpenAiCompatible
2026-04-08 06:23:24.109400+00:00POST https://api.perplexity.ai/chat/completions
2026-04-08 06:23:24.109583+00:00{
2026-04-08 06:23:24.109631+00:00"model": "sonar",
2026-04-08 06:23:24.109655+00:00"messages": [
2026-04-08 06:23:24.109678+00:00{
2026-04-08 06:23:24.109701+00:00"timestamp": 1775628830151,
2026-04-08 06:23:24.109743+00:00"role": "user",
2026-04-08 06:23:24.109766+00:00"content": [
2026-04-08 06:23:24.109789+00:00{
2026-04-08 06:23:24.109812+00:00"type": "text",
2026-04-08 06:23:24.109836+00:00"text": "hi"
2026-04-08 06:23:24.109860+00:00}
2026-04-08 06:23:24.109901+00:00],
2026-04-08 06:23:24.109929+00:00"model": "Perplexity Sonar",
2026-04-08 06:23:24.109953+00:00"usage": {
2026-04-08 06:23:24.109976+00:00"tokens": 2,
2026-04-08 06:23:24.109999+00:00"price": 0,
2026-04-08 06:23:24.110023+00:00"cost": 0
2026-04-08 06:23:24.110062+00:00}
2026-04-08 06:23:24.110085+00:00}
2026-04-08 06:23:24.110108+00:00],
2026-04-08 06:23:24.110130+00:00"modalities": [
2026-04-08 06:23:24.110154+00:00"text"
2026-04-08 06:23:24.110176+00:00],
2026-04-08 06:23:24.110236+00:00"metadata": {
2026-04-08 06:23:24.110259+00:00"tools": "none"
2026-04-08 06:23:24.110282+00:00},
2026-04-08 06:23:24.110304+00:00"stream": false
2026-04-08 06:23:24.110327+00:00}
2026-04-08 06:23:25.366572+00:00ERROR: Provider perplexity failed: unsupported operand type(s) for +=: 'int' and 'str'
2026-04-08 06:23:25.367530+00:00Traceback (most recent call last):
2026-04-08 06:23:25.367567+00:00File "/usr/local/lib/python3.11/site-packages/llms/main.py", line 1987, in g_chat_completion
2026-04-08 06:23:25.367591+00:00await filter_func(final_response, context)
2026-04-08 06:23:25.367614+00:00File "/usr/local/lib/python3.11/site-packages/llms/extensions/app/__init__.py", line 921, in chat_response
2026-04-08 06:23:25.367694+00:00total_costs += request.get("cost", 0) or 0
2026-04-08 06:23:25.367722+00:00TypeError: unsupported operand type(s) for +=: 'int' and 'str'
2026-04-08 06:23:25.367746+00:002026-04-08T06:23:25.367746180Z
2026-04-08 06:23:25.371193+00:00ERROR [app]: run_chat unsupported operand type(s) for +=: 'int' and 'str'
2026-04-08 06:23:25.371253+00:00Traceback (most recent call last):
2026-04-08 06:23:25.371277+00:00File "/usr/local/lib/python3.11/site-packages/llms/extensions/app/__init__.py", line 229, in run_chat
2026-04-08 06:23:25.371301+00:00await ctx.chat_completion(chat_req, context=context_req)
2026-04-08 06:23:25.371359+00:00File "/usr/local/lib/python3.11/site-packages/llms/main.py", line 3391, in chat_completion
2026-04-08 06:23:25.371383+00:00return await self.app.chat_completion(chat, context=context)
2026-04-08 06:23:25.371421+00:00^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-04-08 06:23:25.371445+00:00File "/usr/local/lib/python3.11/site-packages/llms/main.py", line 3069, in chat_completion
2026-04-08 06:23:25.371484+00:00response = await g_chat_completion(chat, context)
2026-04-08 06:23:25.371508+00:00^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-04-08 06:23:25.371531+00:00File "/usr/local/lib/python3.11/site-packages/llms/main.py", line 2004, in g_chat_completion
2026-04-08 06:23:25.371621+00:00raise first_exception
2026-04-08 06:23:25.371655+00:00File "/usr/local/lib/python3.11/site-packages/llms/main.py", line 1987, in g_chat_completion
2026-04-08 06:23:25.371690+00:00await filter_func(final_response, context)
2026-04-08 06:23:25.371724+00:00File "/usr/local/lib/python3.11/site-packages/llms/extensions/app/__init__.py", line 921, in chat_response
2026-04-08 06:23:25.371823+00:00total_costs += request.get("cost", 0) or 0
2026-04-08 06:23:25.371860+00:00TypeError: unsupported operand type(s) for +=: 'int' and 'str'
2026-04-08 06:23:25.371894+00:002026-04-08T06:23:25.371894194Z

Troubleshooting steps ive taken

  • ive tried setting the costs manually in the json file
  • tried moving the config to providers-extra.json
  • i went to cluade.al for help

what the AI said to do:

modify /usr/local/lib/python3.11/site-packages/llms/extensions/app/__init__.py or llms/llms/extensions/app/__init__.py lines 921-923

-                total_costs += request.get("cost", 0) or 0
-                total_input += request.get("inputTokens", 0) or 0
-                total_output += request.get("outputTokens", 0) or 0
+                try:
+                    _c = request.get("cost", 0) or 0
+                    if isinstance(_c, dict): total_costs += float(_c.get("total_cost", 0))
+                    elif isinstance(_c, str) and _c.startswith("{"): total_costs += float(__import__("json").loads(_c).get("total_cost", 0))
+                    elif _c: total_costs += float(_c)
+                except Exception: pass
+                total_input += int(float(request.get("inputTokens", 0) or 0))
+                total_output += int(float(request.get("outputTokens", 0) or 0))

Results

this did get rid of the error, however i dont know the code well enough to make PR and just dump AI code as a fix.
i did patch my local docker container and it seems fine but i dont know how that section of code is used by other models

comment

i am really new to this project and went digging through docs, and nothing really fit what if the model is in https://models.dev but not already listed in providers.json so i am totally open to the possibility that i did this adding of perplexity wrong or that im missing something

Ngôn ngữ chính
JavaScript
Star
629
Fork
31
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ServiceStack/llms

Tất cả issue của ServiceStack/llms

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.