modeli

CodeGeeX-4

Markdown · JSON

CodeGeeX-4

CodeGeeX4 je večjezična družina modelov za programiranje, namenjena ustvarjanju, dopolnjevanju, razlagi in popravljanju kode ter vprašanjem o repozitoriju. Njeni izvorni vodniki obravnavajo pozive za posamezne naloge, zapolnjevanje vrzeli med obstoječo kodo in uporabo povezanih datotek za pripravo sprememb z izrecnimi potmi datotek.

O modelu

Ta opis zajema zmožnosti modela. Vhodi, izhodi in možnosti, ki so na voljo v Ailoot, so spodaj navedeni za izbrano metodo.

CodeGeeX4 je večjezična družina modelov za programiranje, zasnovana okoli programske pomoči in dela s povezanimi izvornimi datotekami. Proizvajalec objavlja CodeGeeX4-ALL-9B kot odprtokodnega člana serije, razvitega z nadaljevanjem učenja GLM-4-9B. Njegova dokumentacija zajema ustvarjanje in dopolnjevanje kode, programska vprašanja, analizo repozitorija ter povezane poteke dela z interpreterjem kode, spletnim iskanjem ali klici funkcij. Običajni izhod je besedilo: koda, razlage, odgovori ali spremembe, označene z datotekami, glede na navodilo naloge.

Začnite z izbiro operacije in modelu podajte potrebno kodo. Izvorni vodnik za sistemske pozive ima ločena navodila za dodajanje komentarjev, razlago programa, prevajanje med programskimi jeziki, pregledovanje ali popravljanje kode, ustvarjanje testov in odgovarjanje na vprašanja o datoteki. Pri popravku vključite napačno kodo, opaženo vedenje in predvideni rezultat. Pri prevajanju določite ciljni programski jezik in predložite celotno ustrezno funkcijo. Pri komentarjih proizvajalčevo navodilo ohrani kodo in doda komentarje; pri več nalogah ustvarjanja kode zahteva samo kodo. Te razlike pomagajo, da je rezultat uporaben kot koda ali razlaga, namesto da bi oblika izhoda ostala nedoločena.

Vodniki podajajo kitajske in angleške sistemske pozive. Jezik sistemskega navodila sam po sebi ne določa jezika odgovora, zato pri zahtevani razlagi jezik odgovora navedite izrecno. Specializirane smernice za pregled opisujejo kitajski izhod; splošni poziv za programskega pomočnika ponuja ločen način, kako zahtevati pregled v drugem jeziku odgovora. Nekatere predloge nalog nastavijo jezik komentarjev tako, da ustreza izvoru, in izključijo mešani kitajski ter angleški izhod. Pri nadaljevanju pogovora ob zamenjavi operacije ponovite ustrezno navodilo naloge, da se zahteva za razlago ne zamenja s prejšnjo zahtevo za izhod samo s kodo.

Pri dopolnjevanju s kontekstom izvorna oblika opisuje ciljno datoteko, njen programski jezik in kodo na obeh straneh mesta vstavljanja. Relativno pot datoteke uporabite z ###PATH: in vključite ###LANGUAGE:; vodnik dovoljuje prazno vrednost jezika, kadar ni znan. ###MODE: izbere LINE za enovrstično dopolnitev ali BLOCK za več vrstic, pri čemer je BLOCK dokumentirana privzeta možnost. Zaporedje za zapolnjevanje sredine najprej navede pripono, nato predpono in nato manjkajočo sredino, označene z <|code_suffix|>, <|code_prefix|> in <|code_middle|>. Proizvajalčeva predloga za zapolnjevanje izpusti sistemski poziv. Ohranitev pripone modelu poda okoliški tok izvajanja in kodo, ki mora ostati po vstavljanju. Rezultat je predlagana manjkajoča koda, ki jo je nato mogoče preveriti na izvirnem mestu.

Dopolnjevanje med datotekami doda povezane izseke kot referenčno gradivo, pri čemer se vsak začne z ###REFERENCE: in svojo oznako ###PATH:. Te reference ločite od ciljne datoteke in njenega mesta vstavljanja. Pri dopolnjevanju funkcije, ki kliče obstoječo pomožno funkcijo, na primer predložite podpis in izvedbo pomožne funkcije skupaj s predpono in pripono ciljne funkcije. Vodnik za dopolnjevanje na ravni projekta ta pristop razširi na ustvarjanje nove datoteke iz projektnih zahtev in ustrezne obstoječe kode. Jasne poti in izbrane odvisnosti omogočajo ločevanje med kodo, predloženo kot dokaz, in datoteko, ki naj jo model dopolni.

Vprašanja o repozitoriju uporabljajo drugačno izvorno postavitev: vsako datoteko navedite pod ###PATH:, vključite njeno kodo in nato postavite vprašanje. Uporabna zahteva lahko vpraša, kje je vrednost določena ali kako klic prehaja med predloženimi moduli. Urejanje repozitorija uporablja svoje sistemsko navodilo za dodajanje, brisanje ali spreminjanje datotek ter zahteva izhod v obliki ###PATH: {PATH}, ki mu sledi koda. Pripravite ustrezne datoteke in opišite zahtevano spremembo, vključno z datoteko za dodajanje ali vedenjem, ki ga je treba ohraniti. Vrnjene bloke z označenimi potmi berite kot predlagane spremembe; niso dokaz, da je repozitorij že spremenjen ali da se je koda izvedla.

Za objavljenega člana CodeGeeX4-ALL-9B proizvajalec dokumentira kontekst 128K in priporoča izbiro ustrezne vsebine repozitorija, kadar projekt preseže to okno. Pridobivanje povezanih izsekov in krajšanje preobsežnih vhodov sta pripravljalna koraka v vodniku za repozitorij. Kontekst mora zajeti navodila, predloženo kodo in ustvarjeno nadaljevanje, zato je ciljno izbran nabor datotek pogosto uporabnejši od nerazločenega izpisa celotnega projekta. Proizvajalčeve vzorčne nastavitve ustvarjanja nadzorujejo dolžino posameznega izvajanja; ne določajo univerzalne največje dolžine odgovora za vse izdaje CodeGeeX4.

Serija opisuje tudi povezane programske poteke dela z interpreterji, iskanjem in klici funkcij. Tak potek dela potrebuje okoliško aplikacijo, ki zagotovi imenovana orodja in njihove rezultate vrne v pogovor. Pri zahtevi za izvedljivo kodo določite predvideni jezik, odvisnosti in pričakovano vedenje; pri zahtevi za analizo zahtevajte sklice na ustrezne datoteke ali funkcije. Predlagane spremembe prevedite ali izvedite v predvidenem okolju in preverite vedenje glede na predloženo zahtevo, preden jih vključite v projekt.

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

codegeex-4

Zhipu /codegeex-4

Začetek

CodeGeeX4 je večjezična družina modelov za programiranje, namenjena ustvarjanju, dopolnjevanju, razlagi in popravljanju kode ter vprašanjem o repozitoriju. Njeni izvorni vodniki obravnavajo pozive za posamezne naloge, zapolnjevanje vrzeli med obstoječo kodo in uporabo povezanih datotek za pripravo sprememb z izrecnimi potmi datotek.

Dovoljeni vhodi
Besedilo
Rezultati
Besedilo

Na voljo v Ailoot · vhodi in metode

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Vhod
text
Izhod
text
Izhodni format
json ali SSE
PoljeVrstaZahtevaVrednosti in omejitvePrivzeto
PoljemodelVrstastringZahtevaObveznoVrednosti in omejitve
codegeex-4
Privzeto—
PoljemessagesVrstamessage[]ZahtevaObveznoVrednosti in omejitve
Najmanjše število elementov: 1
Privzeto—
Poljemessages[].roleVrstastringZahtevaObveznoVrednosti in omejitve
Odvisno od modela
Privzeto—
Poljemessages[].contentVrstastringZahtevaIzbirnoVrednosti in omejitve
Velja, ko: Besedilni pogovor
Privzeto—
PoljestreamVrstabooleanZahtevaIzbirnoVrednosti in omejitvePrivzetofalse
Kombinacije vhodnih gradiv

Besedilo · Besedilo UTF8

messages[].content

Parametri in življenjski cikel metode
ParameterSpecifikacija
Parametercontent_typeSpecifikacijaapplication/json
ParameterrequiredSpecifikacijamodel, messages
Parametermaterial_typesSpecifikacijatext
ParametermessagesSpecifikacijapolje sporočil s strukturo role/content
Parameterfile_materialSpecifikacijadejanski dokument UTF-8 je vstavljen kot dobesedno besedilo; ID datoteke se ne izpeljuje
Parameteroptional_controlsSpecifikacijastream
Parametercontrol_scopeSpecifikacijaBesedilni pogovor; stream je logična vrednost in je privzeto false.
Parameteroutput_modalitiesSpecifikacijatext
Parameterhosted_operationsSpecifikacijafalse
Parametermultimodal_input_bindingSpecifikacijanull

Druga imena metode: /chat/completions

Življenjski cikel: synchronous_or_streamed

Pošljite natančen ID modela skupaj z messages.

Dolžina konteksta ni zgornja meja izhoda.

Besedilna datoteka lahko poda dobesedno besedilo; slikovni, zvočni vhodi in vhodi z datotečnimi objekti potrebujejo natančno vezavo.

Cenik

Tarifni podatki ne dodajajo možnosti zahteve. Podprti parametri so navedeni pri izbrani metodi.

Hitri način
Ni navedeno Ko je izbran hitri način
Način flex
Ni navedeno Ko je izbran način flex
Najvišja raven razmišljanja
Ni navedeno Ko najvišja raven razmišljanja uporablja privzeto prilagoditev (default)

Cene Ailoot

Cene po nastavitvah

NastavitevCenovna lestvicaStrošek
NastavitevOsnovne cene za žetoneCenovna lestvicaOsnovna cenaStrošek
Vhod · Vhodni žetoni $0.028 / 1K žetonov
Izhod · Izhodni žetoni $0.028 / 1K žetonov
Vhod · Branje predpomnilnika $0 / 1K žetonov
Vhod · Zapis v predpomnilnik $0 / 1K žetonov
Vhod · Zapis v predpomnilnik, 1 ura — / 1K žetonov

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. Kako delujeta rezervacija in obračun →

Primeri zahtev

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"))

Prejmi in shrani rezultate

Ailoot Ultra · OpenAI Chat

json ali SSE

Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vsako možnost odgovora ter njeno vsebino, klice orodij in sklepanje. V SSE sestavite delne spremembe po indeksu možnosti/orodja ter ohranite končni razlog zaključka in podatke o porabi.

Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora
PoljeVrsta
Poljechoices[].indexVrstainteger
Poljechoices[].message.contentVrstastring|null
Poljechoices[].message.tool_callsVrstatool_call[]
Poljechoices[].message.reasoning_contentVrstastring
Poljechoices[].message.reasoning_detailsVrstaobject|array
Poljechoices[].finish_reasonVrstastring|null
PoljeusageVrstaobject
Napake in naslednji koraki
OdgovorPogojNaslednji korak
Odgovor400 · invalid_request_errorPogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametraNaslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja.

Druga imena

Druga imena modelov

Ailoot Ultra codegeex-4

Druga imena poti metod

/chat/completions

Povezani ID-ji za klic

codegeex-4

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

codegeex-4

Zhipu /codegeex-4

Začetek

CodeGeeX4 je večjezična družina modelov za programiranje, namenjena ustvarjanju, dopolnjevanju, razlagi in popravljanju kode ter vprašanjem o repozitoriju. Njeni izvorni vodniki obravnavajo pozive za posamezne naloge, zapolnjevanje vrzeli med obstoječo kodo in uporabo povezanih datotek za pripravo sprememb z izrecnimi potmi datotek.

Dovoljeni vhodi
Besedilo
Rezultati
json · sse

Na voljo v Ailoot · vhodi in metode

Ailoot Ultra · Anthropic Messages POST /v1/messages
Vhod
text
Izhod
json, sse
Izhodni format
JSON ali SSE
PoljeVrstaZahtevaVrednosti in omejitvePrivzeto
PoljemodelVrstastringZahtevaObveznoVrednosti in omejitve
codegeex-4
Privzeto—
PoljemessagesVrstamessage[]ZahtevaObveznoVrednosti in omejitvePrivzeto—
Poljemessages[].roleVrstastringZahtevaObveznoVrednosti in omejitve
user, assistant
Privzeto—
Poljemessages[].contentVrstastringZahtevaObveznoVrednosti in omejitvePrivzeto—
Poljemax_tokensVrstaintegerZahtevaObveznoVrednosti in omejitvePrivzeto—
PoljestreamVrstabooleanZahtevaIzbirnoVrednosti in omejitvePrivzetofalse
Kombinacije vhodnih gradiv

Besedilo · Besedilo UTF-8

niz messages[].content

Parametri in življenjski cikel metode
ParameterSpecifikacija
Parametercontent_typeSpecifikacijaapplication/json
ParameterrequiredSpecifikacijamodel, messages, max_tokens
Parameteroptional_controlsSpecifikacijastream
Parametermaterial_typesSpecifikacijatext
Parametertext_file_materialSpecifikacijaPreberite dejanski dokument UTF-8 in njegovo besedilo vstavite v navedeni vhodni niz ali niz vsebine sporočila.

Življenjski cikel: synchronous_or_streamed

Cenik

Tarifni podatki ne dodajajo možnosti zahteve. Podprti parametri so navedeni pri izbrani metodi.

Hitri način
Ni navedeno Ko je izbran hitri način
Način flex
Ni navedeno Ko je izbran način flex
Najvišja raven razmišljanja
Ni navedeno Ko najvišja raven razmišljanja uporablja privzeto prilagoditev (default)

Cene Ailoot

Cene po nastavitvah

NastavitevCenovna lestvicaStrošek
NastavitevOsnovne cene za žetoneCenovna lestvicaOsnovna cenaStrošek
Vhod · Vhodni žetoni $0.028 / 1K žetonov
Izhod · Izhodni žetoni $0.028 / 1K žetonov
Vhod · Branje predpomnilnika $0 / 1K žetonov
Vhod · Zapis v predpomnilnik $0 / 1K žetonov
Vhod · Zapis v predpomnilnik, 1 ura — / 1K žetonov

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. Kako delujeta rezervacija in obračun →

Primeri zahtev

Ailoot Ultra · Anthropic Messages

Popolno minimalno telo zahteve JSONcurl · uporabite svoj dokument UTF-8Python · shranite celoten rezultat
{
  "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))

Prejmi in shrani rezultate

Ailoot Ultra · Anthropic Messages

JSON ali SSE

Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vse vsebinske bloke, podpise sklepanja in dejanske ID uporabe orodij. Sestavite vse delne spremembe blokov SSE; prvi besedilni blok ni celoten izhod.

Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora
PoljeVrsta
PoljeidVrstastring
PoljemodelVrstastring
Poljecontent[]Vrstatext|thinking|tool_use|other content block
Poljestop_reasonVrstastring|null
PoljeusageVrstaobject
Napake in naslednji koraki
OdgovorPogojNaslednji korak
Odgovor400 · invalid_request_errorPogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametraNaslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja.

Druga imena

Druga imena modelov

Ailoot Ultra codegeex-4

Druga imena poti metod

/chat/completions

Povezani ID-ji za klic

codegeex-4

FAQ · CodeGeeX-4
Kateri vhodi in rezultati so na voljo?

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

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

Katera polja uporablja zahteva?

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

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

Katere omejitve veljajo?

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

Več podrobnosti

Ailoot povežite s Claude Code, OpenCode, Hermes ali svojo aplikacijo.

Podjetje in njegov portfelj projektov

Podjetje in njegov portfelj projektov: milijoni strank; mesečna prodaja v milijardah.

Žetone kupujte s popustom.

Naročniški popust za redno delo. Promocijske kode prinesejo do 50% popusta na nakup žetonov.

Naročnina
Za redne zahteve izberite paket s popustom.
Promocijska koda do 50%
Kodo vnesite ob nakupu. Cena se preračuna po veljavni akciji.
Poraba v zgodovini
Za vsako zahtevo se shranijo model, žetoni in znesek.

Izberite naročnino · Oglejte si cene modelov

API povežite z izdelkom, ki ga prodajate.

SaaS, aplikacije in boti po ponudbi in licenčni pogodbi Ailoot. Za nadaljnjo prodajo zaprosite za preprodajno licenco.

Komercialna aplikacija
Ustvarjanje besedila, slik, videa in zvoka vključite v plačljive funkcije svoje storitve.
Licenca za preprodajalca
Pošljite opis projekta in shemo dostopa. Zahtevajte pisne pogoje uporabe in nadaljnje prodaje.
Dokumenti na strani
Ponudba, licenčna pogodba in politika obdelave podatkov so dostopne pred povezavo.

Zaprosite za preprodajno licenco · Ponudba in licenčna pogodba