modele

CodeGeeX-4

Markdown · JSON

CodeGeeX-4

CodeGeeX4 to wielojęzyczna rodzina modeli programistycznych do generowania, uzupełniania, wyjaśniania i naprawiania kodu oraz pytań o repozytorium. Jej natywne przewodniki obejmują polecenia właściwe zadaniu, uzupełnianie luk między istniejącym kodem i używanie powiązanych plików do przygotowywania zmian z jednoznacznymi ścieżkami plików.

O modelu

Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.

CodeGeeX4 to wielojęzyczna rodzina modeli programistycznych skupiona na pomocy w programowaniu i pracy z powiązanymi plikami źródłowymi. Producent publikuje CodeGeeX4-ALL-9B jako otwartoźródłowego członka serii, rozwiniętego przez dalszy trening GLM-4-9B. Dokumentacja obejmuje generowanie i uzupełnianie kodu, pytania programistyczne, analizę repozytorium oraz połączone przepływy z interpreterem kodu, wyszukiwaniem w sieci lub wywołaniami funkcji. Zwykłym wyjściem jest tekst: kod, wyjaśnienia, odpowiedzi lub zmiany oznaczone nazwami plików, zgodnie z instrukcją zadania.

Zacznij od wyboru operacji i dostarczenia modelowi potrzebnego kodu. Natywny przewodnik poleceń systemowych zawiera osobne instrukcje dodawania komentarzy, wyjaśniania programu, tłumaczenia między językami programowania, przeglądu lub naprawy kodu, generowania testów i odpowiadania na pytania o plik. Przy naprawie dołącz błędny kod, obserwowane zachowanie i zamierzony wynik. Przy tłumaczeniu określ docelowy język programowania i podaj całą odpowiednią funkcję. Przy komentarzach instrukcja zadania producenta zachowuje kod i dodaje komentarze; w kilku zadaniach tworzących kod wymaga wyłącznie kodu. Rozróżnienia te pomagają uzyskać wynik przydatny jako materiał kodowy lub wyjaśnienie, zamiast pozostawiać format wyjścia domyślny.

Przewodniki podają polecenia systemowe po chińsku i angielsku. Język instrukcji systemowej sam w sobie nie określa języka odpowiedzi, dlatego jawnie zamów język odpowiedzi, gdy potrzebne jest wyjaśnienie. Wyspecjalizowane wskazówki przeglądu opisują wyjście chińskie; ogólne polecenie asystenta programistycznego zapewnia osobny sposób zamówienia przeglądu w innym języku. Niektóre szablony zadań ustawiają język komentarzy zgodnie ze źródłem i wykluczają mieszane wyjście chińskie i angielskie. W kontynuowanej rozmowie powtórz właściwą instrukcję przy zmianie operacji, aby żądanie wyjaśnienia nie zostało pomylone z wcześniejszym żądaniem wyjścia zawierającego wyłącznie kod.

Przy uzupełnianiu kontekstowym natywny format opisuje plik docelowy, jego język programowania i kod po obu stronach miejsca wstawienia. Użyj względnej ścieżki pliku z ###PATH: i dołącz ###LANGUAGE:; przewodnik dopuszcza pustą wartość języka, gdy jest nieznany. ###MODE: wybiera LINE dla uzupełnienia jednego wiersza lub BLOCK dla wielu wierszy, z BLOCK jako udokumentowaną wartością domyślną. Sekwencja fill-in-the-middle umieszcza najpierw sufiks, potem prefiks, a na końcu brakujący środek, oznaczone <|code_suffix|>, <|code_prefix|> i <|code_middle|>. Szablon uzupełniania producenta pomija polecenie systemowe. Zachowanie sufiksu daje modelowi otaczający przepływ sterowania i kod, który musi pozostać po wstawieniu. Wynikiem jest proponowany brakujący kod, który można następnie sprawdzić w jego oryginalnym miejscu.

Uzupełnianie między plikami dodaje powiązane fragmenty jako materiał referencyjny, każdy poprzedzony ###REFERENCE: i własnym ###PATH:. Oddziel te odniesienia od pliku docelowego i jego miejsca wstawienia. Na przykład, uzupełniając funkcję wywołującą istniejącą funkcję pomocniczą, podaj sygnaturę i implementację funkcji pomocniczej obok prefiksu i sufiksu funkcji docelowej. Przewodnik uzupełniania na poziomie projektu rozszerza to podejście na generowanie nowego pliku na podstawie wymagań projektu i odpowiedniego istniejącego kodu. Jasne ścieżki i wybrane zależności pozwalają odróżnić kod dostarczony jako dowód od pliku, który model ma uzupełnić.

Pytania o repozytorium używają innego natywnego układu: wymień każdy plik pod ###PATH:, dołącz jego kod, a następnie zadaj pytanie. Przydatne polecenie może pytać, gdzie zdefiniowano wartość lub jak wywołanie przechodzi między dostarczonymi modułami. Edycja repozytorium używa własnej instrukcji systemowej do dodawania, usuwania lub modyfikowania plików i wymaga wyjścia w postaci ###PATH: {PATH}, po którym następuje kod. Przygotuj odpowiednie pliki i opisz wymaganą zmianę, w tym plik, który należy dodać, lub zachowanie, które należy utrzymać. Traktuj zwrócone bloki oznaczone ścieżkami jako propozycje zmian; nie dowodzą, że repozytorium już zmodyfikowano lub że kod został uruchomiony.

Dla opublikowanego członka CodeGeeX4-ALL-9B producent dokumentuje kontekst 128K i zaleca wybieranie odpowiedniej zawartości repozytorium, gdy projekt przekracza to okno. Wyszukiwanie powiązanych fragmentów i przycinanie zbyt dużych wejść to etapy przygotowawcze w przewodniku repozytorium. Kontekst musi pomieścić instrukcje, dostarczony kod i wygenerowaną kontynuację, dlatego ukierunkowany zestaw plików jest często przydatniejszy niż nierozróżniony zrzut projektu. Przykładowe ustawienia generowania producenta kontrolują długość konkretnego przebiegu; nie określają uniwersalnej maksymalnej długości odpowiedzi dla każdej edycji CodeGeeX4.

Seria opisuje również połączone przepływy programistyczne z interpreterami, wyszukiwaniem i wywołaniami funkcji. Taki przepływ wymaga otaczającej aplikacji udostępniającej nazwane narzędzia i zwracającej ich wyniki do rozmowy. Zamawiając uruchamialny kod, określ docelowy język, zależności i oczekiwane zachowanie; przy analizie poproś o odpowiednie odniesienia do plików lub funkcji. Skompiluj lub uruchom proponowane zmiany w docelowym środowisku i sprawdź zachowanie względem dostarczonego wymagania przed włączeniem ich do projektu.

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions codegeex-4

codegeex-4

Zhipu /codegeex-4

Start

CodeGeeX4 to wielojęzyczna rodzina modeli programistycznych do generowania, uzupełniania, wyjaśniania i naprawiania kodu oraz pytań o repozytorium. Jej natywne przewodniki obejmują polecenia właściwe zadaniu, uzupełnianie luk między istniejącym kodem i używanie powiązanych plików do przygotowywania zmian z jednoznacznymi ścieżkami plików.

Akceptowane dane wejściowe
Tekst
Wyniki
Tekst

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Wejście
text
Wyjście
text
Format wyjściowy
json lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
codegeex-4
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limity
Minimalna liczba elementów: 1
Domyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
Zależy od modelu
Domyślnie—
Polemessages[].contentTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: Rozmowa tekstowa
Domyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · tekst UTF8

messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages
Parametrmaterial_typesKontrakttext
ParametrmessagesKontrakttablica wiadomości o strukturze role/content
Parametrfile_materialKontraktrzeczywisty dokument UTF-8 wstawiony jako dosłowny tekst; bez wywnioskowanego ID pliku
Parametroptional_controlsKontraktstream
Parametrcontrol_scopeKontraktRozmowa tekstowa; stream jest wartością logiczną i domyślnie wynosi false.
Parametroutput_modalitiesKontrakttext
Parametrhosted_operationsKontraktfalse
Parametrmultimodal_input_bindingKontraktnull

Aliasy metody: /chat/completions

Cykl życia: synchronous_or_streamed

Wyślij dokładne ID modelu wraz z messages.

Długość kontekstu nie jest limitem wyjścia.

Plik tekstowy może dostarczyć dosłowny tekst; wejścia obrazowe/dźwiękowe/obiekty plików wymagają dokładnego powiązania.

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.028 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.028 / 1K tokenów
Wejście · Odczyt cache $0 / 1K tokenów
Wejście · Zapis do cache $0 / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"codegeex-4","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="codegeex-4", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))

Odbieranie i zapisywanie wyników

Ailoot Ultra · OpenAI Chat

json lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj każdy wariant i jego treść/wywołania narzędzi/rozumowanie. W SSE składaj przyrosty według indeksu wariantu/narzędzia, zachowując końcowy powód zakończenia i dane użycia.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
Polechoices[].indexTypinteger
Polechoices[].message.contentTypstring|null
Polechoices[].message.tool_callsTyptool_call[]
Polechoices[].message.reasoning_contentTypstring
Polechoices[].message.reasoning_detailsTypobject|array
Polechoices[].finish_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot Ultra codegeex-4

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

codegeex-4

Ailoot Ultra · Anthropic Messages POST /v1/messages codegeex-4

codegeex-4

Zhipu /codegeex-4

Start

CodeGeeX4 to wielojęzyczna rodzina modeli programistycznych do generowania, uzupełniania, wyjaśniania i naprawiania kodu oraz pytań o repozytorium. Jej natywne przewodniki obejmują polecenia właściwe zadaniu, uzupełnianie luk między istniejącym kodem i używanie powiązanych plików do przygotowywania zmian z jednoznacznymi ścieżkami plików.

Akceptowane dane wejściowe
Tekst
Wyniki
json · sse

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Anthropic Messages POST /v1/messages
Wejście
text
Wyjście
json, sse
Format wyjściowy
JSON lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
codegeex-4
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
user, assistant
Domyślnie—
Polemessages[].contentTypstringWymaganieWymaganeWartości i limityDomyślnie—
Polemax_tokensTypintegerWymaganieWymaganeWartości i limityDomyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · tekst UTF-8

ciąg messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktstream
Parametrmaterial_typesKontrakttext
Parametrtext_file_materialKontraktOdczytaj rzeczywisty dokument UTF-8 i umieść jego tekst we wskazanym polu input lub w ciągu treści wiadomości.

Cykl życia: synchronous_or_streamed

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.028 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.028 / 1K tokenów
Wejście · Odczyt cache $0 / 1K tokenów
Wejście · Zapis do cache $0 / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Anthropic Messages

Kompletna minimalna treść żądania JSONcurl · użyj swojego dokumentu UTF-8Python · zapisz kompletny wynik
{
  "model": "codegeex-4",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'codegeex-4', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'codegeex-4', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Odbieranie i zapisywanie wyników

Ailoot Ultra · Anthropic Messages

JSON lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj wszystkie bloki treści, sygnatury myślenia i rzeczywiste ID użycia narzędzi. Złóż wszystkie przyrosty bloków SSE; pierwszy blok tekstowy nie jest pełnym wyjściem.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot Ultra codegeex-4

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

codegeex-4

FAQ · CodeGeeX-4
Jakie dane wejściowe i wyniki są dostępne?

POST /v1/chat/completions · codegeex-4: text → text

POST /v1/messages · codegeex-4: text → json, sse

Jakich pól używa żądanie?

POST /v1/chat/completions · codegeex-4: model, messages, stream

POST /v1/messages · codegeex-4: model, messages, max_tokens, stream

Jakie limity obowiązują?

POST /v1/chat/completions · codegeex-4: messages.min_items: 1

Więcej szczegółów

Połącz Ailoot z Claude Code, OpenCode, Hermes albo własną aplikacją.

Firma i jej portfel projektów

Firma i jej portfel projektów: miliony klientów; miesięczna sprzedaż liczona w miliardach.

Kupuj tokeny z rabatem.

Rabat subskrypcji do regularnej pracy. Kody promocyjne — do 50% na tokeny.

Subskrypcja
Wybierz plan z rabatem do regularnych żądań.
Kod promocyjny do 50%
Wpisz kod przy zakupie. Cena zostanie przeliczona według aktualnej promocji.
Koszty w historii
Model, tokeny i kwota są zapisywane dla każdego żądania.

Wybierz subskrypcję · Sprawdź ceny modeli

Połącz API z produktem, który sprzedajesz.

SaaS, aplikacje i boty na warunkach oferty i umowy licencyjnej Ailoot. Do odsprzedaży poproś o licencję resellerską.

Aplikacja komercyjna
Wbuduj generowanie tekstu, obrazów, wideo i dźwięku w płatne funkcje usługi.
Licencja resellerska
Prześlij opis projektu i schemat dostępu. Poproś o pisemne warunki używania i odsprzedaży.
Dokumenty na stronie
Oferta, umowa licencyjna i polityka przetwarzania danych są dostępne przed połączeniem.

Poproś o licencję resellerską · Oferta i umowa licencyjna